Matlab symbolic toolbox入门简介

建立一个symbolic variable:

利用syms 和 sym
区别,syms可以直接建立一个符号变量,但是其变量名与其值为一致,当建立多个符号变量时不方便。

syms x  %建立了一个symbolic variable x,其值为x
sym是一个函数,用法为sym()
区别,sym可以 一次性 建立多个符号变量,并且变量名与其值可以不同

A = sym('a')    %建立一个符号变量A,其值为a
B = sym('a', [1 20]) 
B = 
[ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20]

sym可以建立常量符号变量

f = sqrt(sym(5))   %建立根号5的变量


symbolic  variable 在matlab中的表示为非缩进式的,而一般的变量为缩进式的。
重新利用变量名称

syms a b
f=a+b
 
returns
f = 
a+b
If later enter
syms f
f

You can use the syms command to clear variables of definitions that you previously
assigned to them in your MATLAB session. However, syms does not clear the following
assumptions of the variables: complex, real, integer, and positive. These assumptions are
stored separately from the symbolic object. 

建立一个符号函数(Symbolic Function)

可以利用syms建立一个符号函数

syms f(x, y)   %建立一个符号函数f(其变量为xy),同时符号变量xy也会建立。f代表任意二元函数
或者先建立符号变量x,y再通过赋值的方式建立符号函数

syms x y   %当建立多个变量时,xy之间不能有逗号
f(x, y) = x^3*y^3
建立符号函数之后就可以对函数进行微分,积分,化 简,将其自变量带入值,或者进行其他的数学操作,如求二阶导

d2fy = diff(f, y, 2) %对y进行二阶微分,得到的d2fy也是符号函数
d2fy(x, y) =
6*x^3*y
或者带入值进行评价,比如x=y+1

f(y+1, y)
ans = 
y^3*(y+1)^3
对于符号函数,有两个特别方便的画图工具命令

ezsurf(f) %对应二元函数,画出曲面
ezplot(f(y+1, y)) %对于一元函数,画出曲线
ezsurf(f)的结果

ezplot(f(y+1, y))的结果

建立一个符号矩阵(Symbolic Matrices)

使用现有的符号变量

syms a b c
A = [a b c; c a b; b c a]
A = 
[a, b, c]
[c, a, b]
[b, c, a]
sum(A(1,:))
 
ans =
a + b + c
% 判断第一行是否都是与第二行相等,利用isAlways()函数
isAlways( sum(A(1,:)) == sum(A(:,2)) )
ans =
1
在建立矩阵的时候建立符号变量

A = sym('A', [2 4])
A =
 
[ A1_1, A1_2, A1_3, A1_4]
[ A2_1, A2_2, A2_3, A2_4]
要控制下标的格式,利用%d

A = sym('A%d%d', [2 4])
A =
[ A11, A12, A13, A14]
[ A21, A22, A23, A24]
创建一个符号数字(Symbolic Numbers)矩阵

A = hilb(3)
 
A =
 
    1.0000    0.5000    0.3333
    0.5000    0.3333    0.2500
    0.3333    0.2500    0.2000
A为一个数值矩阵,将上面的矩阵转换为符号矩阵,只需要利用sym函数

A = sym(A)
A =
 
[   1, 1/2, 1/3]
[ 1/2, 1/3, 1/4]
[ 1/3, 1/4, 1/5]

进行符号运算

微分运算

单个变量的函数

syms x
f = sin(x^2);
diff(f)
 
ans =
 
2*x*cos(x^2)
多变量的情况

syms x y
f = sin(x)^2 + cos(y)^2;
diff(f)
ans =
 
2*cos(x)*sin(x)
对于没有没有指定微分变量的情况,diff函数选择最接近x字母的变量进行微分
也可以指定微分的变量

syms x y
f = sin(x)^2 + cos(y)^2;
diff(f, y)
ans =
-2*cos(y)*sin(y)
二阶导

syms x y
f = sin(x)^2 + cos(y)^2;
diff(f, y, 2)
ans =
2*sin(y)^2 - 2*cos(y)^2
混合求导

syms x y
f = sin(x)^2 + cos(y)^2;
diff(diff(f, y), x)
ans =
0

积分运算

不定积分

syms x y n
f=x^n + y^n;
int(f)    %不定积分,没有指定积分变量则为离x最近的字母
ans = 
x*y^n + (x*x^n)/(n+1)
int(f, y)  %指定积分变量y
ans =
x^n*y + (y*y^n)/(n + 1)

定积分

syms x y n
f = x^n + y^n;
int(f, 1, 10) %默认对x积分
ans = 
piecewise([n == -1, log(10) + 9/x], [n ~= -1, (10*10^n - 1)/(n + 1) + 9*x^n])
int(f, n, 1, 10) %指定对n积分
ans = 
piecewise([x < 0 | y < 0, int(x^n + y^n, n, 1, 10)], [~x < 0 & ~y < 0, (log(x)*y^10 - log(x)*y)/(log(x)*log(y)) - (- x^10 + x)/log(x)])
如果int函数不能找到积分,则返回一个积分函数

syms x
int(sin(sinh(x)))
ans =
int(sin(sinh(x)), x)




你可能感兴趣的:(matlab,symbolic,toolbox,sym,syms,学习笔记)