Упражнение 3. Matlab
Contents
Управляващи оператори
if
if <expression>
statment
end
if <expression>
statement;
else
statement;
end
if <expression>
statement;
elseif
statement;
else
statement;
end
Релации и логически оператори
< , <= , >, >= , ~=, ==
&, &&, |, ||, ~
Логическо равенство да не се ползва за числа с плаваща запетая
switch
switch expression case val1 statement case {val2, val3 statement
otherwise statement end
Логическо равенство да не се ползва за числа с плаваща запетая
for
for index = nachalo:stypka:kraj % ako nqma stypka tq e 1 statement end
for i = A % A e vektor/matrica statement end
while
while expression statemnet end
Dopълнителни управляващи оператори
break continue - преминаване към следваща итерация на for или while цикъл pause - пауза до натискане на клавиш ( pause(4) <=> sleep(4) ) keyboard - predawa uprawlenieto на клавиатурата (използва се при дебъгване). Спира се програмата и може да проверяваме всички стойност return - връща се към програмата след keyboard
файл функции
function [a, b, c] = ime(x, y, z) global p, q; a = x; b = y; c = z; end
Записва се като ime.m
function y = signum(x)
% сигнум функция
if x>0
y = 1;
elseif x<0
y = -1;
else
0
end
end
>> signum(-5)
ans =
-1
>> signum(0)
ans =
0
>> signum(5)
ans =
1
Символни преобразувания
clear - изчистване на workspace
Задаване на символни величини
оператори за създаване на символни величини
sym - по-универсален
x = sym('x') ; x = x
>> y = pi y = 3.1416
Символите се показват по вляво!
Дефиниране на цял стринг
>> eq = sym ('a*x^2') eq = a*x^2
Диференциране по x >> diff(eq,x) ans = 2*a*x
Matrica на хилберт
H = hilb(5) H =
1.0000 0.5000 0.3333 0.2500 0.2000 0.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.1667 0.1429 0.2500 0.2000 0.1667 0.1429 0.1250 0.2000 0.1667 0.1429 0.1250 0.1111
Извеждане в символичен вид
>> sym(H) ans = [ 1, 1/2, 1/3, 1/4, 1/5] [ 1/2, 1/3, 1/4, 1/5, 1/6] [ 1/3, 1/4, 1/5, 1/6, 1/7] [ 1/4, 1/5, 1/6, 1/7, 1/8] [ 1/5, 1/6, 1/7, 1/8, 1/9]
В този случай няма да има грешка от закръгляне
>> det(H) ans = 3.7493e-12
Sled като отдясно всичко е символни величини и от ляво става символна
>> syms x a b z >> f = sin(x)*exp(z)^a/b f = (exp(z)^a*sin(x))/b
По ясна визуализация
>> pretty(f)
a exp(z) sin(x) -------------- b
Получаване на директно символна матрица
>> syms a b c >> A = [a b c; b c a; c a b] A = [ a, b, c] [ b, c, a] [ c, a, b]
Изчисляване на детерминанта
>> det(A) ans = - a^3 + 3*a*b*c - b^3 - c^3
>> pretty(inv(A)) +- -+ | 2 2 2 | | b c - a a c - b a b - c | | - ----------------------, - ----------------------, - ---------------------- | | 3 3 3 3 3 3 3 3 3 | | a - 3 a b c + b + c a - 3 a b c + b + c a - 3 a b c + b + c | | | | 2 2 2 | | a c - b a b - c b c - a | | - ----------------------, - ----------------------, - ---------------------- | | 3 3 3 3 3 3 3 3 3 | | a - 3 a b c + b + c a - 3 a b c + b + c a - 3 a b c + b + c | | | | 2 2 2 | | a b - c b c - a a c - b | | - ----------------------, - ----------------------, - ---------------------- | | 3 3 3 3 3 3 3 3 3 | | a - 3 a b c + b + c a - 3 a b c + b + c a - 3 a b c + b + c | +-
Подразбиращи се символни променливи
При повече променливи се диференцира по най близката до "х", ако няма зададена
function F = intAB( f ) % интеграл от произволна функция % a,b, - интервал на интегриране %UNTITLED3 Summary of this function goes here % Detailed explanation goes here syms x a b; F = int(f, x, a, b); end
>> y = intAB( sin(x) ) y = cos(a) - cos(b)
Аритметика с променлива точност
Три типа аретмитични операции
- Numеric - тип double (точност)
- Rational - точната аритметика
- VPA - Variable Precision Arithmetic - сами задаваме броя на значещите числа (32 по подразбиране)
>> 1/2 +1/3 ans = 0.833333333333333 - този резултат не е точен
Достатъчен е да обявим един параметър в символен
>> sym(1/2) + 1/3 ans = 5/6
>> vpa(1/2 +1/3) ans =
0.83333333333333325931846502498956
>> vpa(1/2 +1/3, 200) ans = 0.833333333333333259318465024989563971757888793945312
>> vpa(1/2 +1/3) ans = 0.83333333333333325931846502498956397175788879394531