Упражнение 4. Matlab
From Ilianko
Contents
Смесени частни производни
Matlab няма собствена функция. Трябва да се използват собствени програми включващи diff().
Pregled
Definirani simwolni nizowe
x = sym('x') A = sym('[a, b; c, d]'); - символна матрица eq = sym('a*x^2 + y'); syms x y a b c; f = (x+b); - всеки израз имащ символни променливи става символен
Aritmetika с променлива точност
vpa(expr), vpa(expr, 20) - rezultat с 20 значещи цифри digits(50)
Преобразовнания
А = [1/2 ....
S = sym(A) - double-> symbolic
V = vpa(S) - symbolic -> 32 бита точност
А = double(S) - symbolic -> double
Опростяване
collect() simple() subs() simplify()
sub(expr, old, new)
Линейна алгебра
det() inv() poly()
syms b1 b2 b3
b = [ b1; b2; b3] ;
x = A\B - решаване система уравнения
[v, E] = eig(A) собствени стойност - собствени честоти на трептене!
Решаване уравнения
solve(f,x) sym x y; [x y] = solve(f1, f2, x, y) - решава системата f1(x,y) = 0 ; f2(x,y) = 0
Matemati`eski анализ
limit(f, x, a); - granica na f при х клонящо към а
diff(f,x) int(f,x) - неопределен интеграл int(f,x,a,b) - определен интеграл
symsum( f(k), k , n ,m) - suma taylor( f, n, x, a ) - ред на тейлор
Analitichno решаване на ОДУ
y = dsolve('deq', 'x') - общо решение y = dsolve('deq', 'inic', 'x') - частно решение
Система ОДУ
[y1, y2, y3 ...] = dsolve = ('deq1', 'deq2', ..., 'inic1', 'inic2',... , 'x')
Пример:
ay + by' + cy = 2sin(x), y0(x) = y0 ....
Диференциране
>> syms x y; >> f = exp(-x/y)*sin(x*y) f = sin(x*y)/exp(x/y) >> diff(f,x,2) % втора производна по x ans = sin(x*y)/(y^2*exp(x/y)) - (2*cos(x*y))/exp(x/y) - (y^2*sin(x*y))/exp(x/y)
>> simplify(diff(diff(f,x,2), y, 2)) ans = (x^2*sin(x*y) + 6*y^2*sin(x*y) - 2*y^6*sin(x*y) - 6*x*y*sin(x*y) - 4*x*y^7*cos(x*y) - 2*x*y^5*sin(x*y) + 2*x^2*y^4*sin(x*y) + x^2*y^8*sin(x*y))/(y^6*exp(x/y)) >> sub(ans, {x,y}, {1.23, pi/2}) ??? Undefined function or method 'sub' for input arguments of type 'sym'. >> subs(ans, {x,y}, {1.23, pi/2}) ans = 1.9785
>> str1 = 'x = '; >> str2 = 'sin(pi/2)'; >> str = [str1, str2] str = x = sin(pi/2) >> eval(str) x = 1
== Съставяне на функции с променлив брой рагументи ==
function [a b] = in2out3(x,y,z)
if nargout == 1 %един изходен аргумент
switch nargin % брой входящи аргументи
case 1
a = x;
case 2
a = x+y;
case 3;
a = x +y + z;
end
else
switch nargin
case 1
a = x;
b = x*x;
case 2;
a = x+y;
b = x*x+y*y;
case 3;
a = x+y+z;
b = x*x+y*y+z*z;
end
end
end
Неограничен брой на входни и изходни параметри