目录
1.符号对象与符号表达式
1.1 建立符号对象
- 符号对象可以是符号常量、符号变量,符号表达式等等,它是一种数据结构。
- sym 函数用来建立单个符号变量,调用格式为:
- 符号变量 = sym(A) ,参数A是一个数或者数值矩阵,也可以是字符串。
a=sym('a') %a是符号变量
b=sym(1/3) %b是符号常量
c=sym('[1 ab;a d]') %C是符号矩阵
- syms 命令用来建立多个符号变量,一般调用格式为:
- syms 符号变量1 符号变量2 … 符号变量n
syms a b c
1.2 建立符号表达式
- 用sym 函数直接建立符号表达式。
y=sym('sin(x)+cos(x)')
- 使用已经定义的符号变量组成符号表达式。
x=sym('x');
y=sin(x)+cos(x)
或者:
syms x;
y=sin(x)+cos(x)
2.符号对象基本运算
2.1 基本运算符
- 普通运算:+ - * \ / ^
- 数组运算:.* .\ ./ .^
- 矩阵转置:’ .’
- 示例:
X=sym('[x11,x12;x21,x22;x31,x32]');
Y=sym('[y11,y12,y13;y21,y22,y23]');
Z1=X*Y; Z2=X'.*Y;
Z1=
[ x11*y11 + x12*y21, x11*y12 + x12*y22, x11*y13 + x12*y23]
[ x21*y11 + x22*y21, x21*y12 + x22*y22, x21*y13 + x22*y23]
[ x31*y11 + x32*y21, x31*y12 + x32*y22, x31*y13 + x32*y23]
Z2=
[ y11*conj(x11), y12*conj(x21), y13*conj(x31)]
[ y21*conj(x12), y22*conj(x22), y23*conj(x32)]
2.2 基本函数
- 三角函数:sin、cos、tan、cot、sec、csc、…
- 反三角函数:asin、acos、atan、acot、asec、acsc、…
- 指数函数:exp、log、log2、log10、sqrt
- 其他函数:abs、conj、real、imag
- rank、det、inv、eig、lu、qr、svd …
2.3 查找符号变量
- findsym(expr): 按字母顺序列出符号表达式 expr 中的所有符号变量
- findsym(expr, N) :按顺序列出 expr 中离 x 最近的 N 个符号变量 。
f=sym('2*w-3*y+z^2+5*a')
findsym(f)
ans =
a,w,y,z
2.4 符号表达式替换
- 用给定的数据替换符号表达式中的指定的符号变量
- subs(f,x,a) :用 a 替换字符函数 f 中的字符变量 x ;a 是可以是 数/数值变量/表达式 或 字符变量/表达式 。
f=z^2 + 5*a + 2*w - 3*y
f=subs(f,'z','z+2')
f=
(z+2)^2 + 5*a + 2*w - 3*y
2.5 符号矩阵
- 使用 sym 函数直接生成
A=sym('[1+x, sin(x); 5, exp(x)]')
- 将数值矩阵转化成符号矩阵
B=[2/3, sqrt(2); 5.2, log(3)];
C=sym(B)
- 符号矩阵中元素的引用和修改
A=sym('[1+x, sin(x); 5, exp(x)]');
A(1,2) % 引用
A(2,2)=sym('cos(x)') % 重新赋值
3.常见符号运算
3.1 因式分解
- factor(f):
syms x;
f=x^6+1;
factor(f)
ans =
[ x^2 + 1, x^4 - x^2 + 1]
- factor可以用于正整数的分解
3.2 函数展开
- 函数展开:expand(f)
- 多项式展开
syms x;
f=(x+1)^6;
expand(f)
ans =
x^6 + 6*x^5 + 15*x^4 + 20*x^3 + 15*x^2 + 6*x + 1
- 三角函数展开
syms x y;
f=sin(x+y);
expand(f)
ans =
cos(x)*sin(y) + cos(y)*sin(x)
3.3 合并同类项
- collect(f,v): 按指定变量 v 进行合并
- collect(f): 按默认变量进行合并
syms x y;
f= x^2*y + y*x - x^2 + 2*x ;
collect(f)
ans =
(y - 1)*x^2 + (y + 2)*x
collect(f,y)
ans =
(x^2 + x)*y - x^2 + 2*x
3.4 函数简化
- y=simple(f): 对 f 尝试多种不同的算法进行 简化,返回其中最简短的形式
- [How,y]=simple(f): y 为 f 的最简短形式 ,How 中记录的为简化过程中使用的方法。
syms x;
f=sin(x)^2 + cos(x)^2 ;
simplify(f)
ans =
1
3.5 分式通分
- [N,D]=numden(f): N 为通分后的分子,D 为通分后的分母
syms x y;
f=x/y+y/x;
[N,D]=numden(f)
N =
x^2 + y^2
D =
x*y
3.6 多项式
- horner 多项式:嵌套形式的多项式
syms x;
f=x^4+2*x^3+4*x^2+x+1;
g=horner(f)
g =
x*(x*(x*(x + 2) + 4) + 1) + 1
3.7 计算极限
- limit(f,x,a): 计算 lim x → a f ( x ) \lim_{x\to a}f(x) limx→af(x)
- limit(f,a): 当默认变量趋向于 a 时的极限
- limit(f): 计算 a=0 时的极限
- limit(f,x,a,‘right’): 计算右极限
- limit(f,x,a,‘left’): 计算左极限
- 示例:计算 L = lim h → 0 l n ( x + h ) − l n ( x ) h L=\lim_{h\to 0}\frac{ln(x+h)-ln(x)}{h} L=limh→0hln(x+h)−ln(x), M = lim n → ∞ ( 1 − x n ) M=\lim_{n\to\infty }(1-\frac{x}{n}) M=limn→∞(1−nx)n
syms x h n;
L=limit((log(x+h)-log(x))/h,h,0)
L =
1/x
M=limit((1-x/n)^n,n,inf)
M =
exp(-x)
3.8计算导数
- g=diff(f,v):求符号表达式 f 关于 v 的导数
- g=diff(f):求符号表达式 f 关于默认变量的导数
- g=diff(f,v,n):求 f 关于 v 的 n 阶导数
syms x;
f=sin(x)+3*x^2;
g=diff(f,x)
g =
6*x + cos(x)
3.9计算积分
- int(f,v,a,b): 计算定积分 ∫ a b f ( v ) d v \int_a^b{f(v)dv} ∫abf(v)dv
- int(f,a,b): 计算关于默认变量的定积分
- int(f,v): 计算不定积分 ∫ f ( v ) d v \int{f(v)dv} ∫f(v)dv
- int(f): 计算关于默认变量的不定积分
- 示例:计算 I = ∫ x 2 + 1 x 2 − 2 x + 2 d x I=\int\frac{x^2+1}{x^2-2x+2}{dx} I=∫x2−2x+2x2+1dx, K = ∫ 0 ∞ e − x 2 d x K=\int_0^\infty{e^{-x^2}dx} K=∫0∞e−x2dx
syms x;
f=(x^2+1)/(x^2-2*x+2)^2;
I=int(f,x)
I =
(3*atan(x - 1))/2 + (x/2 - 3/2)/(x^2 - 2*x + 2)
K=int(exp(-x^2),x,0,inf)
K =
pi^(1/2)/2
3.10符号求和
- symsum(f,v,a,b): 求和 ∑ v = a b f ( v ) \displaystyle\sum_{v=a}^{b} f(v) v=a∑bf(v)
- symsum(f,a,b): 关于默认变量求和
- 示例:计算级数 S = ∑ n = 1 ∞ 1 n 2 S=\displaystyle\sum_{n=1}^{\infty}\frac{1}{n^2} S=n=1∑∞n21及其前100项的部分和 .
syms n;
f=1/n^2;
S=symsum(f,n,1,inf)
S =
pi^2/6
S100=symsum(f,n,1,100)
S100 =
1589508694133037873112297928517553859702383498543709859889432834803818131090369901/972186144434381030589657976672623144161975583995746241782720354705517986165248000
3.11 代数方程求解
- solve(f,v):求方程关于指定自变量的解,f 可以是 用字符串表示的方程、符号表达式或符号方程;
- solve 也可解方程组(包含非线性);
- 得不到解析解时,给出数值解
3.12 微分方程求解
- y=dsolve(‘eq1’,‘eq2’, … ,‘cond1’,‘cond2’, … ,‘v’)
- 其中 y 为输出的解, eq1、eq2、. . . 为微分方程, cond1、cond2、…为初值条件, v 为自变量 。
- 示例:求微分方程 d y a x + 2 x y = x e − x 2 \frac{dy}{ax}+2xy=xe^{-x^2} axdy+2xy=xe−x2的通解,并验证。
y=dsolve('Dy+2*x*y=x*exp(-x^2)','x')
syms x;
diff(y)+2*x*y - x*exp(-x^2)
y =C1*exp(-x^2) + (x^2*exp(-x^2))/2
ans =2*x*(C1*exp(-x^2) + (x^2*exp(-x^2))/2) - x^3*exp(-x^2) - 2*C1*x*exp(-x^2)
- 微分方程中用 D 表示对 自变量 的导数,如: Dy y’; D2y y’’; D3y y’’’
- 如果省略初值条件,则表示求通解;
- 如果省略自变量,则默认自变量为 t
- 若找不到解析解,则返回其积分形式。
- 示例:求微分方程 x y ′ + y − e x = 0 xy'+y-e^x=0 xy′+y−ex=0满足初值条件y(1)=2e的特解,并画出解函数的图形。
y=dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)', 'x')
y =
(exp(1) + exp(x))/x
ezplot(y);
3.13 反函数
- finverse(f,v):求 f 关于指定变量 v 的反函数
- finverse(f):求 f 关于默认变量的反函数
- 计算函数 f = x 2 + 2 t f=x^2+2t f=x2+2t的反函数
syms x t;
f=x^2+2*t;
g1=finverse(f,x)
g2=finverse(f,t)
g1 =(x - 2*t)^(1/2)
g2 =- x^2/2 + t/2
4.总结
对MATLAB符号运算的学习笔记就分享到这儿,下一篇就介绍MATLAB的程序设计,也是我们最核心的学习重点,作者知识浅陋,如有错误之处,不吝赐教。