Difference between revisions of "Упражнение 3. Matlab"

From Ilianko
 
(31 intermediate revisions by the same user not shown)
Line 36: Line 36:
 
   case {val2, val3
 
   case {val2, val3
 
     statement
 
     statement
 
 
   otherwise
 
   otherwise
 
     statement
 
     statement
 
  end
 
  end
  
Логическо равенство да не се ползва за числа с плаваща запетая  
+
Логическо равенство да не се ползва за числа с плаваща запетая
  
 
=== for ===
 
=== for ===
Line 57: Line 56:
 
  end
 
  end
  
=== Dopълнителни управляващи оператори ===
+
=== Допълнителни управляващи оператори ===
 +
 
 +
'''break'''
 +
 
 +
'''continue''' - преминаване към следваща итерация на for или while цикъл
 +
 
 +
'''pause''' - пауза до натискане на клавиш ( pause(4) <=> sleep(4) )
  
break
+
'''keyboard''' - predawa uprawlenieto  на клавиатурата (използва се при дебъгване). Спира се програмата и може да проверяваме всички стойност
continue - преминаване към следваща итерация на for или while цикъл
+
 
pause - пауза до натискане на клавиш ( pause(4) <=> sleep(4) )
+
'''return''' - връща се към програмата след keyboard
keyboard - predawa uprawlenieto  на клавиатурата (използва се при дебъгване). Спира се програмата и може да проверяваме всички стойност
 
return - връща се към програмата след keyboard
 
  
 
== файл функции ==
 
== файл функции ==
+
 
 +
Записва се като ime.m
 
  function [a, b, c] = ime(x, y, z)
 
  function [a, b, c] = ime(x, y, z)
 
   global p, q;
 
   global p, q;
Line 74: Line 78:
 
  end   
 
  end   
  
Записва се като ime.m
 
  
 
<code><pre>
 
<code><pre>
Line 109: Line 112:
 
</pre></code>
 
</pre></code>
  
 +
== Символни преобразувания ==
 +
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, 20)
 +
ans =
 +
0.833333333333333
 +
 +
>> vpa(1/2 +1/3)
 +
ans =
 +
0.83333333333333325931846502498956397175788879394531
 +
 +
>>a = double(ans)
 +
a =
 +
0.833333333300000
 +
 +
1.0e10+ 1.0e-10
 +
ans =
 +
    1.000000000000000e+10
 +
 +
sym('1.0e10')+ sym('1.0e-10')
 +
ans =
 +
10000000000.0000000001
 +
 +
Матрица double  точност
 +
 +
F= [exp(1) sqrt(2); log(3) rand]
 +
 +
F =
 +
 +
  2.718281828459046  1.414213562373095
 +
  1.098612288668110  0.814723686393179
 +
 +
V = vpa(F,30)
 +
 +
V =
 +
 
 +
[ 2.71828182845904553488480814849,  1.41421356237309514547462185874]
 +
[ 1.09861228866810956006361266191, 0.814723686393178936349102059467]
 +
 +
 +
S = sym(F)
 +
S =
 +
 
 +
[ 3060513257434037/1125899906842624,                          2^(1/2)]
 +
[ 2473854946935173/2251799813685248, 7338378580900475/9007199254740992]
 +
 +
Сравнява се по елементно
 +
>> double(V) == double(S)
 +
ans =
 +
    1    1
 +
    1    1
 +
 +
== опростяване и преобразуване на изрази ==
 +
 +
collect - използва се с полиноми и групира събираемите по степента
 +
<code><pre>
 +
>> p = sym('(x+a)^4 +(x-1)^3 - (x-a)^2 - a*x +x-3')
 +
 +
p =
 +
 +
x + (x - 1)^3 - a*x + (a + x)^4 - (a - x)^2 - 3
 +
 +
>> pc = collect(p, x)
 +
??? Undefined function or variable 'x'.
 +
 +
>> pc = collect(p)
 +
 +
pc =
 +
 +
x^4 + (4*a + 1)*x^3 + (6*a^2 - 4)*x^2 + (4*a^3 + a + 4)*x + a^4 - a^2 - 4
 +
</code></pre>
 +
Групирането автоматично ще избере х
 +
 +
Ако искаме да групираме по а, и а не е обявено с  "syms a"
 +
 +
pc = collect(p, 'a')
 +
 +
pc =
 +
 +
a^4 + (4*x)*a^3 + (6*x^2 - 1)*a^2 + (4*x^3 + x)*a + x + (x - 1)^3 - x^2 + x^4 - 3
 +
 +
=== coeffs ===
 +
 +
>> syms a b c d x;
 +
>> p = a*x^3 - 2*b*x^2 + 3*c*x - 4*d;
 +
>> coeffs(p)
 +
 +
ans =
 +
[ -4, 3, -2, 1]
 +
 +
=== horner ===
 +
 +
=== expand ===
 +
Развива израз, разкрива скоби ...
 +
 +
>> expand( (x - 1)*(x-2)*(x-3))
 +
ans =
 +
x^3 - 6*x^2 + 11*x -
 +
 +
>> expand( sin(x+y))
 +
ans =
 +
cos(x)*sin(y) + cos(y)*sin(x)
 +
 +
=== factor ===
 +
Obratnoto na expand
 +
 +
<pre>
 +
>> expand( (x - 1)*(x-2)*(x-3))
 +
 +
ans =
 +
 +
x^3 - 6*x^2 + 11*x - 6
 +
 +
>> factor(ans)
 +
 +
ans =
 +
 +
(x - 3)*(x - 1)*(x - 2)
 +
</pre>
 +
 +
=== sym2poly poly2sym ===
 +
<pre>
 +
>> syms x
 +
>> ps = x^3-2*x^2+3*x + 4;
 +
>> %da go preobrazuvame v polynom;
 +
>> p = sym2poly(ps)
 +
 +
p =
 +
 +
    1    -2    3    4
 +
 +
>> qs = poly2sym(p)
 +
 +
qs =
 +
 +
x^3 - 2*x^2 + 3*x + 4
 +
</pre>
 +
 +
=== simplify, simple ===
 +
 +
syms x
 +
>> f = int(1/(x^12-1))
 +
f =
 +
atan(-(3^(1/2)*x - i*x)/(3^(1/2)*i - 1))*(i/12 - 3^(1/2)/12) - atan((x + 3^(1/2)*i*x)/(3^(1/2)*i - 1))*((3^(1/2)*i)/12 + 1/12) - atan((x - 3^(1/2)*i*x)/(3^(1/2)*i + 1))*((3^(1/2)*i)/12 - 1/12) - (i*atan(-i*x))/6 - atan((3^(1/2)*x + i*x)/(3^(1/2)*i + 1))*(i/12 + 3^(1/2)/12) - atan(x)/6
 +
 +
<pre>
 +
syms x
 +
>> f = int(1/(x^12-1))
 +
 +
f =
 +
 +
atan(-(3^(1/2)*x - i*x)/(3^(1/2)*i - 1))*(i/12 - 3^(1/2)/12) - atan((x + 3^(1/2)*i*x)/(3^(1/2)*i - 1))*((3^(1/2)*i)/12 + 1/12) - atan((x - 3^(1/2)*i*x)/(3^(1/2)*i + 1))*((3^(1/2)*i)/12 - 1/12) - (i*atan(-i*x))/6 - atan((3^(1/2)*x + i*x)/(3^(1/2)*i + 1))*(i/12 + 3^(1/2)/12) - atan(x)/6
 +
 +
>> simplify(diff(f))
 +
 +
ans =
 +
 +
1/(x^12 - 1)
 +
 +
>> simple(diff(f))
 +
ans =
 +
 +
1/(x^12 - 1)
 +
</pre>
 +
 +
=== sub ===
 +
 +
Zaместване на буква с израз
 +
<code><pre>
 +
f = sym('(a^2 + b^2)/(a^2 - b^2) + a^4/b^4')
 +
 +
f =
 +
 +
(a^2 + b^2)/(a^2 - b^2) + a^4/b^4
 +
 +
>> f = subs( f, {'a' , 'b'}, {'(exp(x) + exp(-x))', 'sin(x) + cos(x)'})
 +
 +
f =
 +
 +
(1/exp(x) + exp(x))^4/(cos(x) + sin(x))^4 - ((cos(x) + sin(x))^2 + (1/exp(x) + exp(x))^2)/((cos(x) + sin(x))^2 - (exp(-x) + exp(x))^2)
 +
 +
>> pretty(f)
 +
 +
  /  1            \4                    2  /  1            \2
 +
  | ------ + exp(x) | (cos(x) + sin(x))  + | ------ + exp(x) |
 +
  \ exp(x)          /                        \ exp(x)          /
 +
  -------------------- - -----------------------------------------
 +
                    4                    2                    2
 +
  (cos(x) + sin(x))    (cos(x) + sin(x))  - (exp(-x) + e
 +
</pre></code>
 +
 +
 +
 +
 +
== Решаване на алгебрични уравнения ==
 +
 +
=== solve ===
 +
Решаване на отделни уравнения и системи от уравнения
 +
solve(f);
 +
<pre<
 +
>> f = 'a*x^2 +b.x +c'
 +
 +
f =
 +
 +
a*x^2 +b.x +c
 +
 +
>> solve(f)
 +
 +
ans =
 +
 +
  (- bx - c)^(1/2)/a^(1/2)
 +
-(- bx - c)^(1/2)/a^(1/2)
 +
 +
>> pretty(solve(f))
 +
 +
  +-                -+
 +
  |            1/2  |
 +
  |  (- bx - c)      |
 +
  |  -------------  |
 +
  |        1/2        |
 +
  |      a          |
 +
  |                  |
 +
  |              1/2  |
 +
  |    (- bx - c)    |
 +
  |  - -------------  |
 +
  |        1/2      |
 +
  |        a          |
 +
 +
</pre>
 +
 +
sol = solve('cos(2*x) + sin(x) = 1')
 +
 +
sol =
 +
 +
        0
 +
    pi/6
 +
(5*pi)/6
 +
 +
=== Система от уравнения  solve(f1,f2), solve(f1,f2, x,y) ===
 +
 +
Два начина за адресиране на решението
 +
 +
<pre>
 +
>> f1= x*(2-y) - cos(x)*exp(y)
 +
 +
f1 =
 +
 +
- exp(y)*cos(x) - x*(y - 2)
 +
 +
>> f2 = 2 + x - y - cos(x) -exp(y)
 +
 +
f2 =
 +
 +
x - y - cos(x) - exp(y) + 2
 +
 +
>> [x, y] = solve
 +
>>
 +
>> [x,y] = solve(f1,f2)
 +
 +
x =
 +
 +
0.73908513321516064165531208767387340401341175890075746
 +
 +
 +
y =
 +
 +
0.44285440100238858314132799999933681971626212937347968
 +
 +
</pre>
 +
 +
== математически анализ ==
 +
=== limit ===
 +
 +
>> syms x
 +
>> limit(sin(x)/x, x, 0)
 +
 
 +
ans =
 +
1
 +
 +
>> syms n
 +
>> limit((1+x/n)^n, n , Inf)
 +
  ans =
 +
  exp(x)
 +
 +
=== diff ===
 +
 +
diff(y), diff(y,x)
 +
<pre>
 +
>> syms y, f = exp(-3*x)*sin(x*y)/sqrt(y)
 +
 +
f =
 +
 +
sin(x*y)/(y^(1/2)*exp(3*x))
 +
 +
>> diff(f,x)
 +
 +
ans =
 +
 +
(y^(1/2)*cos(x*y))/exp(3*x) - (3*sin(x*y))/(y^(1/2)*exp(3*x))
 +
 +
>> pretty(diff(f,y))
 +
 +
  x cos(x y)      sin(x y)
 +
  ------------- - -------------
 +
  1/2              3
 +
  y    exp(3 x)      -
 +
                    2
 +
                  2 y  exp(3 x)
 +
>>
 +
 +
</pre>
 
[[Category:Matlab]]
 
[[Category:Matlab]]

Latest revision as of 14:31, 16 April 2011

Управляващи оператори

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

Допълнителни управляващи оператори

break

continue - преминаване към следваща итерация на for или while цикъл

pause - пауза до натискане на клавиш ( pause(4) <=> sleep(4) )

keyboard - predawa uprawlenieto на клавиатурата (използва се при дебъгване). Спира се програмата и може да проверяваме всички стойност

return - връща се към програмата след keyboard

файл функции

Записва се като ime.m

function [a, b, c] = ime(x, y, z)
  global p, q;
  a = x;
  b = y;
  c = z;
end   


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, 20)
ans =
0.833333333333333
>> vpa(1/2 +1/3)
ans =
0.83333333333333325931846502498956397175788879394531

>>a = double(ans)
a =
0.833333333300000
1.0e10+ 1.0e-10
ans =
   1.000000000000000e+10

sym('1.0e10')+ sym('1.0e-10')
ans =
10000000000.0000000001

Матрица double точност

F= [exp(1) sqrt(2); log(3) rand]

F =

  2.718281828459046   1.414213562373095
  1.098612288668110   0.814723686393179
V = vpa(F,30)

V =
 
[ 2.71828182845904553488480814849,  1.41421356237309514547462185874]
[ 1.09861228866810956006361266191, 0.814723686393178936349102059467]


S = sym(F)
S =
 
[ 3060513257434037/1125899906842624,                           2^(1/2)]
[ 2473854946935173/2251799813685248, 7338378580900475/9007199254740992]

Сравнява се по елементно

>> double(V) == double(S)
ans =
    1     1
    1     1

опростяване и преобразуване на изрази

collect - използва се с полиноми и групира събираемите по степента

>> p = sym('(x+a)^4 +(x-1)^3 - (x-a)^2 - a*x +x-3')
 
p =
 
x + (x - 1)^3 - a*x + (a + x)^4 - (a - x)^2 - 3
 
>> pc = collect(p, x)
??? Undefined function or variable 'x'.
 
>> pc = collect(p)
 
pc =
 
x^4 + (4*a + 1)*x^3 + (6*a^2 - 4)*x^2 + (4*a^3 + a + 4)*x + a^4 - a^2 - 4
</code>

Групирането автоматично ще избере х

Ако искаме да групираме по а, и а не е обявено с "syms a"

pc = collect(p, 'a')

pc =

a^4 + (4*x)*a^3 + (6*x^2 - 1)*a^2 + (4*x^3 + x)*a + x + (x - 1)^3 - x^2 + x^4 - 3

coeffs

>> syms a b c d x;
>> p = a*x^3 - 2*b*x^2 + 3*c*x - 4*d;
>> coeffs(p)

ans =
[ -4, 3, -2, 1]

horner

expand

Развива израз, разкрива скоби ...

>> expand( (x - 1)*(x-2)*(x-3))
ans =
x^3 - 6*x^2 + 11*x - 
>> expand( sin(x+y))
ans =
cos(x)*sin(y) + cos(y)*sin(x)

factor

Obratnoto na expand

>> expand( (x - 1)*(x-2)*(x-3))
 
ans =
 
x^3 - 6*x^2 + 11*x - 6
 
>> factor(ans)
 
ans =
 
(x - 3)*(x - 1)*(x - 2)

sym2poly poly2sym

>> syms x
>> ps = x^3-2*x^2+3*x + 4;
>> %da go preobrazuvame v polynom;
>> p = sym2poly(ps)

p =

     1    -2     3     4

>> qs = poly2sym(p)
 
qs =
 
x^3 - 2*x^2 + 3*x + 4

simplify, simple

syms x

>> f = int(1/(x^12-1))
f =
atan(-(3^(1/2)*x - i*x)/(3^(1/2)*i - 1))*(i/12 - 3^(1/2)/12) - atan((x + 3^(1/2)*i*x)/(3^(1/2)*i - 1))*((3^(1/2)*i)/12 + 1/12) - atan((x - 3^(1/2)*i*x)/(3^(1/2)*i + 1))*((3^(1/2)*i)/12 - 1/12) - (i*atan(-i*x))/6 - atan((3^(1/2)*x + i*x)/(3^(1/2)*i + 1))*(i/12 + 3^(1/2)/12) - atan(x)/6

 syms x
>> f = int(1/(x^12-1))
 
f =
 
atan(-(3^(1/2)*x - i*x)/(3^(1/2)*i - 1))*(i/12 - 3^(1/2)/12) - atan((x + 3^(1/2)*i*x)/(3^(1/2)*i - 1))*((3^(1/2)*i)/12 + 1/12) - atan((x - 3^(1/2)*i*x)/(3^(1/2)*i + 1))*((3^(1/2)*i)/12 - 1/12) - (i*atan(-i*x))/6 - atan((3^(1/2)*x + i*x)/(3^(1/2)*i + 1))*(i/12 + 3^(1/2)/12) - atan(x)/6
 
>> simplify(diff(f))
 
ans =
 
1/(x^12 - 1)
 
>> simple(diff(f))
ans =
 
1/(x^12 - 1)

sub

Zaместване на буква с израз

 f = sym('(a^2 + b^2)/(a^2 - b^2) + a^4/b^4')
 
f =
 
(a^2 + b^2)/(a^2 - b^2) + a^4/b^4
 
>> f = subs( f, {'a' , 'b'}, {'(exp(x) + exp(-x))', 'sin(x) + cos(x)'})
 
f =
 
(1/exp(x) + exp(x))^4/(cos(x) + sin(x))^4 - ((cos(x) + sin(x))^2 + (1/exp(x) + exp(x))^2)/((cos(x) + sin(x))^2 - (exp(-x) + exp(x))^2)
 
>> pretty(f)

  /   1             \4                    2   /   1             \2
  | ------ + exp(x) | (cos(x) + sin(x))  + | ------ + exp(x) |
  \ exp(x)          /                         \ exp(x)          /
  -------------------- - -----------------------------------------
                    4                     2                     2
   (cos(x) + sin(x))     (cos(x) + sin(x))  - (exp(-x) + e



Решаване на алгебрични уравнения

solve

Решаване на отделни уравнения и системи от уравнения solve(f); <pre< >> f = 'a*x^2 +b.x +c'

f =

a*x^2 +b.x +c

>> solve(f)

ans =

 (- bx - c)^(1/2)/a^(1/2)
-(- bx - c)^(1/2)/a^(1/2)

>> pretty(solve(f))

 +-                 -+
 |             1/2   |
 |   (- bx - c)      |
 |   -------------   |
 |        1/2        |
 |       a           |
 |                   |
 |              1/2  |
 |    (- bx - c)     |
 |  - -------------  |
 |         1/2       |
 |        a          |

sol = solve('cos(2*x) + sin(x) = 1')

sol =

       0
    pi/6
(5*pi)/6

Система от уравнения solve(f1,f2), solve(f1,f2, x,y)

Два начина за адресиране на решението

>> f1= x*(2-y) - cos(x)*exp(y)
 
f1 =
 
- exp(y)*cos(x) - x*(y - 2)
 
>> f2 = 2 + x - y - cos(x) -exp(y)
 
f2 =
 
x - y - cos(x) - exp(y) + 2
 
>> [x, y] = solve
>> 
>> [x,y] = solve(f1,f2)
 
x =
 
0.73908513321516064165531208767387340401341175890075746
 
 
y =
 
0.44285440100238858314132799999933681971626212937347968

математически анализ

limit

>> syms x
>> limit(sin(x)/x, x, 0)
 
ans =
1
>> syms n
>> limit((1+x/n)^n, n , Inf)
 ans =
 exp(x)

diff

diff(y), diff(y,x)

>> syms y, f = exp(-3*x)*sin(x*y)/sqrt(y)
 
f =
 
sin(x*y)/(y^(1/2)*exp(3*x))
 
>> diff(f,x)
 
ans =
 
(y^(1/2)*cos(x*y))/exp(3*x) - (3*sin(x*y))/(y^(1/2)*exp(3*x))
 
>> pretty(diff(f,y))

   x cos(x y)       sin(x y)
  ------------- - -------------
   1/2               3
  y    exp(3 x)      -
                     2
                  2 y  exp(3 x)
>>