符号对象的建立
符号对象的建立:sym 和 syms
sym 函数用来建立单个符号变量,一般调用格式为:符号变量 = sym(A) 参数 A 可以是一个数或数值矩阵,也可以是字符串
例如:a=sym('a') a 是符号变量
b=sym(1/3) b 是符号常量
C=sym('[1 ab; c d]') C 是符号矩阵
syms 命令用来建立多个符号变量,一般调用格式为:
syms 符号变量1 符号变量2 ... 符号变量n
syms a b c; 等价
>> a=sym('a');
>> b=sym('b');
>> c=sym('c');
建立符号表达式通常有以下2种方法:
(1) 用 sym 函数直接建立符号表达式。
(2) 使用已经定义的符号变量组成符号表达式。
例如: y=sym('sin(x)+cos(x)')
>> x=sym('x');
>> y=sin(x)+cos(x)
>> syms x;
>> y=sin(x)+cos(x)
符号表达式的替换
用给定的数据替换符号表达式中的指定的符号变量
subs(f,x,a)
用 a 替换字符函数 f 中的字符变量 x
a 是可以是 数/数值变量/表达式 或 字符变量/表达式
若 x 是一个由多个字符变量组成的数组或矩阵,
则 a 应该具有与 x 相同的形状的数组或矩阵。
>> f=sym('2*u');
>> subs(f,'u',2)
>> f2=subs(f,'u','u+2')
>> a=3;
>> subs(f2,'u',a+2)
>> subs(f2,'u','a+2')
>> syms x y
>> f3=subs(f,'u',x+y)
>> subs(f3,[x,y],[1,2])
符号矩阵
使用 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) % 引用
因式分解
factor() 也可用于正整数的分解
>> factor(sym('12345678901234567890')) l 大整数的分解要转化成符号常量
函数展开
expand(f)
l多项式展开
>> syms x; f=(x+1)^6;
>> expand(f)
三角函数展开
>> syms x y; f=sin(x+y);
>> expand(f)
合并同类项
collect(f,v): 按指定变量 v 进行合并
collect(f): 按默认变量进行合并
syms x y;
>> f= x^2*y + y*x - x^2 + 2*x ;
>> collect(f)
>> collect(f,y)
函数简化
y=simple(f): 对 f 尝试多种不同的算法进行简化,返回其中最简短的形式
[How,y]=simple(f): y 为 f 的最简短形式,How 中记录的为简化过程中使用的方法。
f |
R |
HOW |
2*cos(x)^2-sin(x)^2 |
3*cos(x)^2-1 |
simplify |
(x+1)*x*(x-1) |
x^3-x |
combine(trig) |
x^3+3*x^2+3*x+1 |
(x+1)^3 |
factor |
cos(3*acos(x)) |
4*x^3-3*x |
expand |
y=simplify(f): 对 f 进行简化
>> syms x; f=sin(x)^2 + cos(x)^2 ;
>> simplify(f)
>> syms c alpha beta;
>> f=exp(c*log(sqrt(alpha+beta)));
>> simplify(f)
>> syms x;
>> f=(1/x^3+6/x^2+12/x+8)^(1/3);
>> y1=simplify(f)
g1=simple(f)
>> g2=simple(g1)
l 多次使用 simple 可以达到最简表达。
分式通分
[N,D]=numden(f):
N 为通分后的分子,D 为通分后的分母
>> syms x y;
>> f=x/y+y/x;
>> [N,D]=numden(f)
>> [n,d]=numden(sym(112/1024))
horner 多项式
horner 多项式:嵌套形式的多项式
>> syms x;
>> f=x^4+2*x^3+4*x^2+x+1;
>> g=horner(f)
计算导数
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)
计算积分
int(f,a,b): 计算关于默认变量的定积分
int(f): 计算关于默认变量的不定积分
>> syms x; f=(x^2+1)/(x^2-2*x+2)^2;
>> I=int(f,x)
>> K=int(exp(-x^2),x,0,inf)
符号求和
symsum(f,a,b): 关于默认变量求和
例:计算级数 及其前100项的部分和
>> syms n; f=1/n^2;
>> S=symsum(f,n,1,inf)
>> S100=symsum(f,n,1,100)
微分方程求解
dsolve
y=dsolve('eq1','eq2', ... ,'cond1','cond2', ... ,'v')
其中 y 为输出的解, eq1、eq2、. . . 为微分方程,
cond1、cond2、...为初值条件, v 为自变量
>> y=dsolve('Dy+2*x*y=x*exp(-x^2)','x')
>> y= C2*exp(-x^2) + (x^2*exp(-x^2))/2
>> y=dsolve('x*Dy+y-exp(x)=0', ...
'y(1)=2*exp(1)', 'x')
>> ezplot(y);
下的特解,并画出解函数的图形。
[x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0', ...
'x(0)=1', 'y(0)=0', 't')
ezplot(x,y,[0,1.3]);