157
Кратки примери с Matlab Мария Николова (предстои допълване на темите, превеждане на английския текст и добавяне на литературните източници) Съдържание: Въведение в Matlab........................................2 Системни променливи и константи...........................8 Елементарни математически функции.........................9 Поелементни операции.....................................12 Символни изчисления – производни, интеграли, граници, решаване на алгебрични уравнения, изчертаване на графики на функции.................................................. 13 Числено намиране на корени на уравнения и полиноми.......16 Програмиране в Matlab....................................19 Графики.................................................. 31 Работа с матрици в Matlab. Решаване на системи линейни уравнения. Бързо преобразование на Фурие.................41 Екстремум на функция. Числено интегриране................55 Решаване на диференциални уравнения......................64 Моделиране на резонанси. Моделиране на движение на точка. Моделиране на принудени трептения на система с една степен на свобода............................................... 78 Градиент и дивергенция...................................83 SIMULINK................................................. 84 1

Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

  • Upload
    others

  • View
    21

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Кратки примери с Matlab

Мария Николова

(предстои допълване на темите, превеждане на английския текст и добавяне на литературните източници)

Съдържание:

Въведение в Matlab...........................................................................................2Системни променливи и константи...............................................................8Елементарни математически функции..........................................................9Поелементни операции..................................................................................12Символни изчисления – производни, интеграли, граници, решаване на алгебрични уравнения, изчертаване на графики на функции................13Числено намиране на корени на уравнения и полиноми.........................16Програмиране в Matlab...................................................................................19Графики.............................................................................................................31Работа с матрици в Matlab. Решаване на системи линейни уравнения. Бързо преобразование на Фурие.................................................................41Екстремум на функция. Числено интегриране...........................................55Решаване на диференциални уравнения....................................................64Моделиране на резонанси. Моделиране на движение на точка. Моделиране на принудени трептения на система с една степен на свобода.............................................................................................................78Градиент и дивергенция.................................................................................83SIMULINK...........................................................................................................84

1

Page 2: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Въведение в Matlab

След инсталацията на продукта се образува програмна група в All programs на Start-менюто под име MATLAB. Стартирането на Matlab се извършва след натискането върху Matlab R2013b– фиг. 1.

Фиг.1. Стартиране на Matlab от Start-менюто.

Отваря се работният прозорец на продукта – фиг. 2. Той се състои от 4 подпрозореца – Command Window, Workspace, Current Folder и Command History (имената на прозорците се виждат в заглавната лента над всеки прозорец). За да се показва дисплея в този вид се използва командата Layout/Default. Командите се въвеждат от клавиатурата в Command Window след знака на промпта >>. Всяка команда трябва да се потвърди след натискането на клавиш Enter.

2

Page 3: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.2. Работен прозорец на Matlab

Например да се въведе x=5. В Command Window се записва x=5 и се натиска Enter. Получаването на стойност на променлива се получава като се въведе името на променливата и се натисне Enter. Резултатът е показан на фиг. 3.

Фиг.3. Въвеждане и извеждане на данни в командния прозорец на Matlab

3

Page 4: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Както се вижда от фиг. 3 въвеждането на данни води до автоматичното записване на имената и стойностите на променливите в Workspace – в случая само на х. Въведената команда се записва автоматично в Command History. При изход от продукта данните в Command Window и Workspace се изтриват безвъзвратно. Командите в Command History остават записани и могат да се използвани при следващото стартиране (потребителска сесия) на продукта. За да се съхранят данните от Workspace на диска се избира командата Home/Save Workspace. Задава се име на файла, което е с разширение по подразбиране .mat. Не се препоръчва на потребителя да променя директорията, която Matlab подразбира за съхранение на файловете– това е Matlab - поддиректория на папката Documents на съответния потребител (user). Съхранението на съдържанието на Command Window може да се извърши като се въведе първа команда diary 'ime na fajl.txt' и се натисне Enter:>> diary 'ime na fajl.txt'След като потребителят приключи работата си, трябва да въведе командата diary off>> diary off В резултат на последната команда в папката Matlab ще бъде записан текстов файл, съдържащ копие на работата на потребителя в командния прозорец. Този файл може да се отвори в Notepad или друг текстов редактор.Преглед на стойност на променлива се извършва и като се натисне двукратно с левия бутон на мишката върху името на променлива в Workspace. В резултат се отваря редакторът на променливи – Variable editor и се показва стойността (или стойностите ако е матрица) на променливата, На фиг. 4. е показан вида на Variable editor след натискане двукратно върху х в Workspace.

4

Page 5: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 4. Извеждане на стойност на променлива в редактора за променливи

Получаването на помощ може да се извърши след натискане на бутона Help или клавиш F1, пр което се отваря прозорец Help, или след въвеждане на дума за търсене в текстовата кутия Search documentation. Бутонът и текстовата кутия се намират в горната част на прозореца на Matlab в лентата с инструменти над Workspace. Iнтересно e да се избере Demos. Друг начин за получаване на помощ е в Command Window да се напише help, след това интервал и името на командата. Например командата help ops извежда списък от операторите и знаците в Matlab: >> help ops Operators and special characters. Arithmetic operators. plus - Plus + uplus - Unary plus + minus - Minus - uminus - Unary minus - mtimes - Matrix multiply * times - Array multiply .* mpower - Matrix power ^ power - Array power .^ mldivide - Backslash or left matrix divide \ mrdivide - Slash or right matrix divide / ldivide - Left array divide .\ rdivide - Right array divide ./ kron - Kronecker tensor product kron Relational operators.

5

Page 6: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

eq - Equal == ne - Not equal ~= lt - Less than < gt - Greater than > le - Less than or equal <= ge - Greater than or equal >= Logical operators. relop - Short-circuit logical AND && relop - Short-circuit logical OR || and - Element-wise logical AND & or - Element-wise logical OR | not - Logical NOT ~ xor - Logical EXCLUSIVE OR any - True if any element of vector is nonzero all - True if all elements of vector are nonzero Special characters. colon - Colon : paren - Parentheses and subscripting ( ) paren - Brackets [ ] paren - Braces and subscripting { } punct - Function handle creation @ punct - Decimal point . punct - Structure field access . punct - Parent directory .. punct - Continuation ... punct - Separator , punct - Semicolon ; punct - Comment % punct - Invoke operating system command ! punct - Assignment = punct - Quote ' transpose - Transpose .' ctranspose - Complex conjugate transpose ' horzcat - Horizontal concatenation [,] vertcat - Vertical concatenation [;] subsasgn - Subscripted assignment ( ),{ },. subsref - Subscripted reference ( ),{ },. subsindex - Subscript index metaclass - Metaclass for MATLAB class ? Bitwise operators. bitand - Bit-wise AND. bitcmp - Complement bits. bitor - Bit-wise OR.

6

Page 7: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

bitmax - Maximum floating point integer. bitxor - Bit-wise XOR. bitset - Set bit. bitget - Get bit. bitshift - Bit-wise shift. Set operators. union - Set union. unique - Set unique. intersect - Set intersection. setdiff - Set difference. setxor - Set exclusive-or. ismember - True for set member. See also arith, relop, slash, function_handle.

От представения списък на аритметични действия се вижда, че знакът за степенуване ^ се въвежда като се натисне Shift+6.

Натискането на десния бутон върху селектирана функция или ключова дума в Matlab извежда контекстно меню, от което може да се избере командата за помощ Help on Selection – вж. главата за Елементарни функции в това пособие.

Ако потребителят не си спомня цялото име на функция, а само първите 2 букви, той може да въведе буквите в Command Window и след това да натисне клавиша TAB неколкократно един след друг. В резултат ще се покажат всички функции, които започват с тези 2 букви и потребителят може да получи помощ за търсената от него функция по един от описаните по–горе начини.

Пример- да се получи помощ за всички функции, които започват с буквите le:

7

Page 8: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 5. Извеждане на помощ по известна начална част от името на функцията

Натискането на клавиша ESC затваря отворения прозорец и потребителят ще продължи работата си.

Системни променливи и константи:Променлива/Константа Действиеans показва резултатът от последната въведена

командаeps относителна точност на операции с плаваща

точкаrealmax най-голямо число с плаваща точкаrealmin най-малко число с плаваща точкаpi 3.1416j и i имагинерна единица, inf безкрайностNaN не-цифрова стойност (Not А Number)

8

Page 9: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Елементарни математически функции

Помощ за елементарните функции може да се получи с командата help elfun, въведена в Command Window и след това се натиска клавиш Enter:>> help elfun Elementary math functions. Trigonometric. sin - Sine. sind - Sine of argument in degrees. sinh - Hyperbolic sine. asin - Inverse sine. asind - Inverse sine, result in degrees. asinh - Inverse hyperbolic sine. cos - Cosine. cosd - Cosine of argument in degrees. cosh - Hyperbolic cosine. acos - Inverse cosine. acosd - Inverse cosine, result in degrees. acosh - Inverse hyperbolic cosine. tan - Tangent. tand - Tangent of argument in degrees. tanh - Hyperbolic tangent. atan - Inverse tangent. atand - Inverse tangent, result in degrees. atan2 - Four quadrant inverse tangent. atanh - Inverse hyperbolic tangent. sec - Secant. secd - Secant of argument in degrees. sech - Hyperbolic secant. asec - Inverse secant. asecd - Inverse secant, result in degrees. asech - Inverse hyperbolic secant. csc - Cosecant. cscd - Cosecant of argument in degrees. csch - Hyperbolic cosecant. acsc - Inverse cosecant. acscd - Inverse cosecant, result in degrees. acsch - Inverse hyperbolic cosecant. cot - Cotangent. cotd - Cotangent of argument in degrees. coth - Hyperbolic cotangent. acot - Inverse cotangent. acotd - Inverse cotangent, result in degrees. acoth - Inverse hyperbolic cotangent.

9

Page 10: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

hypot - Square root of sum of squares. Exponential. exp - Exponential. expm1 - Compute exp(x)-1 accurately. log - Natural logarithm. log1p - Compute log(1+x) accurately. log10 - Common (base 10) logarithm. log2 - Base 2 logarithm and dissect floating point number. pow2 - Base 2 power and scale floating point number. realpow - Power that will error out on complex result. reallog - Natural logarithm of real number. realsqrt - Square root of number greater than or equal to zero. sqrt - Square root. nthroot - Real n-th root of real numbers. nextpow2 - Next higher power of 2. Complex. abs - Absolute value. angle - Phase angle. complex - Construct complex data from real and imaginary parts. conj - Complex conjugate. imag - Complex imaginary part. real - Complex real part. unwrap - Unwrap phase angle. isreal - True for real array. cplxpair - Sort numbers into complex conjugate pairs. Rounding and remainder. fix - Round towards zero. floor - Round towards minus infinity. ceil - Round towards plus infinity. round - Round towards nearest integer. mod - Modulus (signed remainder after division). rem - Remainder after division. sign - Signum.

Функциите са групирани според тяхното предназначение: групата Trigonometric съдържа тригонометрични функции – sind – намира синус от ъгъл, зададен в градуси; tan – тангенс от ъгъл в радиани, аtan – аркустангенс от число, като резултатът е ъгъл изведен отново в радиани, буквата d след името на функцията показва, че аргументът се въвежда в градуси например sind, cosd, tand, cotd или че резултатът от изчислението е в градуси – asind, acosd и др.; Exponential.- функции за намиране на експонента – exp (намиране на степен на неперово число), коренуване –sqrt (корен квадратен), логаритмични – log (натурален

10

Page 11: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

логаритъм при основа неперовото число), десетичен логаритъм – log10 и др.; Complex - функции за работа с комплексни числа - abs - намиране на абсолютна стойност; angle - фазов ъгъл, complex - създава комплексно число или масив от комплексни числа при зададени реална и имагинерна части, conj - намира комплексно спрегнато число на аргумента на функцията, imag - извежда имагинерната част на комплексното число, real - извежда реалната част на комплексното число и др.; Rounding and remainder – функции за закръгляне на числа и намиране на остатъци от деление - fix - отрязва дробната част на числата, floor - закръгля към по-малкото цяло число, ceil - закръгля към по-голямото цяло число round - закръгля към най-близкото цяло число както се учи по математика, mod и rem – намират остатък от целочислено деление, sign - извежда знака на числата, ако резултатът от функцията е 1 – числото е положително, ако резултатът от функцията е -1 – числото е отрицателно и ако отговорът е 0 – числото е 0.

Помощ за всяка функция се получава лесно когато:1. Маркира се само името на функцията 2. Натиска се десния бутон на мишката върху маркираната област.3. От показалото се меню се избира командата Help on Selection

Всяка функция се въвежда от потребителя с малки латински букви, аргументите й се заграждат в малки скоби и се разделят със запетаи, ако са повече от един. Например да се изчисли десетичен логаритъм от 100: В Command Window се пише log10(100), натиска се клавиша Enter и резултатът - числото 2 се получава отдолу в системната променлива ans.>> log10(100)ans = 2

По-надолу в изложението няма да се припомня, че се натиска Enter след всяка въведена команда в Command Window.

11

Page 12: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Поелементни операцииВ MATLAB съществува операции, непознати в линейната алгебра,

които се изпълняват над всеки елемент на матрицата, преобразувайки я в друга матрица със същия размер.Това са така наречените поелементни операции.

Такива операции извършват всички елементарни функции.

Например ако v=[ ], то sin(v) ще представлява вектора [sin(

),sin( ),…,sin( )].Освен това, добавяйки по една точка “.” пред обикновените математични оператори *,/,\,^, u ‘, получаваме следните поелементни оператори: .*-поелементно умножение; ./-поелементно делене отдясно; .\-поелементно делене отляво; . ^-поелементно степенуване; .’-транспониране на вектор или матрица.

Пример: Да се умножат 2 редици а и b с по 3 елемента:Въвеждаме първата редица:>> a=[1 3 -4]a = 1 3 -4

Въвеждаме втората редица:>> b=[6 7 10]b = 6 7 10

Поелементно умножаваме:>> a.*bans = 6 21 -40

12

Page 13: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Символни изчисления – производни, интеграли, граници, решаване на алгебрични уравнения, изчертаване на графики на функции

Символните изчисления се извършват с помощта на Symbolic Math Toolbox. Помощна информация за тях може да се получи като се въведе symbolic math toolbox в полето за търсене (горе вдясно на прозореца) и се натисне <Enter>. След това се избира отново Symbolic Math Toolbox. Оттам за помощ при: намиране на производни, интеграли, граници се избира Mathematics и после Calculus; решаване на уравнения се избира Mathematics и после Equation Solving; изчертаване на графики на функции – Graphics и после Function Plots.

Преди изпълнението на всяка символна функция, трябва да се декларира променливата(ите), която участва(т) във функцията като символни – с командата syms. Веднъж зададена, символната променлива не е необходимо преди всяко символно изчисление да се декларира, както това е направено в долните примери за удобство на читателя.

Пример 1: Да се намери първата производна на функцията: . Ставa с помощта на командата diff. Подразбира се диференциране

по х (т.е. dx).

>> syms x>> diff(x^2*exp(x))ans =x^2*exp(x) + 2*x*exp(x)

Пример 2: Да се намери втората производна на функцията: . Поредният номер на реда на производната (в случая 2) се отделя със запетая от функцията.>> syms x>> diff(x^2*exp(x),2)ans =2*exp(x) + x^2*exp(x) + 4*x*exp(x)

Пример 3: Да се намери неопределен интеграл от функцията: . Използва се функцията int.>> syms x>> int(x^2*exp(x))ans =exp(x)*(x^2 - 2*x + 2)

13

Page 14: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Пример 4: Да се реши определения интеграл

Необходимо е да се вмъкне и името на променливата t след подинтегралната функция, тъй като имаме функция на две променливи – х и t и интегралът е спрямо t, а не по x. Границите се отделят със запетая след t. >> syms t x>> int(x^2/t*exp(-i*t),t,0,2*pi)ans =x^2*Inf - i*x^2*Im(Ei(1, 2*pi*i)) - (pi*i*x^2)/2

Пример 5: Да се реши

Граница се изчислява с командата limit. Границите се записват, по аналогичен на интегрирането начин. >> syms x>> limit(sqrt(x^2+2)/(3*x+6),x,inf )ans =1/3

Пример 6: да се изчертае графиката на y2+3y-10 в интервала [-1, 1] по абсцисата.Двумерни графики на функции се изчертават с командата ezplot и в скоби се записва функцията. По подразбиране Matlab задава стойности по абсцисата в интервала [-2π, 2π]. В този пример потребителят сам задава интервала на стойностите по остa х.

>> syms y>> ezplot(y^2-3*y-10,-1,1) или >> ezplot(y^2-3*y-10,[-1,1])

Резултатът е показан на долната фигура:

14

Page 15: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Пример 5: Да се реши уравнението: x2 – sin(x) = cos(x)2

Уравнението се решава с командата solve и се загражда с апострофи. >> syms х

>> solve('x^2-sin(x)=cos(x)^2')ans =-0.51487291554481060387995561734182

15

Page 16: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Числено намиране на корени на уравнения и полиноми

Извиква се функцията roots за намиране на корени на полином по следния начин r = roots(c). Функцията roots връща вектор r (матрица-стълб), чиито елементи са корени на полинома с. Матрицата-ред с съдържа коефициентите на полинома, подредени по намаляващ ред на степените им – от най-високата до свободния член. Функцията poly, използвана по следния начин: p = poly(r), връща като резултат матрица-ред, чиито стойности са коефициенти на полинома с. Функциите roots и poly са инверсни.Пример: Да се намерят корените на полинома x5+8.x4

+31.x3+80.x2+94.x+20Задава се полиномът със стойностите на коефициентите си:>> pol=[1 8 31 80 94 20]pol = 1 8 31 80 94 20Намират се корените на полинома с функцията roots:>>a=roots(pol)a = -1.0000 + 3.0000i -1.0000 - 3.0000i -3.7321 -2.0000 -0.2679 Изпълнява се обратната функция за да се получат коефициентите от корените – това е една проверка на резултата.>> y=poly(a)y = 1.0000 8.0000 31.0000 80.0000 94.0000 20.0000

Вижда се, че в променливата y това са коефициентите на полинома.

Понякога Matlab дава отговор за коефициентите със стойности, разделени на числото две – в този случай се прави проверка като отново се реши уравнението с новополучените коефициенти и се вижда, че корените са същите както в началното уравнение.

Друг начин на проверка е да се обяви функцията на уравнението като inline например с име f. След това трябва да се замести всеки корен поотделно вместо х като аргумент на f и да се провери дали резултатът е равен на нула, т.е. >> f=inline('x^5+8*x^4+31*x^3+80*x^2+94*x+20')f = Inline function: f(x) = x^5+8*x^4+31*x^3+80*x^2+94*x+20

16

Page 17: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Заместваме един от корените и резултатът трябва да е равен на 0, ако уравнението е решено вярно:>> f(-2)ans = 0След това трябва да се заместят всички корени. Ще заместим само още едни:>> f(-0.2679)ans = 0.0028Вижда се, че в този случай отговорът е различен от 0 – след втория знак след десетичната точка, т.е. за получаване на число по-близко до нула би могло да се зададе формат long и да се замести този корен с повече знака след десетичната точка – резултатът би бил по-близък до нулата след заместване на корена в f.

Решаване на уравнение с roots , когато то е произведение от множители:Пример: Да се намерят корените на уравнението: (x -2). (x-3). (x+3) = 10

Първо с помощта на Symbolics Math Toolbox се опростява израза за уравнението, като се подрежда по степените на х с помощта на една от функциите simplify, collect или expand:

>> syms x>> f=(x-2)*(x-3)*(x+3)-10f =(x-2)*(x-3)*(x+3)-10

>> simplify(f)ans =x^3-2*x^2-9*x+8или >> collect(f)ans =x^3-2*x^2-9*x+8или>> expand(f)ans =x^3-2*x^2-9*x+8

Сега се задават коефициентите на уравнението в масива pol:>> pol=[1 -2 -9 8]pol = 1 -2 -9 8

17

Page 18: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>> koreni=roots(pol)koreni = 3.8108 -2.6139 0.8031

>> pol2=poly(koreni)pol2 = 1.0000 -2.0000 -9.0000 8.0000>> Същите са стойностите като на полинома

18

Page 19: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Програмиране в MatlabMatlab разполага с пълен език за програмиране, който позволява на

потребителя да пише програми. Програмата представлява последователност от оператори на Matlab, записани във файл. Тези оператори се изпълняват като в командния прозорец се напише името на файла и се натисне <Enter>– т.е. с една команда.

Програмното решаване на задачи в Matlab се извършва чрез последователно интерпретиране на команди (оператори) от езика на Matlab. Тези команди могат да се запишат в обикновен текстов файл в Notepad или в М-редактора (М – file editor) и да се стартират многократно. Вграденият редактор на М-файлове автоматично позиционира ключовите думи от програмните оператори, номерира редовете и колоните и показва стойност на променлива, участваща в програмата, ако тази стойност вече съществува в Workspace. Името на M-файла е от вида - filename.m, т.е. има разширение m и затова се нарича още М-файл. М-файловете могат да бъдат скриптове (scripts), наречени още описателни или сценарии, или функции (function).

Скриптовете са най-простата разновидност на М-файл. Те се използват за автоматизиране на последователността от команди на Matlab, като изчисления, които се повтарят при изпълнението им от командния ред. Всички променливи, които скриптът създава, остават в работното пространство след като завърши изпълнението на скрипта и потребителят може да използва променливите за следващи изчисления. М-скриптовете не използват входни и изходни параметри (аргументи), оперират с данни от работната област (Workspace) и генерират резултати (данни), които се съхраняват и могат да се ползват отново в работната област.

М-функциите съдържат входни и изходни параметри. Това са променливи, с които се предават данни за изчисление на стойност (стойности) на функцията – входни параметри и променливи (или само една променлива), с които се извежда резултат от изчислението на функцията – иаходни параметри (или само един изходен параметър) . Вътрешните им променливи се явяват локални по отношение на функцията и не могат да се използват в работното пространство.

Стъпките по създаването и използването на М-файлове са:1. Създаване на файла в текстов редактор и записване под

определено име и разширение .m2. Стартиране (извикване) на файла от командния ред в Command

Window или в друг М-файл.

Пример1 за М-script – да се състави програма за намиране на модула от стойностите на 2 едномерни масива - вектора ( в случая матрици-ред):

a=1:0.5:10b=21:0.5:30

19

Page 20: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

d=sqrt(a.^2+b.^2)

Въвеждането на горните 3 реда в редактора на m-файлове става като:

1. Отваря се редактора от Home-таба след натискане на бутона New Script или след натискане на бутона New и след това избиране на Script.

2. Въвеждат се трите оператора в редактора от клавиатурата.

Тези три оператора на Matlab се записват под име например modul2.m като се натисне иконата Save в таб Editor от лентата на редактора или се избере Save as от падащия списък с команди под Save:

Фиг. Въведен m- скрипт в редактора и записването му на диска

Изпълнението на файла става по един от двата начина: а)в Command Window на командния ред (>>) се въведe само името на скрипта - modul2 и след това се натисне клавиша Enter илиб)Натиска се бутона Run със зеления триъгълник от лентата на редактора.

И в двата случая след изпълнението на програмата стойностите на променливите а, b и d се появяват в Command Window и в работното пространство.

20

Page 21: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 7. Резултат от изпълнението на скрипта

Ако след оператор се въведе точка и запетая (;) тогава се подтиска извеждането на резултата от изпълнението му. Така, ако програмата от горния пример се промени по следния начин:a=1:0.5:10;b=21:0.5:30;d=sqrt(a.^2+b.^2)

след изпълнението й, в командния прозорец се появяват само резултатите за d – последния оператор от програмата. Променливите винаги се записват в Workspace.

1. Оператори за въвеждане и извеждане input, disp, errorПример:n=input('Wawedete n>0 ')m=input('Wawedete m>0 ')error('n i m triabwa da sa >0');disp (' m= a='); disp([m, a])

Оператор input извежда на екрана текста, заграден в апострофите. Потребителят въвежда число и след това натиска клавиш <Enter>. Въведеното число се присвоява като стойност на името на променливата в лявата част на израза за input (за първия ред от горния пример, това е променливата n). Ако потребителят натисне <Enter> без да въведе стойност, на името на променливата не се присвоява стойност. Ако се въведе оператор input без в лявата страна да има знак равно и име на променлива, (т.е. без n=), и след това се въведе стойност и се натисне <Enter>, въведената стойност се присвоява на системната променлива ans.Оператор еrror извежда съобщение (текста в апострофите) и прекъсва изпълнението на функциятаОператор disp извежда текст или масив

21

Page 22: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Пример2 за промяна на скрипта от Пример1 с добавяне на оператор input за въвеждане от потребителя на стойност на променливата s за въвеждане на произволно число за повдигане в степен.

a=1:0.5:10b=21:0.5:30s=input('Въведете число: ')d=sqrt(a.^s+b.^s)

2. Структура на М-функция

function Име на променлива=Име на функцията(Списък от входни аргументи)%Коментар, който се извежда на екрана при използване на команда help Име на функцията% Редовете с коментари (ако има такива) преди Оператор 1 също се извеждат на дисплея с help Име на функцията Оператор 1.....Оператор nИме на променливата=Израз

Функцията се съхранява във файл с име еднакво с Името на функцията и разширение m. Препоръчва се името на функцията да е с малки букви за да може да се използва и от други операционни системи, ако се наложи. Името на функцията трябва да бъде уникално, т.е. да не съвпада с друго име на M-файл или вградена функция. Резултатът от изпълнението на функцията Matlab присвоява на името на променливата, която се нарича изходен аргумент на функцията. В Пример3 резултатът от изпълнението на функцията се присвоява на променливата с. Входните аргументи са а и b. Стойности на а и b се задават преди извикването на функцията modul или директно се въвеждат числа на мястото на а и b.

Пример3: Да се състави функция за изчисляване на модула от стойностите на 2 вектора.

Въвеждането на текста на функцията става в m-редактора като от Home - таба в прозореца на Матлаб се избере командaтa: New/Function. Отваря се прозорец, където има предварително въведен ред за заглавието на функцията и за коментар.Коментарът започва със знака %.

function c=modul(a,b)%Изчислява модула от стойностите на 2 вектораc=sqrt(a.^2+(b.^2))%резултат

22

Тези оператори образуват тялото на функцията

Page 23: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Името на файла, в заглавния ред на функцията function c=modul(a,b) е modul.m и файлът сe съхранява под същото име modul.m в работната директория на Matlab след избиране на командата Save as. За да се избегнат проблеми при изпълнението на функцията, не се препоръчва името на файла на диска да е различно от зададеното вече име в заглавния ред на функцията.

Когато се зададе команда Help modul от командния прозорец, тогава се извежда на екрана коментарния ред Изчислява модула от стойностите на 2 вектора.

Извикване (стартиране) на функцията:Извършва се по 3 начина:

От редактора: от стрелката под бутона Run се избира Run: type code to run, натиска се върху type code to run и в появилото се име на функцията се задават стойности на аргументите

от командния ред на Command Window, като не се забравя да се въведат стойности на аргументите

от друг .m-файл посредством изписване на името на функцията и входните аргументи.

Фиг. Стартиране на функцията от m-редактора

Пример за стартирането на функцията от командния прозорец:Първи начин – задаване на стойности на а и b в променливи преди извикване на функцията. Въвеждат се 2 вектора v и к с данни и след това на мястото на а се въвежда v, а на мястото на b – масива к.

>> v=1:10>> k=2:11

23

Page 24: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>> modul(v,k)

Като резултат на екрана се извеждат стойностите от резултата за модула (променлива с) в 10 колони (Columns).

c = Columns 1 through 7 2.2361 3.6056 5.0000 6.4031 7.8102 9.2195 10.6301 Columns 8 through 10 12.0416 13.4536 14.8661

Втори начин –директно се задават стойности на входните аргументи:

>> modul(1:10,2:11)

Резултатът от изпълнението на на функцията по двата начина е един и същ.

Когато се налага да извикаме функцията в друг m-файл, трябва да въведем името на функцията с нейните аргументи в текста на програмата. Създаден е файл с име operfunc.m със следното съдържание:v=1:10k=2:11modul(v,k)

Когато се стартира от командния прозорец operfunc.m, резултатът е аналогичен на показания в предишния пример.Ако функцията притежава повече от един изходен аргумент, тогава аргументите се записват в квадратни скоби след ключовата дума function.

Пример4 Да се изчисли модул, синуси експонента на 2 вектора:Файлът izrazi.m съдържа функцията izrazi с 3 изходни аргумента: c, y и z. Текстът на файла е:

function [c,y,z]=izrazi(a,b)%Изчислява модул от стойностите на 2 вектора, sinus и exponenta c=sqrt(a.^2+(b.^2))%резултат за сy=sin(c)%резултат за yz=exp(y)%резултат за z

Извикване на функцията от командния прозорец:>> izrazi(0,pi)

Резултатът от изпълнението на функцията е:c = 3.1416

24

Page 25: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

y = 1.2246e-016z = 1.0000ans = 3.1416

Всяка М - функция притежава свои локални променливи, които участват в изрази в тялото на функцията. Стойностите на локалните функции не са достъпни в работната област и не могат да се използват директно в командния прозорец. За да стане това, необходимо е да се зададе команда global.

3. Условен оператор if…else…elseif…endИма три начина на записване и използва на оператор if

Първи начин – конструкция if-end (на англ. оператор if)if логически израз (логическо условие)оператори (инструкции)endМогат да се влагат произволен брой оператори if един в друг.

Пример5: Да се въведе едно число и да се провери дали е четно. Да се изведе текст, ако числото е четно.a=input('Въведете число')if rem(a,2) == 0 disp('a е четно') end

Втори начин – конструкция if-else end(на англ. оператор else)

if логически изразоператориelseоператориend

Пример6: Да се въведе едно число и да се провери дали е четно. Да се изведе текст, указващ дали числото е четно или нечетно.

a=input('Въведете число')if rem(a,2) == 0 disp('a е четно')else disp('a е нечетно')end

25

Page 26: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Трети начин – конструкция if-elseif-else end (на англ. оператор elseif)

if логически изразоператориelseif логически изразоператориelseоператориend

Пример7: Да се състави програма (script) за въвеждане на две положителни числа m и n. Да се направи проверка дали числата са положителни и ако не са, да се изведе съобщение за грешка. Ако n е четно, да се раздели на две, ако n е нечетно да се прибави към него единица и след това да се раздели на две и резултатът се присвои на променлива с име а. Ако n е нечетно m да присвои стойността на n. Да се изведат стойностите на а и m

n=input('Въведете n>0 ');m=input(' Въведете m>0 ');if (n<0 | m<0) error('n и m трябва да са >0');elseif rem (n,2)==0 % ако n>0, то е четно – да го разделим на 2 a=n/2;else a=(n+1)/2; m=n;end;disp (' m= a='); disp([m, a]);

4. Оператор за цикъл forЦикличен алгоритъм (цикъл) се нарича този алгоритъм, при който

едно или група действия, записани само веднъж, се извършват многократно при еднократното изпълнение на алгоритъма. Групата от действия, която трябва да се извърши многократно се нарича тяло на цикъла. Оператори за цикъл са while и for.

Няколко варианта на оператор for:Първи вариант – стъпката на нарастване на брояча е 1: for променлива-брояч = начална стойност : крайна стойностоператориend

26

Page 27: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Действие на цикъла: „За стойностите от начална до крайна през единица на променливата-брояч на цикъла, изпълнявай операторите между for и end. След това премини към оператора, следващ end”.

Втори вариант – стъпката на нарастване на брояча е произволна:for променлива-брояч = начална стойност : стъпка на нарастване : крайна стойностоператориend

Трети вариант – Стойностите на брояча са равни на стойностите на зададен масивfor променлива-брояч = масивоператориend

Примери:for i=1:7 a(i)=sqrt(i-1)end

Da se wawede matricata M=[-3.5 6 8; 4 7 9; 10 -12 0]%Da se izchisli sumata ot otricatelnite elementi na matricata

M=[-3.5 6 8; 4 7 9; 10 -12 0]sum=0for i=1:3 for j=1:3 if M(i,j)<0 sum=sum+M(i,j) end endendsum

5. Оператор за цикъл while.while логически израз операториendДействие на цикъла: „Докато стойността на логическия израз е истина (true), изпълнявай операторите между while и end. Ако стойността на логическия израз е лъжа (false), премини към оператора, следващ end”

Примери:Пример 1n=1;

27

Page 28: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

while prod(1:n)<100 n=n+1;endn

Пример 2:for i=1:7 a(i)=sqrt(i-1)endm=1.6

i=1while a(i)<=m i=i+1 d=a(i)enddisp(d)disp(i)

6. Оператор за прекъсване на изпълнението на цикъл break и оператор continue за преминаване към следващата итерация в for или while.

Пример 1%Da se wawede matricata M=[-3.5 6 8; 4 7 9; 10 -12 0]%Da se izchisli sumata ot elementite na matricata, dokato sumata im stane%po-goliama ot 20

M=[-3.5 6 8; 4 7 9; 10 -12 0]sum=0for i=1:3 for j=1:3 if sum>20 break end sum=sum+M(i,j) endend

Пример 2.%Da se wawede matricata M=[-3.5 6 8; 4 7 9; 10 -12 0]%Da se izchisli sumata ot elementite na matricata, dokato sumata im stane%po-goliama ot 20%Da se izwede elementyt, pri kojto sumata e po-goliama ot 20 i indeksite mu

M=[-3 6 8; 4 7 9; 10 -12 0]sum=0

28

Page 29: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

for i=1:3 for j=1:3 if sum>20 break end sum=sum+M(i,j) %za da poluchim weren resultat za elementa, sahraniawame indeksite %mu w drugi dwe promenliwi k i l k=i l=j endendend%kogato se izwegdat i i j, resultayt za B(i,j) i indkesite e newerendisp(' sum M(i,j) i j '); disp([sum M(i,j) i j]) disp(' sum M(k,l) k l '); disp([sum M(k,l) k l])

Пример 3%Da se wawede matricata M=[-3.5 6 8; 4 7 9; 10 -12 0]%Da se izchisli sumata ot otricatelnite elementi na matricata s izpolzwane%na operator continue

M=[-3.5 6 8; 4 7 9; 10 -12 0]sum=0for i=1:3 for j=1:3 if M(i,j)>0 continue else sum=sum+M(i,j) end endend

7. Оператор switch за избор на един от няколко възможни варианти

switch израз (или променлива), чиято стойност се сравнява със стойността на изразите след case case израз 1 оператор 1 ... оператор n case { израз 1, израз 2, израз n} оператор 1 ... оператор n…otherwiseоператор 1 ... оператор nend

29

Page 30: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Действие на оператор switch: Стойността на израза (променливата) след switch се сравнява със стойностите на изразите след case и ако е равна на някоя от техните стойности, се изпълнява оператора (операторите) след case. В противен случай се изпълняват операторите между otherwise и end.

%operator za razklonenie switchx=input('wawedete chislo rawno na 1, 0 ili -1 ')switch x case 1 disp('x=1') case -1 disp('x=-1 ') case 0 disp('x=0 ') otherwise disp('drugo chislo razlichno от 1, 0, -1')end

30

Page 31: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Графики1. Изчертаване автоматично на графика на функция с Toolbox Symbolic MathПример: Да се изчертае 1/x^2>> syms x>> ezplot(1/x^2)Резултат: в отделен прозорец Figure No 1 се появява графиката:

-5 0 5

0

0.5

1

1.5

2

2.5

3

x

1/x2

Графиката може да се съхрани във файл с File/Save as (команда от прозореца на графиката) под име с разширение .fig. Може да се копира в Clipboard с Edit/Copy Figure. Може да се форматира с Tools/Edit Plot, команди от меню Insert, Edit (форматирането се описва по-долу).

EZPLOT(f, [a,b]) чертае f = f(x) в интервала a < x < b, по подразбиране се чертае в интервала -2*pi < x < 2*pi и -2*pi < y < 2*piПараметрична графика:EZPLOT(f, [a,b]) plots f(x,y) = 0 over a < x < b and a < y < b.Пример:>> syms x,yy =y>> ezplot('x^2 - y^2 - 1')

31

Page 32: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

-6 -4 -2 0 2 4 6-6

-4

-2

0

2

4

6

x

y

x2 - y2 - 1 = 0

ezplot('x^3 + y^3 - 5*x*y + 1/5',[-3,3])

-3 -2 -1 0 1 2 3-3

-2

-1

0

1

2

3

x

y

x3 + y3 - 5 x y + 1/5 = 0

32

Page 33: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

ezplot('t*cos(t)','t*sin(t)',[0,4*pi])

-10 -5 0 5 10

-10

-8

-6

-4

-2

0

2

4

6

x

yx = t cos(t), y = t sin(t)

2. Двумерна графика – функции plot, polar, PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then the vector is plotted versus the rows or columns of the matrix, whichever line up. If X is a scalar and Y is a vector, length(Y) disconnected points are plotted. PLOT(Y) plots the columns of Y versus their index. If Y is complex, PLOT(Y) is equivalent to PLOT(real(Y),imag(Y)). In all other uses of PLOT, the imaginary part is ignored. Various line types, plot symbols and colors may be obtained with PLOT(X,Y,S) where S is a character string made from one element from any or all the following 3 columns: b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star y yellow s square k black d diamond v triangle (down)

33

Page 34: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram For example, PLOT(X,Y,'c+:') plots a cyan dotted line with a plus at each data point; PLOT(X,Y,'bd') plots blue diamond at each data point but does not draw any line. PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) combines the plots defined by the (X,Y,S) triples, where the X's and Y's are vectors or matrices and the S's are strings. For example, PLOT(X,Y,'y-',X,Y,'go') plots the data twice, with a solid yellow line interpolating green circles at the data points.

Примери:>> x=1:10x = 1 2 3 4 5 6 7 8 9 10>> y=[23 56 7 89 0 89 -2 -3 1 90]y = 23 56 7 89 0 89 -2 -3 1 90>> plot(x,y)Резултат:

0 2 4 6 8 10-10

0

10

20

30

40

50

60

70

80

90

Същият резултат в предишния пример се получава и при plot(y), понеже х се мени от 1 до 10, както Matlab подразбира стойностите по ос х.Пример за 2 графики на една фигура:

34

Page 35: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>> y1=[-1 2 3 -4 5 6 -7 8 9 0]y1 = -1 2 3 -4 5 6 -7 8 9 0>> plot(x,y,x,y1)

0 2 4 6 8 10-10

0

10

20

30

40

50

60

70

80

90

Пример за извеждане на функции от една и съща променлива:>> t=0:pi/20:2*pi;>> y=sin(t);>> z=t+6*sin(t);>> plot(t,y,t,z)

0 1 2 3 4 5 6 7-2

-1

0

1

2

3

4

5

6

7

8

Пример за две функции от 2 различни аргумента:u=[-8.9 -3.4 -1.1 0 1.2 2.3 4.5 6.7 8.9 10];>> v=u.^2v = Columns 1 through 7 79.2100 11.5600 1.2100 0 1.4400 5.2900 20.2500

35

Page 36: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Columns 8 through 10 44.8900 79.2100 100.0000>> z=2*t;>> plot(t,z,u,v)

Резултат:

-10 -5 0 5 100

10

20

30

40

50

60

70

80

90

100

Полярна графика:>> a=0:pi/30:2*pipolar(cos(a))

0.2

0.4

0.6

0.8

1

30

210

60

240

90

270

120

300

150

330

180 0

Други двумерни графики: loglog(x,y); semilogx(x,y), semilogy(x,y) – аналогични на plot, но с логаритмичен мащаб; bar(y), stairs(y); hist(y) – диаграми; fill(x,y,'цвят') – запълва с цвят двумерна фигура, като в апострофите се попълва буквата на цвета, зададена в Matlab

36

Page 37: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Тримерни графики с toolbar Symbolics Mathа) f=sin(y)*cos(z

syms y z>> f=sin(y)*cos(z)f =sin(y)*cos(z)>> ezmesh(f)

-5

0

5

-5

0

5-1

-0.5

0

0.5

1

y

sin(y) cos(z)

z

b) ezmesh(f,[-2.5,2.5],[-10,10])

-2-1

01

2

-10-5

05

10-1

-0.5

0

0.5

1

y

sin(y) cos(z)

z

Тримерна графика – функции plot3, meshPLOT3(x,y,z), where x, y and z are three vectors of the same length,

37

Page 38: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

plots a line in 3-space through the points whose coordinates are the elements of x, y and z. PLOT3(X,Y,Z), where X, Y and Z are three matrices of the same size, plots several lines obtained from the columns of X, Y and Z. Various line types, plot symbols and colors may be obtained with PLOT3(X,Y,Z,s) where s is a 1, 2 or 3 character string made from the characters listed under the PLOT command. PLOT3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3,...) combines the plots defined by the (x,y,z,s) fourtuples, where the x's, y's and z's are vectors or matrices and the s's are strings. Example: A helix: t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t);t = 0:pi/50:10*pi;plot3(sin(t),cos(t),t)grid onaxis squareРезултат:

-1

0

1

-1-0.5

00.5

10

10

20

30

40

Пример 2 – изчертаване на данни от матрицаy=[1 0 -1; 8 9 7; 3 4 5]y = 1 0 -1 8 9 7 3 4 5>> mesh(y)Резултат:

38

Page 39: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

11.5

22.5

3

11.5

22.5

3-2

0

2

4

6

8

10

Пример3: y=[1 0 -1; 8 9 7; 3 4 5]y = 1 0 -1 8 9 7 3 4 5>> contour(y)

1 1.5 2 2.5 31

1.2

1.4

1.6

1.8

2

2.2

2.4

2.6

2.8

3

39

Page 40: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

ФОРМАТИРАНЕ НА ГРАФИКИ

Мащабирането на графиките се извършва чрез натискане на бутона Zoom In (за уголемяване) или Zoom Out (за намаляване ) и след това кликване върху областта от фигурата, която искаме да мащабираме.

Вмъкване на заглавие на фигурата става с Insert/ Title, а на надписи по осите Х , Y и Z съответно с командите Insert/X Label, Insert/Y Label и Insert/ Z Label.

Редактиране на графики

1. Избира се Tools/Edit Plot (или бутона с бяла стрелка Edit Plot от лентата с икони) от прозореца на фигурата с графиката.

2. Щраква се двукратно върху фигурата и под нея се появява Property Editor – редактор на свойствата. Щракането върху ос или линия води до смяна на съдържанието на редактора, свързани с конкретния обект – ос, линия и т.н. Може да се смени цвят, тип и дебелина (Line width) на линия, на фона, етикети (надписи) и гранични стойности по осите.

С включването на Tools/Data Cursor и натискане върху линията се показват координатите на натиснатата точка. Премахване на показване на координатите е с командата Delete Current Datatip. Отмяна на показване на координатите е след премахване на отметката пред Tools/Data Cursor.

С включването на Tools/Brush и очертаване с левия бутон на мишката на правоъгълник върху графиката, се оцветява в червен цвят тази част от нея, която попада в оградената област. Отмяната на оцветяването става с командата Remove от контекстно меню върху оградената оцветена част.Командата Remove Unbrushed изтрива неоцветената линия и остава на екрана само оцветената част. Режимът на оцветяване се премахва с деактивиране на Tools/Brush.

Копирането на фигура в Clipboard става с командата Edit/Copy Figure. След това графиката може да се „постави” (Paste) в Word или друг документ.

40

Page 41: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Работа с матрици в Matlab. Решаване на системи линейни уравнения. Бързо преобразование на Фурие

1. Въвеждане на матрици.Матриците се въвеждат като всеки ред се разделя с точка и запетая или натискане на клавиш Enter, а същи и с вградени функции на Matlab. Примери:>> A=[1 2 3; 5 6 7; 8 9 10]A = 1 2 3 5 6 7 8 9 10

Начин, удобен за задаване на матрици с по-голяма размерност (разделяне с Enter за край на реда):>> B=[1 5 710 11 12-12 13 14]B = 1 5 7 10 11 12 -12 13 14

Елементи на матрицата могат да бъдат произволни функции или комплексни числа:>> Q=[sqrt(4+5^2); 9-8*i; exp(j*4); 3-10;]Q = 5.3852 9.0000 - 8.0000i -0.6536 - 0.7568i -7.0000

Много удобен начин е въвеждане на данните в array editor, особено за големи масиви. – използва се командата openvar име на матрицата. Предварително трябва да се зададе някаква стойност на името на матрицата, макар и единична стойност – напр.

>> H=[0]H = 0>> openvar Hслед това в редактора за масиви се задава размерността и се попълват елементите.

41

Page 42: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Размерността на въведената матрица може да се провери освен в Workspace и чрез командата size(име на матрицата) или length(име на матрицата), която връща по-голямата размерност на матрицата. Примери:>> size(Q)ans = 4 1>> size(A)ans =

3 3

>> length(Q)ans = 4>> length(A)ans = 3Функции за генериране на матрици- генериране на матрица с единични елементи – ones(брой редове на матрицата, брой редове на матрицата)Пример: >> M=ones(3,4)M = 1 1 1 1 1 1 1 1 1 1 1 1

- генериране на матрица с нулеви елементиzeros(брой редове на матрицата, брой стълбове на матрицата)

>>E=zeros(1,12)E =0 0 0 0 0 0 0 0 0 0 0 0

- генериране на матрица с произволни стойности на елементите от 0.0 до 1.0 –

rand(брой редове на матрицата, брой стълбове на матрицата)

>> B=rand(2,3)B = 0.9501 0.6068 0.8913 0.2311 0.4860 0.7621

- създаване на матрица с единични диагонални елементи- eye(брой редове на матрицата, брой стълбове на матрицата)

42

Page 43: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Ако матрицата е квадратна може да се въведе само 1 стойност за ред(стълб) като аргумент и резултат – единична матрица - вж. матрица D.

>> C=eye(2,3)C = 1 0 0 0 1 0

>> D=eye(3)D = 1 0 0 0 1 0 0 0 1

2. Индексиране на елементи – в малки скоби се заграждат номера на реда (стълба), а з многомерните масиви (матрици, индексите се разделят със запетаи – напр. C(2, 3); E(1). Така елементите на матриците участват в изрази, присвоявания, извеждане на стойност

Пример: >> C(2,3)ans = 0

>> E(1)ans = 0

>> E(1)=10*exp(j*pi/6)E = Columns 1 through 4 8.6603 + 5.0000i 0 0 0 Columns 5 through 8 0 0 0 0 Columns 9 through 12 0 0 0 0

Знак двуеточие връща последователни редове или стълбове, а когато се приложи върху цялата матрица, резултатът е вектор-стълб от всички елементи на изходната матрица.>> N=B(:)N = 0.9501 0.2311 0.6068 0.4860

43

Page 44: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

0.8913 0.7621Промяна на стойностите на матрица В чрез задаване на последователност от начална:крайна стойност за числата от 11-16 (стъпката е 1).>> BB = 0.9501 0.6068 0.8913 0.2311 0.4860 0.7621>> B(:)=11:16B = 11 13 15 12 14 16

Създаване на подматрица от съществуваща и добавяне (изключване) на елементи – най-лесно в array editor, но може да се използва двуеточие (:) или функциите за матрични манипулации (описани по-долу) и др.>> V=B(1:1,1:2)V = 11 133. Операции с матрици.Аритметичните оператори са +; -; *; /; \; ^;’ - транспониране; аритметични и логически функции.Решение на матрични уравнения (системи линейни уравнения)X*B=A -à РЕШЕНИЕ: X=A/BA*X=B -à РЕШЕНИЕ: X=A\BТук А и В са матрици, резултатът също.Решаване на системи уравнения

Пример:Да се реши системата уравнения:х1 + 2х2 + 3х3 = 42х1 + 3х2 +4х3 = 54х1 + 2х2 + 6х3 = 1а – матрица на коефициентите пред неизвестнитеb – матрица на свободните членове на системата от дясната част на систематах – матрица на решението на системата>> a=[1 2 3; 2 3 4; 4 2 6]a = 1 2 3 2 3 4 4 2 6>> b=[4; 5; 1]b = 4 5

44

Page 45: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

1>> x=a\bx = -1.5000 2.0000 0.5000

При умножение на матрици се спазва правилото: Аn,k*Bk,m =Сn,m– брой стълбове на първата= брой редове на втората матрица.За поелементни действия се записва точка преди операцията– напр. .*; ./ и др.Сравняване на стойности на масиви – с операторите за отношения - >; <; == и т. н.Функции за матрични манипулации:> DD = 1 2 3 -4 5 6 1 0 -1

завъртане на 90°>> rot90(D)ans = 3 6 -1 2 5 0 1 -4 1горна триъгълна матрица:>> triu(D)ans = 1 2 3 0 5 6 0 0 -1

долна триъгълна матрица>> tril(D)ans = 1 0 0 -4 5 0 1 0 -1

Хоризонтален (разменя стълбове) огледален образ на матрица>> DD = 1 2 3 -4 5 6 1 0 -1

45

Page 46: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>> fliplr(D)ans = 3 2 1 6 5 -4 -1 0 1

Вертикален (разменя редове) огледален образ на матрица>> flipud(D)ans = 1 0 -1 -4 5 6 1 2 3

Прилагане на елементарни матем. операции върху цяла квадратна матрица (а не поелементно) - funm(M,’функция’), където М е името на матрицата, а функцията може да е синус, логаритъм и др.:> x=funm(D,'log10')x = 0.2801 + 0.1190i 0.2527 - 0.0377i 0.3399 - 0.4255i -0.4663 + 0.4443i 0.7660 - 0.1409i 0.6015 - 1.5887i 0.0872 - 0.3877i 0.0131 + 0.1230i 0.1580 + 1.3863i

Горното действие е различно от:>> log10(D)Warning: Log of zero.> In F:\MATHLAB\toolbox\matlab\elfun\log10.m at line 17ans = 0 0.3010 0.4771 0.6021 + 1.3644i 0.6990 0.7782 0 -Inf 0 + 1.3644iДетерминанта:>> det(D)ans = -16

Ранг на аргумента:>> rank(D)ans = 3сума от елементите по главния диагонал – следа на матрицата>> trace(D)ans = 5

46

Page 47: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

максимална стойност за всеки стълб, ако матрицата е двумерна, ако е матрица-ред или матрица-стълб е 1 число. Функциите за минимум, средноаритметична стойност действат по същия начин.>> max(D)ans = 1 5 6

минимална стойност>> min(D)ans = -4 0 -1

средноаритметична стойност>> mean(D)ans = -0.6667 2.3333 2.6667

Сортиране по големина - за матрици работи по стълбове, както и функциите за сума и произведение::>> sort(D)ans = -4 0 -1 1 2 3 1 5 6

Сума от елементите (по стълбове)>> sum(D)ans = -2 7 8

Произведение на елементите (по стълбове)>> prod(D)ans = -4 0 -18

Обратна матрица>> inv(D)ans = 0.3125 -0.1250 0.1875 -0.1250 0.2500 1.1250 0.3125 -0.1250 -0.8125

Пример за работа с едномерен масив:>> g=[12 3 14 56 38 78 90]g = 12 3 14 56 38 78 90

47

Page 48: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>> sort(g)ans = 3 12 14 38 56 78 90>> min(g)ans = 35. Бързо преобразование на ФуриеFFT(X) is the discrete Fourier transform (DFT) of vector X. For matrices, the FFT operation is applied to each column. For N-D arrays, the FFT operation operates on the first non-singleton dimension. FFT(X,N) is the N-point FFT, padded with zeros if X has less than N points and truncated if it has more. FFT(X,[],DIM) or FFT(X,N,DIM) applies the FFT operation across the dimension DIM. For length N input vector x, the DFT is a length N vector X, with elements N X(k) = sum x(n)*exp(-j*2*pi*(k-1)*(n-1)/N), 1 <= k <= N. n=1 The inverse DFT (computed by IFFT) is given by N x(n) = (1/N) sum X(k)*exp( j*2*pi*(k-1)*(n-1)/N), 1 <= n <= N. k=1

Право преобразование на Фурие – вход-време, изход – спектър(честота).задаваме времето:>> t=0:1/99:1задаваме функцията на времето като сума от 2 синусоиди>> x=sin(2*pi*10*t)+0.5*sin(2*pi*30*t)

Изчертаваме графиката на получената функция х в зависимост от времето t>>plot(t,x)

48

Page 49: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Извикваме функцията за БПФ:>> y=fft(x)Изчисляваме амплитудата на спектъра:>> m=abs(y)Изчертаването на амплитудата трябва да стане като по ос х се разположат стойностите на честотата.Изчисляваме честотата:f=(0:length(y)-1)*99/length(y) Изчертаваме m::plot(f,m)Резултатът е показан на долната фигура, като са въведени заглавие и надписи по осите x и y.

49

Page 50: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

0 10 20 30 40 50 60 70 80 90 1000

5

10

15

20

25

30

35

40

45

50Magnitude of spectrum

f

Mag

nitu

de o

f spe

ctru

m m

Изчисляваме фазата:>> p=unwrap(angle(y))Изчертаваме я:>>plot(t,p)Резултат:

50

Page 51: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

ОБФ – вход – спектър(честота), изход – време - функция ifft>>x2=ifft(y)

Изчертаваме ОПФ на функцията y в зависимост от t>>plot(t,ifft(y))

Резултат: Графиките на х2 и х в зависимост от t са еднакви.

Втори пример:> x=[1 2 3 4]x = 1 2 3 4>> X=fft(x)X = 10.0000 -2.0000 + 2.0000i -2.0000 -2.0000 - 2.0000i>> x=ifft(X)x = 1 2 3 4Право и обратно двумерно ПБФ: - FFT2 Two-dimensional discrete Fourier Transform. FFT2(X) returns the two-dimensional Fourier transform of matrix X. If X is a vector, the result will have the same orientation. FFT2(X,MROWS,NCOLS) pads matrix X with zeros to size MROWS-by-NCOLS before transforming.

IFFT2 Two-dimensional inverse discrete Fourier transform. IFFT2(F) returns the two-dimensional inverse Fourier transform of matrix F. If F is a vector, the result will have the same orientation.

51

Page 52: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

IFFT2(F,MROWS,NCOLS) pads matrix F with zeros to size MROWS-by-NCOLS before transforming.

X1=[1+2*i 2+2*i; 3+3*i 4+4*i]X1 = 1.0000 + 2.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i

ППФ:>> Y=fft2(X1,2,2)Y = 10.0000 +11.0000i -2.0000 - 1.0000i -4.0000 - 3.0000i 0 + 1.0000i

ОПФ:>> Z=ifft2(Y)Z = 1.0000 + 2.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i

Аналогично е използването:>> Z=ifft2(Y,2,2)Z = 1.0000 + 2.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000iили>> Y=fft2(X1)Y = 10.0000 +11.0000i -2.0000 - 1.0000i -4.0000 - 3.0000i 0 + 1.0000iИзчертаването е с функцията surf.Нека е зададен сигнал:>> s3=[ 0 1.0654 0.6458 0.67 1.05 1.053 -0.08 -0.62 -0.71 -1.04 0.16 1.08 0.59 0.74 1.01 -0.24 -1.07 -0.57 -0.77 -0.99]s3 = Columns 1 through 6 0 1.0654 0.6458 0.6700 1.0500 1.0530 Columns 7 through 12 -0.0800 -0.6200 -0.7100 -1.0400 0.1600 1.0800 Columns 13 through 18 0.5900 0.7400 1.0100 -0.2400 -1.0700 -0.5700 Columns 19 through 20 -0.7700 -0.9900Изчертаваме го>> plot(s3)

52

Page 53: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Намираме спектъра и чертаем амплитудата:plot(abs(fft(s3)))

Намираме спектъра на 32 стойности и чертаем амплитудата:>> plot(abs(fft(s3,32)))

53

Page 54: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Обръщаме спектъра и чертаем във времевата област – вижда се, че автоматично попълва сигнала с нули преди да изчисли спектъра.>>plot(real(ifft(fft(s3,32),32)))

54

Page 55: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Екстремум на функция. Числено интегриране 1. Минимизация на функции

FMINBND – прилага се за минимизация на функции. Начини на използване:

X = FMINBND(FUN,x1,x2) намира локален минимум на Х на функцията FUN в интервала x1 <= X <= x2. FUN може да се зададе в m-файл като функция или като функция в inline обект.

X = FMINBND(FUN,x1,x2,OPTIONS) намира минимум с параметри, зададени в опцията OPTIONS, създадени с функцията OPTIMSET.

Примери: Да се намери минимумът на функцията x3-2.x-51. Изчертава се графиката на функцията за да се уточни интервала,

където функцията има минимум - може с ezplot, както е показано по-долу

>> syms x y>> y=x^3-2*x-5y =x^3-2*x-5>> ezplot(y)

-6 -4 -2 0 2 4 6

-250

-200

-150

-100

-50

0

50

100

150

200

250

x

x3-2 x-5

Вижда се, че минимумът на функцията може да се търси в [0, 2]. За по-лесно установяване на минимума трябва да се избере Tools/Data Cursor и да се кликне върху минимума на графиката (приблизително) за да се визуализират стойността на х, за която функцията има минимум и стойността на y, която представлява приблизителния минимум на функцията. По аналогичен начин се намира приблизителния максимум.

55

Page 56: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

2. Дефинира се функцията y по един от двата начина: във файл или като анонимна функция, използваща @. За версии на Матлаб преди 2013, функцията може да се дефинира и като inline обект.

3. Извикваме функцията FMINBND за търсене на минимум в интервала ( в случая [0, 2]) и намираме стойността на х, за която функцията има минимум – нека тази стойност е xmin

4. Намираме стойността на минимума ymin като извикаме функцията f с аргумент получената стойност за xmin, т.e. ymin=f(xmin)

I начин: чрез анонимна функция:>> y=@(x) x^3-2*x-5 y = @(x)x^3-2*x-5

>> xmin=fminbnd(y,0,2)xmin = 0.8165

>> ymin=y(xmin)ymin = -6.0887

II начин: Създаване на файл f.m със следното съдържаниеfunction y=f(x)y=x^3-2*x-5

След записването на файла, извикваме fminbnd.>> xmin=fminbnd('f',0,2)y = -6.0820y = -5.5836y = -5.8390y = -6.0865y = -6.0885y = -6.0887y = -6.0887y = -6.0887y = -6.0887

56

Page 57: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

y = -5y = -1xmin = 0.8165>> ymin=f(xmin)y = -6.0887ymin = -6.0887III начин за версии на Матлаб преди 2013– дефинира се функцията y

като inline обект по следния начин:>> y=inline(x^3-2*x-5)y = Inline function: y(x) = x.^3-2.*x-5

Извиква се FMINBND за търсене на минимум в интервала [0, 2]>> xmin= fminbnd (y,0,2)xmin = 0.8165Намираме стойността на минимума като извикаме функцията y с

аргумент получената стойност за xmin>> ymin=y(xmin)ymin = -6.0887>>

Ако имаме функция на 2 променливи, тя се дефинира така:>> f=@(x,y) y*sin(x)+x*cos(y)f = @(x,y)y*sin(x)+x*cos(y)

или за по-стара версия:>>f= inline('y*sin(x)+x*cos(y)','x','y') Inline function:f = f(x,y) = y*sin(x)+x*cos(y)

Получаване на стойност на такава функция – задават се стойности на x и y:

>> f(pi,2*pi)ans = 3.1416

57

Page 58: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Максимум на функция f може да се намери като:1. Функцията f се зададе обратна (със знак минус)2. Извиква се fminbnd за намиране на стойността на x, за която

функцията има максимум. Нека тази стойност е maxx.3. За да се получи максимумът (нека това да е променлива maxf),

трябва да се замести в f полученият аргумент maxx като: –f(maxх) или в реалната функция на мястото на х (това е израза за функцията без знак минус).

Пример: Да се намери максимума на функцията x^3-2*x-5 в интервала [-2,0]

>> ezplot('x^3-2*x-5')

>> f=@(x) -(x^3-2*x-5)f = @(x)-(x^3-2*x-5)

>> maxx=fminbnd(f,-2,0)maxx = -0.8165

>> maxf=-f(maxx)maxf = -3.9113

Максимумът на функцията е -3.9113.

2. Числено интегриране.2.1.Използване на Toolbar Symbolics Math (символно интегриране) –

функция intАко f е символен израз, тогава int(f) се опитва да намери друг символен израз F, така че производната diff(F) = f. Ако се налага интегриране по друга променлива напр. v, а не х, тогава се използва int(f,v). Определен интеграл се пресмята като след функцията f (или след името на променливата на интегриране, ако тя е различна от х) се зададат стойностите на границите на интегриране –напр. int(f,a,b), където а и b са съответно долната и горната граници на интегриране .Примери: Да се намери интеграл от sin(x) в границите 0-2*pi; 0-pi;/2 0-pi>> syms x>> int(sin(x),0,2*pi)ans =

58

Page 59: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

0>> int(sin(x),0,pi/2)ans =1>> int(sin(x),0,pi)ans =2

Пример за интегриране на в граници от 0 до 1.

>> f=1/sqrt(x)f =1/x^(1/2)>> int(f,0,1)ans =22.2.Използване на квадратурни формули

Ако не можем да изчислим интеграла символно или се налага да използваме двоен или троен интеграл, тогава използваме формули за числено интегриране, които се наричат квадратурни формули. Общата идея

е приближената стойност да се пресметне като сума от

стойности на подинтегралната функция f(хк), пресметнати в някакви точки хк, наречени възли и умножени с коефициенти Ак , наречени тегла (или тегловни коефициенти). Възлите и тегловните коефициенти не зависят от функцията. Според начина на избор на възлите и тегловните коефициенти се получават различни типове квадратурни формули.

Пример: да се интегрира функцията в граници от 0 до 2.

I начин: В по-новите версии на Матлаб - с функция integral:>> fun=@(x) 1./(x.^3-2.*x-5)fun = @(x)1./(x.^3-2.*x-5)>> integral(fun,0,2)ans = -0.4605

Обърнете внимание на точките преди умножение, деление и степенуване при въвеждане на функцията!

II начин: В по-старите версии на Матлаб - с функция quad:Ако функцията се зададе като inline обект:>> F = inline('1./(x.^3-2.*x-5)');Интегрирането се извършва по следния начин:>> Q = quad(F,0,2)Q =

59

Page 60: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

-0.4605

Използваните квадратурни формули в Matlab са: quad – използва адаптивна квадратура на Симпсон; quad1 (накрая има буква l, a не числото 1)– използва адаптивна квадратура на Gauss/Lobatto; dblquad – числено решаване на двоен интеграл; triplequad – числено решаване на троен интеграл. В изложението по-долу са дадени синтаксиса и примери на използване на функциите за интегриране, които се използват най-често. Повече подробности по приложението на функциите за числено интегриране може да се прочетат в помощната програма на Matlab.Най-често използване на quad: I начин: q = quad(fun,a,b) където fun е подинтегралната функция, която може да се зададе като inline-функция или да се запише в m-файл; а и b са стойностите на долната и горната граница съответно. Грешката на изчисление е 10-6. q – резултат от интегрирането.II начин: q = quad(fun,a,b,tol)tol – задаване на точност, ако потребителят е неудовлетворен от точността по подразбиране10-6

Функцията quad1 може да се използва за изчисление с по-голяма точност и за гладки функции.

Използване на функцията quad като се задава стойност на грешката 0.001 при пресмятане: Вижда се, че полученият резултат се отличава от предходния – това се дължи на въведената по-малка точност на пресмятане.>> Q = quad(F,0,2,1e-3)Q = -0.4628> Q = quad(F,0,2,1e-3,1) 9 0.0000000000 5.43160000e-001 -0.0989460227 11 0.5431600000 9.13680000e-001 -0.1584111746 13 1.4568400000 5.43160000e-001 -0.2054245169Q = -0.4628

Бележки по въвеждане на inline – функцията:Ако преди командата inline, променливата х е зададена символно чрез:>>syms xтогава F може да се дефинира без апострофи и точки пред умножение, деление и степенуване, тоест:>>F=inline(1/(x^3-2*x-5)Matlab автоматично преобразува функцията с точки пред умножение, деление и степенуване.След това се въвежда функцията за интегрирането quad. Например

60

Page 61: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>> Q = quad(F,0,2)Ако обаче променливата х не е символна, трябва F да се въведе с апострофи и точки пред умножение, деление и степенуване. Тогава F ще има вида:>>F=inline(1./(x.^3-2.*x-5)

Ако функцията се зададе във файл f1.m със следното съдържание:function y=f1(x)y=1./(x.^3-2.*x-5)

Да се обърне внимание на операциите – те са поелементни – има точка пред знака за деление, степенуване и умножение!Тогава интегрирането може да се извърши по един от следните 2 начина:Q = quad(@f1,0,2) или Q = quad('f1',0,2). И в двата случая резултатът е:y = -0.2000 -0.1811 -0.1687 -0.1667 -0.2074 -0.3036 -1.0000y = -0.1898 -0.1740y = -0.1644 -0.1785y = -0.1658 -0.1646y = -0.1711 -0.1899y = -0.1686 -0.1743y = -0.1836 -0.1977y = -0.2412 -0.4445y = -0.2220 -0.2672y = -0.2142 -0.2309y = -0.2532 -0.2838y = -0.3576 -0.6055y = -0.3278 -0.3954y = -0.5109 -0.7504y = -0.4750 -0.5537y =

61

Page 62: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

-0.6694 -0.8562y = -0.6357 -0.7074y = -0.7995 -0.9221Q = -0.4605Използването на quad1 е по аналогичен на описания по-горе начин за функцията quad. Същият пример с използването на функция quad1:>> F = inline('1./(x.^3-2*x-5)')>> Q = quadl(F,0,2)Q = -0.4605

Намиране на двоен интеграл Първи начин:>> f=@(x,y) (y.*sin(x)+x.*cos(y))f = @(x,y)(y.*sin(x)+x.*cos(y))>> integral2(f,pi,2*pi,0,pi)ans = -9.8696

Втори начин:Най-често използване на dblquad: I начин: q = dblquad(fun,xmin,xmax,ymin,ymax)II начин: q = dblquad(fun,xmin,xmax,ymin,ymax,tol)където fun(x,y) е подинтегрална функция на 2 променливи в правоъгълната област xmin <= x <= xmax, ymin <= y <= ymax и се задава по начина, описан по-горе за функцията quad. fun(x,y)трябва да приеме вектор х и скалар y и връща вектор от стойности за подинтегралния израз. Грешката на пресмятане (толерансът) tol по подразбиране е 10-6.

Пример: Да се пресметне интегралът

I начин: Задаване на fun(x,y) като inline-функция:>> F=inline('y*sin(x)+x*cos(y)')F = Inline function: F(x,y) = y*sin(x)+x*cos(y)Стартиране на dblquad>> Q = dblquad(F, pi, 2*pi, 0, pi)Q = -9.8696

II начин: Задаване на fun(x,y) като функция в m-файл с име integr.mfunction z = integr(x, y)

62

Page 63: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

z = y*sin(x)+x*cos(y);Стартиране на dblquad>> Q = dblquad(@integr, pi, 2*pi, 0, pi)Q = -9.8696

Намиране на троен интеграл Първи начин:>> f=@(x,y,z) y.*sin(x)+z.*cos(x)f = @(x,y,z)y.*sin(x)+z.*cos(x)>> integral3(f,0,pi,0,1,-1,1)ans = 2.0000

Втори начин - използване на triplequad:I начин: triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax)II начин: triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)

>> Q = triplequad(inline('y*sin(x)+z*cos(x)'),0,pi,0,1,-1,1)Q = 2.0000

63

Page 64: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Решаване на диференциални уравненияПърви начин: Символно решаване:The function dsolve computes symbolic solutions to ordinary differential equations. The equations are specified by symbolic expressions containing the letter D to denote differentiation. The symbols D2, D3, ... DN, correspond to the second, third, ..., Nth derivative, respectively. Thus, D2y is the Symbolic Math

Toolbox equivalent of . The dependent variables are those preceded by D

and the default independent variable is t. Note that names of symbolic variables should not contain D. The independent variable can be changed from t to some other symbolic variable by including that variable as the last input argument. Initial conditions can be specified by additional equations. If initial conditions are not specified, the solutions contain constants of integration, C1, C2, etc.

Пример1: Да се реши уравнението y’(t)=1+y(t)2:Първи начин в по-новите версии:>>syms y(t)>>Dy=diff(y)>> dsolve(Dy==1+y(t)^2)ans = tan(C3 + t) i -i

Или:>> dsolve(Dy==1+y^2)ans = tan(C3 + t) i -i

Проверка на решението: диференцираме резултата за y(t) и получаваме дясната част на уравнението:>> diff(ans)ans = tan(C3 + t)^2 + 1 0 0

Втори начин:>>syms y t>> dsolve('Dy=1+y^2')ans =tan(t+C1)

64

Page 65: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Тук с D се бележи производната, а С1 е константа на интегрирането

Проверка на решението: диференцираме резултата за y(t) и получаваме дясната част на уравнението. Заместваме С1 с 0, понеже е константа.>> syms t>> C1=0C1 = 0>> diff(tan(t+C1))ans =1+tan(t)^2 ßравно е на дясната част на уравнението Пример 2: Да се реши горното уравнение със задаване на начално условие y(0)=1Първи начин:>>dsolve(Dy==1+y(t)^2,y(0)==1)ans =tan(pi/4 + t)

или>> dsolve(diff(y)==1+y^2,y(0)==1)ans =tan(pi/4 + t)

Втори начин:>>syms y t>> y = dsolve('Dy=1+y^2','y(0)=1')y =tan(t+1/4*pi)

Трябва началното условие да се загради с апострофи и да се включи като следващ аргумент на функцията след уравнението.

Проверка на решението: 1. Диференцираме резултата за y(t) и получаваме дясната част на

уравнението.2. Проверяваме началното условие

>> diff(y)ans =

1+tan(t+1/4*pi)^2 ßравно е на дясната част на уравнението

>> tan(0+1/4*pi)ans = 1.0000 ß Вярно е началното условие

65

Page 66: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Пример 3: Да се реши уравнението х’(t)2+x(t)2=1 с начално условие x(0)=0. Първи начин (Matlab2013b):>> syms x(t)>> z=dsolve(diff(x)^2+x^2==1,x(0)==0)z = cosh((pi*i)/2 + t*i) cosh((pi*i)/2 - t*i)

Проверка на началното условие:>> z2=inline(z)z2 = Inline function: z2(t) = [cosh(pi.*5.0e-1i+t.*1i);cosh(pi.*5.0e-1i-t.*1i)]>> z2(0)ans = 1.0e-16 * 0.6123 0.6123

Явно, че z2(0)~=0, т.е. решението удовлятворява началното условие.

Втори начин:Уравнението има 2 корена, ако се реши на по-ниската версия – Matlab6.5:dsolve('(Dx)^2+x^2=1','x(0)=0')ans =[ sin(t)][ -sin(t)]За да се съхранят в масив х, се задава x = dsolve('(Dx)^2+x^2=1','x(0)=0')

Проверка на решението: 1. Заместваме резултата за x(t) в лявата страна и получаваме

дясната част на уравнението.2. Проверяваме началното условие

>> (diff(sin(t)))^2+sin(t)^2ans =cos(t)^2+sin(t)^2>> simplify(cos(t)^2+sin(t)^2)ans =1Получихме дясната част на уравнението, аналогична е и проверката за -sin(t), понеже се повдига в квадрат. Ясно е, че sin(0)=0, т.е. вярно е началното условие.За Матлаб 9 решението е:

66

Page 67: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

z=dsolve('(Dx)^2+x^2=1','x(0)=0')z = (4*tan(t/4)*(tan(t/4)^2 - 1))/(tan(t/4)^2 + 1)^2 -(4*tan(t/4)*(tan(t/4)^2 - 1))/(tan(t/4)^2 + 1)^2 (4*tan(pi/4 + t/4)*(tan(pi/4 + t/4)^2 - 1))/(tan(pi/4 + t/4)^2 + 1)^2 (4*tan(pi/4 - t/4)*(tan(pi/4 - t/4)^2 - 1))/(tan(pi/4 - t/4)^2 + 1)^2 (4*tan(t/4 - pi/4)*(tan(t/4 - pi/4)^2 - 1))/(tan(t/4 - pi/4)^2 + 1)^2 (4*tan(- pi/4 - t/4)*(tan(- pi/4 - t/4)^2 - 1))/(tan(- pi/4 - t/4)^2 + 1)^2Проверяваме началното условие:z2=inline(z)z2 = Inline function: z2(t) = [(4.*tan(t./4).*(tan(t./4).^2-1))./(tan(t./4).^2+1).^2;-(4.*tan(t./4).*(tan(t./4).^2-1))./(tan(t./4).^2+1).^2;(4.*tan(pi./4+t./4).*(tan(pi./4+t./4).^2-1))./(tan(pi./4+t./4).^2+1).^2;(4.*tan(pi./4-t./4).*(tan(pi./4-t./4).^2-1))./(tan(pi./4-t./4).^2+1).^2;(4.*tan(t./4-pi./4).*(tan(t./4-pi./4).^2-1))./(tan(t./4-pi./4).^2+1).^2;(4.*tan(-pi./4-t./4).*(tan(-pi./4-t./4).^2-1))./(tan(-pi./4-t./4).^2+1).^2]>> z2(0)ans = 1.0e-015 * 0 0 -0.2220 -0.2220 0.2220 0.2220

От отговора за z2(0) се вижда, че началното условие е изпълнено.За по-високата версия - Матлаб 11:>> z=dsolve('(Dx)^2+x^2=1','x(0)=0') z = cosh((pi*i)/2 + t*i) cosh(- (pi*i)/2 + t*i) cosh((pi*i)/2 - t*i) cosh(- (pi*i)/2 - t*i

z1=inline(z)

z1 =

Inline function: z1(t) = [cosh(pi.*5.0e-1i+t.*1i);cosh(pi.*-5.0e-1i+t.*1i);cosh(pi.*5.0e-1i-t.*1i);cosh(pi.*-5.0e-1i-t.*1i)]

67

Page 68: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>> z1(0)

ans =

1.0e-016 *

0.6123 0.6123 0.6123 0.6123

Отново решението е вярно.

Пример 4: Да се реши уравнението y’’(x)=cos(2x)-y(x) с начални условия y(0)=1 и y’(0)=0.

Първи начин (Matlab2013b):>> syms y(x)>> Dy=diff(y)Dy(x) =D(y)(x)

>> D2y=diff(y,2)D2y(x) =D(D(y))(x)

>> dsolve(D2y==cos(2*x)-y(x),y(0)==1,Dy(0)==0)ans =(5*cos(x))/3 + sin(x)*(sin(3*x)/6 + sin(x)/2) - (2*cos(x)*(6*tan(x/2)^2 - 3*tan(x/2)^4 + 1))/(3*(tan(x/2)^2 + 1)^3)

Опростяваме решението:>> simplify(ans)ans =1 - (8*sin(x/2)^4)/3

Ясно е, че за х=0, и 8*sin(x/2)=0, т.е. ans=1, следователно y(0)=1 и началното условие е изпълнено.Да проверим дали Dy(0)=0. Диференцираме:>> z=diff(ans)z =-(16*cos(x/2)*sin(x/2)^3)/3Вижда се, че z=0 за х=0. Следователно е изпълнено и второто начално условие Dy(0)=0.

Втори начин:

68

Page 69: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>> y = dsolve('D2y=cos(2*x)-y','y(0)=1','Dy(0)=0', 'x')y =(1/2*sin(x)+1/6*sin(3*x))*sin(x)+(1/6*cos(3*x)-1/2*cos(x))*cos(x)+4/3*cos(x)

Горният отговор е получен за Матлаб 6.5. На Матлаб 9 се получава:(4*cos(x))/3 + cos(x)*(cos(3*x)/6 - cos(x)/2) + sin(x)*(sin(3*x)/6 + sin(x)/2)

Сравнявайки двата отговора, се вижда, че те са еднакви, но са разместени изразите в тях и записването им е различно – напр. 4/3*cos(x) и (4*cos(x))/3

За Matlab 11:(5*cos(x))/3 + sin(x)*(sin(3*x)/6 + sin(x)/2) - (2*cos(x)*(- 3*tan(x/2)^4 + 6*tan(x/2)^2 + 1))/(3*(tan(x/2)^2 + 1)^3)

Тъй като получения израз в y е много голям, той може да се опрости с функцията simplify от Symbolics Math Toolbox по следния начин:За Матлаб 6.5:>> simplify (y)ans =-2/3*cos(x)^2+4/3*cos(x)+1/3

Опростяването на резултата и за трите програмни системи е с еднакъв отговор, като различията са отново в мястото и записването на изразите. За Matlab 9 след simplify се получава:(4*cos(x))/3 - (2*cos(x)^2)/3 + 1/3

За Matlab 11:>>simplify(y) ans =1 - (8*(cos(x)/2 - 1/2)^2)/3

Отговорът е еднакъв с предните версии, защото ако приложим функцията expand се получава същият отговор както в Матлаб 6.5 и Матлаб 9.>>expand(ans) ans = - (2*cos(x)^2)/3 + (4*cos(x))/3 + 1/3

Проверка на решението: 1. Заместваме резултата за y(x) в лявата страна и получаваме дясната

част на уравнението.2. Проверяваме началните условия.

69

Page 70: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Проверка в уравнението:>> syms xСлед заместване на y в дясната страна на уравнението, тя придобива вида:>> cos(2*x)-(-2/3*cos(x)^2+4/3*cos(x)+1/3)ans =cos(2*x)+2/3*cos(x)^2-4/3*cos(x)-1/3

Опростяваме:>> simplify(ans)ans =8/3*cos(x)^2-4/3-4/3*cos(x)

Лявата страна има вида:>> diff(-2/3*cos(x)^2+4/3*cos(x)+1/3,2)ans =-4/3*sin(x)^2+4/3*cos(x)^2-4/3*cos(x)Опростяваме:>> simplify(ans)ans =8/3*cos(x)^2-4/3-4/3*cos(x)

Вижда се, че крайните резултати за лява и дясна част са еднакви, т.е. решението е вярно

Проверка на първото начално условие:Създаваме inline функция и заместваме стойността за х в нея

>> f=inline('-2/3*cos(x)^2+4/3*cos(x)+1/3')f = Inline function: f(x) = -2/3*cos(x)^2+4/3*cos(x)+1/3>> f(0)ans = 1

Проверка на второто начално условие: Първо диференцираме, създаваме inline функция и заместваме стойността за х в нея

>> f2=diff(-2/3*cos(x)^2+4/3*cos(x)+1/3)f2 =4/3*cos(x)*sin(x)-4/3*sin(x)

>> f3=inline('4/3*cos(x)*sin(x)-4/3*sin(x)')f3 =

70

Page 71: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Inline function: f3(x) = 4/3*cos(x)*sin(x)-4/3*sin(x)>> f3(0)ans = 0

Решение на уравнението х’=-3х, начално условие х(0)=1 – стр. 58

>> syms x>> dsolve('Dx=-3*x','x(0)=1')ans =exp(-3*t)

Изчертаване на графиката:>> t=0:0.1:4>>d=exp(-3*t)>>plot(t,d)>> xlabel('t')>> ylabel('x(t)')>> title('Symbolic Solution of the equation dx/dt=-3x(t)')

71

Page 72: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Втори начин на решаване - числено– с използване на функциите odeXX

[T,Y] = solver(odefun,tspan,y0)[T,Y] = solver(odefun,tspan,y0,options)where solver is one of ode45, ode23, ode113, ode15s, ode23s, ode23t, or ode23tb. Arguments

- odefun - A function that evaluates the right-hand side of the differential equations. All solvers solve systems of equations in the form or problems that involve a mass matrix, . The ode23s solver can solve only equations with constant mass matrices. ode15s and ode23t can solve problems with a mass matrix that is singular, i.e., differential-algebraic equations (DAEs).

- tspan - A vector specifying the interval of integration, [t0,tf]. To obtain solutions at specific times (all increasing or all decreasing), use tspan = [t0,t1,...,tf].

- y0- A vector of initial conditions.- options - Optional integration argument created using the odeset function.

See odeset for details.- p1,p2...Optional parameters that the solver passes to odefun and all the

functions specified in options..

Решение на същото уравнение с помощта на ode45:1. Записваме уравнението като функция във файл oneurawn.m в m-редактора:

72

Page 73: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

function damp=oneurawn(t,x)damp=-3*x

2. Извикваме odе45:

>>[t,х]=ode45(@oneurawn,[0 4],1)

3. Резултатите се получават в workspace в променливата t – стойности на времето t и в променливата x - стойност на функцията x(t)..Изчертаваме графиката на x(t).

>> plot(t,x)Допълнително могат да се поставят етикети по осите х и y и заглавие на графиката с командите:

>>xlabel('t')>> ylabel('x(t)')>> title('Solution of the equation dx/dt=-3x(t)')

Графиката изглежда така:

Решаване на ОДУ с числени методи:

73

Page 74: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Функциите за решаване на ОДУ (т. нар. solvers) изчисляват само уравнения от първи ред. Такива функции са ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb, bvp4c. Но често се налага решаване на ОДУ с производни от по-висок ред от първата производна.. За да се използват тези функции трябва предварително уравненията от по-висок ред да се представят като система от диференциални уравнения от първи ред.по следния начин:

, като

В механиката производните спрямо t се бележат с точка над името на функцията, т.е. вместо y’. За да се уеднакви написаното по-долу с използваните символи в HELР-а на Matlab и други учебници по математика, навсякъде в изложението ще бъде използвано означението y’. Освен това параметърът t не е задължително да означава време, макар че най-често решението на ОДУ се търси във времевата област.Известна е формата на Коши:

където t=[t0, tf ], a t0 и tf са съответно начална и крайна точка на интервала за t. На езика на Matlab се представят като вектор [t0 tf].

ОДУ от n-ти ред може да се представи като:

Същото уравнениe се представя като система от ОДУ от първи ред като се извършат следните полагания::

В резултат се получава следната система от n уравнения:

Пример 1. Разглежда се damp system от вида:mx’’(t)+cx’(t)+kx(t)=0 x(0)=x0 x’(0)=x’0

Това уравнение се свежда до следната система ОДУ от I ред:х1'(t)=x2(t)x’2(t)=-c/m*x2(t)-k/m*x1(t)

74

Page 75: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Второто уравнение от системата се получава като първо се преобразува уравнението mx’’(t)+cx’(t)+kx(t)=0 по начина:mx’’(t)=- cx’(t)-kx(t)и след това се раздели на m от двете страни на равенството:x’’(t)= -c/m*x’(t)-k/m*x(t)Замества се x’’(t) с x’2(t), след това x’(t) с x2(t) и x(t) с x1(t) и се получава ;x’2(t)=-c/m*x2(t)-k/m*x1(t)

Задача. Да се симулира с оde45 отговорът на 3*х’’+х’+2*х=0 при начални условия х(0)=0 и х’(0)=0.25 в интервала от време 0£t£20

Уравнението е записано със функцията sdot.m. Извикването на ode45, изчертаването и надписите по фигурата са във файла sdotf.m.

файл sdot.m:function xdot=sdot(t,x)xdot=zeros(2,1)xdot(1)=x(2)xdot(2)=-(2/3)*x(1)-(1/3)*x(2)

75

Page 76: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

файл sdotf.m:[t,x]=ode45(@sdot,[0 20],[0 0.25])plot(t,x(:,1),'-',t,x(:,2),'--')title('Plot of displacement x(t) of the single-degree-of-freedom system')xlabel('time t');ylabel('Displacement x(t) and velocity dx(t)/dt');legend('x(t)','dx(t)/dt')

Същата задача, решена символно:>>syms x(t)>>Dx=diff(x)>>D2x=diff(x,2)>>dsolve(3*D2x+Dx+2*x==0,x(0)==0,Dx(0)==0.25)

ans =(3*23^(1/2)*exp(-t/6)*sin((23^(1/2)*t)/6))/46

>> ezplot(ans,[0 20])

0 2 4 6 8 10 12 14 16 18 20

-0.1

-0.05

0

0.05

0.1

0.15

0.2

0.25

t

(3 231/2 exp(-t/6) sin((231/2 t)/6))/46

Скоростта се получава като диференцираме х:>> v=diff(ans)v =(exp(-t/6)*cos((23^(1/2)*t)/6))/4 - (23^(1/2)*exp(-t/6)*sin((23^(1/2)*t)/6))/92

76

Page 77: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>> ezplot(v,[0 20])

0 2 4 6 8 10 12 14 16 18 20-0.15

-0.1

-0.05

0

0.05

0.1

0.15

0.2

t

(exp(-t/6) cos((231/2 t)/6))/4 - (231/2 exp(-t/6) sin((231/2 t)/6))/92

77

Page 78: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Моделиране на резонанси. Моделиране на движение на точка. Моделиране на принудени трептения на система с една степен на свобода

1. Амплитудно-честотна характеристика на принудени трептения на система с една степен на свобода без съпротивление

syms zezplot(1/(abs(1-z^2)),0,6)

Коеф. на динамичност (l) е отношението на амплитудата на принудените трептения към статичната амплитуда (амплитудата на системата, която се получава от статичното действие на силата). z е коефициент на разстройване. При z=1 имаме случая на резонанс- там коеф. на динамичност клони към безкрайност. При z=0 имаме в същност статично действие на силата и Коеф. на динамичност=1. При z=sqrt(2), l=1, a при z>sqrt(2), l<1, т.е. амплитудата на принудените трептения е по-малка от статичната амплитуда на силата – т.е. динамичния ефект е по-слаб от съответния статичен ефект.

2. Моделиране на движение на точка.

78

Page 79: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Задача.: Да се реши със Simulink уравнението х’(t)=-3х(t), с начално условие х(0)=1. Уравнението описва закон на неравномерно движение на точка .

За да се реши уравнението трябва да интегрираме и да умножим по -3Схемата на Simulink е показана на фиг. 2:

Фиг.2. Схема на симулация на движение на точка

Началното условие се задава след двукратно натискане върху блока Integrator и задаване на числото 1 в Initial condition - фиг. 3

79

Page 80: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 3

Резултат след стартиране на симулацията, двукратно щракане върху осцилоскопа и команда от десния бутон върху него Autoscale – фиг.4

фиг.4

80

Page 81: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Вижда се, че при t=0, x(0)=1.

4. Моделиране на принудени трептения на система с една степен на свобода

Задача. Да се симулира с Simulink отговорът на 3*х’’+х’+2*х=0 при начални условия х(0)=0 и х’(0)=0.25 в интервала от време 0£t£20

т.е. моделира се решението x’’(t)=- 1/3*x’(t)-2/3*x(t

Задават се начални условия (след двукратно щракане върху блока integrator) за първия интегратор 0.25, а за втория – 0. Задава се в Simulation/Simulation parameter/Stop time 20. Стартира се симулацията. Резултатът е показан на осцилоскопа:

81

Page 82: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Жълтата графика е за скоростта, а лилавата – за преместването. Това се вижда и от началните стойности.

Задача. Да се симулира решението на: mx’’(t)+cx’(t)+kx(t)=f(t) x(0)=x0 x’(0)=x’0т.е. моделира се решението x’’(t)= -c/m*x’(t)-k/m*x(t)+ f(t))

82

Page 83: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Градиент и дивергенция

Градиент във векторния анализ е векторен оператор, действащ върху скаларно поле. Градиентът на скаларно поле е векторно поле, наречено градиентно поле, което показва степента и направлението на промяна на скаларното поле. Градиентът се означава с grad или просто като оператор набла и се дефинира като:

където е скаларна, непрекъсната и диференцируема функция и са единични вектори. Както се вижда резултатът от операцията градиент е вектор или множество от вектори или векторна функция в зависимост от областта в която е дефинирана . Градиентът се прилага само върху скаларни величини и представлява мярка за максималната промяна на величината и има посока на най-стръмното покачване на величината в дадена точка.

Дивергенцията е понятие от векторния анализ и представлява скалар, който характеризира истока или стока на векторното поле. Дивергенцията се записва като div и се прилага само върху векторни функции:

където Fx,Fy,Fz са x,y,z компонентите на векторната функция. Както се вижда резултатът от операция дивергенция е скаларна функция.

83

Page 84: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

SIMULINKРазделът SIMULINK е написан с участието на студента Панайот Панайотов –

специалност КММ, II курсИзображенията на фигурите в по-голямата част от описанието са за версия 6.5. на Matlab, но разликата в интерфейса с новите версии е

малка. Предстои обновяване на фигурите и част от текста.

SIMULINK е графична среда за моделиране, симулиране и анализ на динамични системи, които се описват като набор от линейни, нелинейни, диференциални и/или диференчни уравнения. Системите се изграждат чрез графичен потребителски интерфейс. Разширението на създадените файлове (модели) е .mdl.

1. Стартиране на функцията.Стартирането на SIMULINK става чрез кликване върху съответната

икона в toolbar-а на Matlab:

Фиг. 1. Стартиране на Simulink. Първи начин – с иконата в toolbar-а

Или чрез New/Model :

Същото е възможно и чрез въвеждане на текст simulink в Command window:

84

Фиг. 2. Стартиране на SimulinkВтори начин – от Home-таба/

New/Simulink Model

Page 85: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

>>simulinkОтваря се прозорец Simulink Library Browser, в който са поместени

блокове с различни функции. Близките по предназначение блокове са групирани в подбиблиотеки. Изграждането на модел става с влачене на блокове от библиотеките до работния прозорец, или чрез кликане с десен клавиш на мишката върху съответния блок и натискане на Add to а new model.

Фиг. 3. Общ изглед на библиотека и блокове в нея

Фиг. 4. Поместване на блок в работния прозорец – използване на команда Add to а new model, не е необходимо влачене за да се постави блока в прозореца

Търсенето на блокове става чрез преглед на библиотеките на Simulink или чрез вписване на съответното име на блока в реда Enter a part of a block name (at least 2 characters) и натискане на клавиша Enter или иконата на бинокъла, при посочването на която се показва текст Search for subsystems and bloks by name (at least 2 characters).

85

Page 86: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 5. Бързо търсене на блок по име

Следващото описание е с фигури в средата на Matlab 6.5.

Връзки между блокове се осъществяват по два начина – като се свързват с линии между входовете с помощта на изчертаване с мишката или чрез :

1. Маркира се входния блок.2. Задържа се клавиша Ctrl.3. Натиска се върху изходния блок с левия бутон на мишката.

Фиг. 6. Изграждане на връзка между блокове – чрез изчертаване на маршрута вход-изход

86

Page 87: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

2. Стартиране на симулация2.1. Параметри на симулацията – настройката им може да се осъществи в от менюто Simulation Parameters:unitled. До него стигаме по пътя Simalation/Simulation parameters. От опцията Solver, може да се зададе времето за действие на симулацията(начало, продължителност, край)

Фиг. 7. Отваряне на меню Simulation Фиг. 8. Прозорецът Simulation за настройки-избира се командата Parameters – от тук се настройватSimulation parameters. начално и крайно време на

симулацията.

2.2. Стартиране – от бутона Start simulation или от Simulation/Start :

Фиг. 9. Стартиране на симулация Фиг. 10. Стартиране на симулацияПърви начин – с натискане на Втори начин от менютобутона Start Simulation от toolbar-a Simulation/Start

2.3.Извеждане на резултатЗа да се получи графичен резултат, се кликва два пъти върху

крайния блок – Scope. Независимо дали се визуализира графика или не, върху черния екран на Scope се натиска Autoscale, за по добра видимост. Има лупи за мащабиране в лентата с бутони над изображението.

87

Page 88: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 11.

Визуализиране на резултат

Двоен клик върху Scope

Така изглежда визуализацията:

88

Page 89: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 12. Визуализиран резултат

Фиг.13. Autoscale и инструменти -

използват се за по добър изглед на графиката

3. Редактиране на модел3.1. Селектиране(маркиране) на обектиЗа да се редактира модел е небходимо първо да се маркира обект от модела – например блока Pulse Generator, чрез кликване върху него. За маркиране на повече обекти едновременно може да ги маркираме един по

89

Page 90: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

един с кликване на мишката и задържан клавиш Shift, или да ги обградим с правоъгълник или да ги обградим с левия бутон на мишката.

Фиг. 15. Маркиране на обект с клик върху него

Фиг.16. Маркиране на обекти със

заграждане с мишката

90

Page 91: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 17. Вече маркирани обекти чреззаграждане или последователномаркиране с мишката и задържанклавиш Shift

3.2. Копиране и преместване на блокове в работния прозорецПреместването на блокове става с маркиране и влачене, при това,

ако има изградена връзка с други блокове, тя не се прекъсва, а се позиционира към новото положение на обекта. SIMULINK използва невидима пет-пикселова решетка за улеснено подравняване на обектите в прозореца на модела. Копиране на самостоятелен елемент или няколко наведнъж може да стане с влаченето им с левия бутон на мишката и задържан клавиш Ctrl, или чрез влаченето им със задържан десен бутон на мишката.

Фиг.18. Преместване на елемент чрез влачене – така се движат

блокове в работния прозорец

91

Page 92: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 19. Копиране на няколко елемента наведнъж чрез влачене със задържан десен бутон на мишката – първо са маркирани небходимите елементи, след което са провлачени с натиснат десен бутон на мишката.

Фиг. 20. Вече копираните елементи от фиг.19

След маркирането и провлачването на групата блокове, десният бутон на мишката е отпуснат и копираните блокове се появяват в работния

прозорец.

SIMULINK дава име на всеки обект и копиран блок. Ако копираният блок е първи от типа си, името му е същото, дадено в подбиблиотеката. При копиране или добавяне на вече съществуващ обект в работния прозорец, SIMULINK автоматично му задава номер – 1, 2, 3,... след името му.

92

Page 93: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 21. Автоматично озаглавяване на копирани обекти – след копирането на левият обект,копираният(вдясно разположен) получава цифта “1” след името си.

3.3. Определяне параметрите на блоковетеДо прозореца с параметрите на даден блок се стига с двоен клик

върху него. За пример се разглежда блок тип Transfer Fcn. Редът Numerator определя коефициентите на полином от n-та степен в числителя на ф-ята, а Denominator – в знаменателя.

Фиг. 22. Двоен клик върху блок тип Transfer Fcn – по този начинотваряме менюто за настройки на параметрите му.

93

Page 94: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 23. Меню с параметри на блок типTransfer Fcn – в ред Numerator савъведени коефициенти 3 и 1, а в ред Denuminator-

5 7 26.

Коефициентите задължително са оградени с квадратни скоби [ ].

Фиг. 24. Редактирани параметри на блок Transfer Fcn – след натискане на ОК от менюто за настроване параметрите, променените данни

се визуализират в блока(коефициентите в Numerator заематстойности в полином от n степен в числителя, а коефициентите в

Denominator заемат съответните стойности на коефициентите на полином в знаменателя)

94

Page 95: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

3.4. Въвеждане на описание на блок, приоритет и етикет.Описанието е текст който описва целта на блока. Приоритетът

показва реда за изпълнение на блока спрямо другите елементи в модела – за невиртуални блокове или виртуални код системи, номера на приоритета описва реда по който блоковете ще се обновяват при симулацията. Тагът е текст, който се появява в блока като етикет, генериран от SIMULINK.

За да се въведе описание на блок, приоритет и етикет намиращо се под него, е необходимо да се натисне десен бутон на мишката върху блока, в падащото меню да се избере Block properties. В опцията General в графа Description се въвежда желаното описание. След това се избира опция Block Annotation, в колона Block property tokens се намира командата %<Description> и се вкарва в графа Enter text and tokens for annotation с двоен клик върху нея или натискане на бутона >>. След това се натиска ОК и информацията в работния прозорец се обновява.

Фиг. 24. Отваряне на меню за въвеждане на настройки на блок –

става с натискане на десен бутон на мишката върху блока и избор на Block properties

95

Page 96: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

.

Фиг. 25. Въвеждане на описващ текст – става с въвеждане на текст в графа Description, която се намира в подменю General на прозореца Block

properties

96

Page 97: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг. 26. Активиране на Description – в подменюто Block Annotation, от Block property tokens намираме %<Description>, натискаме бутон >>, и след това ОК.

Фиг. 27. Визуализиране на въведеното описание – под името на блока се появява текст.

Приоритет и етикет се въвеждат от същото меню Block Properties по аналогичен на Description начин, като първо от страницата General в редовете Priority и Тag се въведат съответните данни. След това в страницата Block Annotation се селектират командите %<Priority> и %<Tag> и се натиска бутон >>.

97

Page 98: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.28. Въвеждане на приоритет и етикет

Фиг.29. Активиране на приоритет и етикет

98

Page 99: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.30. Изглед на блок с активирани и въведени приоритет и етикет

3.5.Изтриване на блокове – става с натискане на десен бутон на мишката върху обект, и след това избиране на команда Clear (в по-новите версии на продукта командата е Delete). Изтриване става и с маркиране на блок и натискане на клавиши Backspace или Delete от клавиатурата

Фиг.31. Изтриване на блок с използване на падащо меню– десен бутон върху елемента/ Clear

3.6. Възстановяване на изтрит блок – избира се Edit/Undo Delete или клавишната комбинация Ctrl+Y

Фиг.32. Възстановяване на изтрит блок – чрез Undo Delete

99

Page 100: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

3.7. Промяна ориентировката на блок – по подразбиране сигналният поток през даден блок тече отляво надясно. Входовете на блока са отляво, а изходите отдясно. Тази ориентировка може да се смени чрез щракане на десен бутон върху блока и избор на: Format/Flip block – за да се завърти блока на 180º, или Format/Rotate block – да се завърти на 90º.

Фиг.33. Промяна ориентировката на блока с командите Flip block и Rotate block

Фиг.34. Блок, завъртян Фиг.35. Блок, завъртян с команда Rotate blockс команда Flip block

3.8. Промяна размера на блок – елементът се маркира, хваща се някой от маркерите му и се разтегля до желан размер.

100

Page 101: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.36. Маркиране и хващане Фиг.37. Разтегляне на маркер

3.9 Редактиране на име на блокИмето на блок се изписва под него, ако входът и изходът са с

хоризонтално направление и отляво на блока ако са с вертикално.

Фиг.38. Позиция на името

на блок с хоризонтално

снаправление на вход-изход

101

Page 102: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.39. Позиция на името на блокс вертикално направление на вход-изход

Промяна на разположението на името на блок се постига чрез маркирането на името и преместване в противоположната страна на блока, или с натискане на десен бутон на блока и избиране на командата Format/Flipname.

Скриване на името на блока се постига с маркиране на блока, натискане на десен бутон на мишката и избиране на Format/Hide name. Показване на вече скрито име става с маркиране на блока, десен бутон на мишката върху него и избиране на Format/Show name.

Фиг.40. Промяна положението на името – премества се на срещуположната страна

Фиг.41. Скриване на името на блок

102

Page 103: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.42. Показване на скрито име на блок

Фиг.43. Редактиранена името

Редактиране на името на блок става с кликване върху него и извършване на текстова редакция.

3.10 Визуална редакция на елементиМоже да се добави сянка зад блока за по-добър общ изглед –

става с кликване с десен бутон на мишката върху желания блок, избиране на Format/Show drop shadow.

103

Page 104: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.44. Добавяне на сянка зад блок

Фиг.45.Блок със сянка

Скриване на сянка става с натискане на десен бутон на мишката върху блока, избиране на Format/Hide drop shadow

Фиг.46. Скриване на сянка зад блок

Може да се редактира цветовото оформление на елементите в работния прозорец, както и самият работен прозорец. Цвета на контурите на блок може да се смени с натискане на десен бутон върху него и избиране на цвят от падащото меню Foreground, или чрез маркиране на елемент и следване на Format/Foreground/(......). Цветът на самия блок се избира по алтернативен начин – чрез маркиране на елемент и следване на Format/Background/(…..), или чрез натискане на десен бутон върху блок и избор на цвят от менюто Background. Фонът на работния прозорец може да се променя с натискане на десен бутон върху празно пространство в него и избор на цвят от Screen color, или по пътя Format/Screen color/(…….).

104

Page 105: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.47. Избор на цвят за контурна блок с десен бутон на мишката – в случая червен

Фиг.48. Оцветенконтур на блок

Фиг.50. Избор на цвят за контур на блок с използване на менюто Format/Foreground/(….)

105

Page 106: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.51. Избор на цвят на блок с използване на мишката – в примера зелен

Фиг.52. Оцветен блок – така изглежда блокът от фиг.51 след промяна на цвета

Фиг.53. Смяна на цвета на фона на работния прозорец – в случея в син

Фиг.54. Работен прозо-рец със сменен в си-ньо фон

3.11 Създаване на сегмент на линияСегментът представлява част от линия която може да се определи

най-вече визуално като самостоятелна част от нея. Разделянето на линията на сегменти позволява произволното им преместване в равнината. За целта се натиска клавиш Shift, избира се произволна точка от линията с мишката и се премества, разделяйки линията на два сегмента от двете си страни.

Фиг.55. Разделяне на линия на сегмент – задържан е клавиш Shift, маркираната точка от линията с мишката е преместена

106

Page 107: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.56. Разделена линия на сегменти

3.12 Вмъкване на блок в линияМоже в изградена линия между блокове да се вмъкне нов блок. Това става с маркиране на блока който ще се вмъква и преместването му върху линията, така че тя да минава през средата му.

Фиг.58. Блок за вмъкване в линия – има изградена връзка между горните блокове.

Фиг.59. Вмъкване на блок в линия – със задържан ляв бутон на мишката върху избрания блок, той е позициониран върху линията

Фиг.60. Вмъкнат в линия блок

107

Page 108: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

3.13 Поставяне на етикети на линии или сегменти – става с двоен клик върху линия или сегмент и въвеждане на текст в появилия се правоъгълник. Етикетът може да се премества чрез маркиране и задържане на ляв бутон

на мишката и преместване.

Фиг.71. Създаден етикет

Фиг.72. Преместване на етикет – в случая над линията

Фиг.73. Преместен над линията етикет

4. Извеждане на резултати.Обикновено графичните резултати се извеждат чрез блока Scope.

При изграден модел, може да получат в Workspace числените стойности на графиката по двете оси, взети през определен интервал от време. Това става чрез свързването на изходния блок Out1. Стартира се симулацията. Като резултат в Workspace автоматично се записват применливите tout и yout – фиг.76. При написване в Command window на >>tout и >>yout се извеждат съответно стойностите по хоризонталната и по вертикалната оси. Получената графика може да се визуализира и като фигура с изписване на >>plot(tout,yout)

108

Page 109: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

в Command window.

Фиг.74. Входът на изходния блокOut1 се свързва с линията преди Scope

Фиг.75. Свързаният блок Оut1.

Фиг.76. Изведени числени данни за графиката по хоризонталната ос – след въвеждане на tout в Command window

109

Page 110: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.77. Визуализиране на фигура с графиката, получена в SIMULINK – въведенa е команда plot(tout,yout) в Command window и в резултат е получена фигурата FigureNo.1

Визуализиране на графиката във фигура чрез функцията plot може да се постигне като се замени крайният блок Scope с блок To Workspace, намиращ се в библиотеката Sinks. Вътре в блока е изписано името на променливата в която се съхраняват резултатите Simout. То може да се смени като се кликне два пъти върху него и се редактира текстa simout. За да се прегледа стойността на променливата в Workspace, е необходимо да се кликне два пъти с левия бутон на мишката върху блока To Workspace, след което от падащия списък Save Format да се избере формат за съхранение Array. В Command Window се въвежда текст >>plot(името на променливата в блок To Workspace).

Фиг.78. Модел, с краен блок То Workspace

110

Page 111: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.79. След двоен клик върху То Workspace е отворен прозорец Block Parameters, в който в реда Variable name е въведено името на променливата - в случея promenliva. Форматът за съхранение е променен в падащото меню Save format на формат Array

111

Page 112: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Фиг.80. Визуализиране на графика във фигура – въведена е командата за изчертаване с името на променливата в случея >>plot(promenliva) след което е изчертана графиката, създадена от модела във вид на фигура с име Figure No.1

112

Page 113: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

УПРАЖНЕНИЕ ВЪРХУ SIMULINK

1. Да се начертаят схемите и да се съхранят във файлове с имена primer1.mdl и primer2.mdl съответно. Да се стартира симулацията и се проверят резултатите:

Sine Wave Scope

1s

Integrator

0.6

200s +30s+12

Transfer FcnStep Scope

2. Да се въведат имена на входния и изходния сигнал съответно input и output за primer2.mdl.

3. Да се оцветят с червен цвят контурите на осцилоскопа, а задния му фон – със зелен цвят.

4. Да се промени в primer1.mdl мястото на името на един от блоковете и неговата ориентация. След това да се възстанови предишното положение.

5. Да се покаже описание “стъпаловиден сигнал” под блока Step. Да се смени името на Scope c Oscilloscope.

6. Да се начертае схемата на уравнението y=3/4x + 20., като стойностите на х се подават от блок Ramp, a резултатът се изведе на осцилоскоп и блок Out1. Да се изчертае графиката на масива с изходните данни.

7. Да се смени блока Out1 с блок To Workspace и данните да се запишат в масив t в работното пространство. Да се изчертае графика на t и да се сравнят данните с yout.

За изпълнение на упражнението се следват следните стъпки:Задача 1

113

Page 114: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Стъпка 1: Стартира се SIMULINK от бутона в toolbar-a на Мatlab

Стъпка 2: В отворилата се библиотека в реда Find се въвежда името на първия блок Sine Wave. След натискане на Enter, Simulink намира блока и го маркира със сив фон. Блокът се вмъква в работния прозорец като се натиска десен бутон

на мишката върху него и се избира Add to ‘united’. В по-новите версии на Матлаб е възможно да се натиска няколко пъти Enter, докато се намери Sine Wave

Същото се повтаря с останалите блокове, чиито имена са известни. В упражнението е даден блок без показано име, намиращ се между Sine Wave и Scope. Името му е Mux. Въвежда се по същия начин както другите блокове. След като се поставят всички блокове, те се свързват с линии(виртуални блокове) между тях. Линиите се чертаят от вход към изход.

Стъпка 3: Блоковете се свързват по същата схема помежду си, като за целта се изчертават линии между съответните входове и изходи. Изчертаването на връзката между Integrator и Sine Wave става като мишката се придвижи от входа на Integrator до линията свързваща Sine Wave и Mux. При поява на двоен кръст върху линията, мишката се отпуска

114

Page 115: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Стъпка 4: Mоделът се съхранява на диска по следния начин – File/Save as

Стъпка 4.1: В отворилият се прозорец се вписва в ред File name името на модела – primer1, след което се натиска Save.

За да се създаде втория модел от задачата се извършват аналогични операции:

Стъпка 5: Въвеждат се показаните на схемата елементи в работния прозорец, по начина показан в Стъпка 2.

Стъпка 6: На дадената схема в задачата се вижда че стойностите в блок Transfer Fcn са различни.

115

Page 116: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

За да се редактират, се кликва два пъти върху блока. Показва се даденият прозорец, в ред Numerator се въвежда [0.6]. В ред Denominator се въвежда [200 30 1]. След редакция се натиска OK.

Към стъпка 6: Така изглеждат

Стъпка 7: След редакция на блока в работния прозорец, моделът се свързва с линии по дадената схема.

Записването на модела във файла става като се изпълнят стъпки 4 и 4.1 за втория модел, като вместо primer1 се въведе primer2 във File name.

Стъпка 8: Съхранение на диска на втория модел

116

Page 117: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Задача 2. Да се въведат имена на входния и изходния сигнал съответно input и output за primer2.mdlИзпълнението на втората задача става по следния начин.

Стъпка 9: Кликва се два пъти върху входящата линия до появяване на пунктирен правоъгълник под нея. Въвежда се текст input.

Стъпка 10: При кликване с мишката извън въведеният текст, той се позиционира под линията.

Стъпка 11: Следвайки стъпки 9 и 10, се кликва върху изходящата линия, в появилият се пунктирен правоъгълник се въвежда текст output, кликва се с мишката извън правоъгълника за да се

позиционира текстът.

117

Page 118: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Задача 3 Да се оцветят с червен цвят контурите на осцилоскопа, а задния му фон – със зелен цвят.

Стъпка 12. Промяната на цвета на контурите на осцилоскопа в червен става с натискане на десен бутон на мишката върху него и избиране на Foreground color/Red

Към Стъпка 12: Така изглежда контура на осцилоскопра след изпълнение на операцията.

118

Page 119: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Стъпка 13: Цветът на осцилоскопа се сменя в зелен с натискане на десен бутон на мишката върху него и избиране на Background color/Green.

Към Стъпка 13: Така изглежда оцветеният в зелено осцилоскоп.

Задача 4. Да се промени в primer1.mdl мястото на името на един от блоковете и неговата ориентация. След това да се възстанови предишното положение

Стъпка 14: За да се премести името на блок, то се маркира и се провлачва до противоположната страна.

119

Page 120: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Към Стъпка 14: Името на блока се намира на противоположната страна.

Стъпка 15: Промяна на ориентацията на блок става с натискане на десен бутон на мишката върху блока, в случея осцилоскопа и избиране на Format/Rotate block.

Към Стъпка 15: Вижда се че ориентацията на стрелката е променена.

120

Page 121: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Задача 5. Да се покаже описание “стъпаловиден сигнал” под блока Step. Да се смени името на Scope c Oscilloscope.

Стъпка 16: За да се добави описание под Step, се кликва с десен бутон на мишката върху него и се избира Block properties…

Стъпка 17: В отворилият се прозорец в страницата General, в текстовото поле Description се вписва описанието – в случея Stypaloviden signal.

121

Page 122: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Стъпка 18: Избира се страница Block Annotation, от колона Block property tokens се маркира %<Description> и се натиска бутон >>

Към Стъпка 18: Вижда се че в графата Enter text and tokens for annotation се е появила командата %<Description>. Натиска се ОК

122

Page 123: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Към Стъпка 18: Под блок Step се появява описание Stypaloviden signal

Стъпка 19: Промяната на името на блок Scope става с еднократно кликване върху името му. То се загражда от пунктирен равоъгълник.

Стъпка 20: Текстът се редактира от Scope в Oscilloscope и се кликва с мишката извън пунктирания правоъгълник.

Задача 6 Да се начертае схемата на уравнението y=3/4x + 20., като стойностите на х се подават от блок Ramp, a резултатът се изведе на

123

Page 124: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

осцилоскоп и блок Out1. Да се изчертае графиката на масива с изходните данни.

За да се изпълни задача 6 е необходимо да се използват блокове от подбиблиотека Math operations. За даденото уравнение е необходимо променливата х да се умножи с коефициент 3/4. Този умножител представлява блокът Gain. За да се добави константа се използва блок Constant от подбиблиотека Sources. Събирането на членовете 3/4х и 20 става с включването им към входовете на блок Sum от подбиблиотеката Math operations.

Стъпка 21: В търсачката на блокове в SIMULINK – Find е въведено името на блок Ramp, след натискане на клавиш Enter, блокът е маркиран. С кликване с десен бутон на мишката и избор на Add to ‘unitled’, той се вмъква в работния прозорец. С блок Ramp се въвежда променливата x.

Стъпка 22: За да се въведе умножител с ¾ на променливата е необходимо използването на блок Gain. Името му се въвежда в търсачката. Натиска се Enter. След намирането на Gain се натиска десен бутон на мишката върху маркирания блок Gain. От контекстното меню се избира Add to ‘unitled’. Като резултат блокът Gain също се позиционира в прозореца на модела.

124

Page 125: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Стъпка 23: За добавяне на константа добавя блок Constant, който е намерен с търсене в търсачката на SIMULINK. Вмъква се в работния прозорец на модела по начина, показан в горните две стъпки.

Стъпка 24: За да се съберат членовете на уравнението е небходимо използването на

125

Page 126: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

блок Sum, намерен и добавен в работния прозорец по начина показан в предходните стъпки.

Стъпка 25: За визуализиране на резултата от уравнението се добавя блок Scope.

Към Стъпка 25: Така изглежда работния прозорец след добавяне на необходимите блокове. Коефициентът пред х – Gain има стойност по дефиниция 1. Свободният член Constant има също стойност по дефиниция 1.

Стъпка 26: За да се промени стойността на коефициента пред

126

Page 127: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

променливата, се кликва два пъти с ляв бутон на мипката върху блок Gain. В ред Gain се въвежда стойността – в случея ¾. Натиска се ОК.

Към Стъпка 26: Вижда се че стойността в блока се е променила.

Стъпка 27: Промяната на стойността на свободния член става като се кликне два пъти с ляв бутон на мишката върху блок Constant. Отваря се прозорец Block Parameters: Constant. В ред Constant value се въвежда стойността – за примера е 20. Натиска се ОК.

Стъпка 28: След като блоковете имат необходимите настройки, трябва да се свържат така, че да се изпълни уравнението. Променливата х трябва да се умножи с коефициента ¾ - затова Ramp се свързва с Gain. За да се сумира полученият резултат със

127

Page 128: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

свободния член 20, изходите на Gain и Constant се свързват с входовете на Sum. По този начин е изпълнено 3/4x + 20. За да се визуализира уравнението във вид на симулация, се слага блок Scope, свързан с изхода на Sum.

Стъпка 29:Симулацията се стартира от бутона в toolbar-a.

Към Стъпка 29:Кликва се два пъти с левия бутон на мишката върху Scope за визуализация на симулацията. Използва се бутон Аutoscale

Стъпка 30: За да се изчертае графика, са необходими изходни данни, които се получават със свързване на изходния сигнал с блок Out1. Той се въвежда по начините показани за другите блокове.

128

Page 129: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Стъпка 31: За да се визуализира графика от уравнението, симулацията се стартира по начина показан в Стъпка 29. В прозореца Workspace се появяват два масива с числените стойности tout и yout. В Command Window се въвежда командата >>plot(tout,yout) След натискане на Enter, се появява графиката на уравнението:

129

Page 130: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Задача 7

Стъпка 32: Блок Out1 е изтрит с клавиш Delete и на негово място е добавен блок To Workspace, по начините показани в предходни стъпки. Свързан е към изходящия сигнал.

Стъпка 33: За да се запише масив с име ‘t’ се кликва два пъти с левия бутон на мишката върху блок To Workspace и в отворилият се прозорец Block Parameters:To Workspace, в реда Variable name се въвежда име t. От падащото меню на опцията Save format се избира Array.

Към Стъпка 33: Вижда се че името на масива се е променило в ‘t’.

130

Page 131: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

131

Page 132: Графики - Nikola Vaptsarov Naval Academyns.naval-acad.bg/MNikolova/primeri_Matlab.doc · Web view2 Използване на квадратурни формули Ако не

Стъпка 34: В прозореца Workspace се появява масив t. За изчертаване на графика на t, в Command Window се въвежда командата >>plot(t)Появява се фигура с изчертана графика на уравнението, изглеждаща като тази на Scope.

132