目录
1.基础符号运算(主要包括符号表达式的定义、因式分解、求展开式、合并同类型)
例1.1(定义符号表达式,也就是数学上的一元函数或者多元函数)
1.基础符号运算(主要包括符号表达式的定义、因式分解、求展开式、合并同类型)
主要包含的命令如下:
syms:定义符号变量(此处注意,当定义多个符号变量是中间要用空格,不能用逗号,否则会报错,原因是用逗号隔开的是两条matlab语句,逗号右边相当于是显示一个未定义的变量。就会出错。)
vpa:任意精度计算
factor:因式分解
collect:合并同类项
expand:求展开式
numden:提取分子和分母
例1.1(定义符号表达式,也就是数学上的一元函数或者多元函数)
定义符号表达式 ,并求x=2,y=4时z的值。
syms x positive;%对数真数必须要大于0
syms y;%定义符号变量
z=x^2+exp(x+y)-y*log(x)-3;%定义符号表达式
n=subs(z,[x,y],[2,4]);%令x=2,y=4
vpa(n,6)%保留六位有效数字
result:
当然,这里也可以用函数句柄对象来进行计算。
z=@(x,y)x^2+exp(x+y)-y*log(x)-3;%定义函数句柄对象(可以加上“点运算”,有可能输入变量是矩阵。)
double(z(2,4))
运行结果:
例1.2(分解因式)
syms x;
y=x^4-5*x^3+5*x^2+5*x-6;
factor(y)
result :
例1.3(合并同类项)
syms x;
y=(x+1)^3+(x+1)^2+5*x-6;
collect(y)%合并同类项
result:
例1.4(求展开式)
syms x;
y=(x+1)^5;
expand(y)%合并同类项
result:
例1.5
求的分子和分母
syms x y;
f=1/(x^3-1)+1/(x^2+y+1)+1/(x+y+1)+8;
[a,b]=numden(f)%其中a为分子,b为分母
result:
2.符号微积分
2.1求极限
Matlab的函数库没有提供直接求函数极限的数值函数,但符号计算工具箱中提供了直接求函数极限的函数limit。
limit(f,x,a):求当x趋于常数a时符号函数f(x)的极限值,f是符号表达式或字符串表达式,x必须是符号变量 。
limit(f,a):求当x趋于a时符号函数f(x)的极限值
limit(f):求当x趋于0时符号函数f(x)的极限值
limit(f,x,a,’right’) :求当x从右边趋于a时符号函数f(x)的极限值
limit(f,x,a,’left’) :求当x从右边趋于a时符号函数f(x)的极限值
例2.1:
syms x;
f1=sin(x)/x;
f2=(tan(x)-sin(x))/x^3;
limit(f1, x,0)
limit(f2,x,0)
result:
2.2符号级数求和
symsum(S,v,a,b) :求符号表达式S当v从a到b时的级数和。
例2.2
syms n x;
f1=1/2^n;
f2=1/n^2;
f3=x^n/(n*2^n);
r1=symsum(f1,n,1,inf)
r2=symsum(f2,n,1,inf)
r3=symsum(f3,n,1,inf)
disp('r1=',r1)
disp('r2=',r2)
disp('r3=',r3)
result:
2.3 符号微分
diff(f):求符号表达式f关于自由变量的一阶导数
diff(f,n):求f关于自由变量的n阶导数 ,自由变量由findsym(f,1)确定。
diff(f,v):求f关于自由变量v的一阶导数
diff(f,v,n):求f关于自由变量v的n阶导数
f可以是符号表达式或字符串表达式,v可以是变量名字符串或符号变量。
例2.3(求导数)
例2.4 求偏导数
syms x y
u=x*log(x+y);
d1=diff(u,x,2)
d2=diff(u,y,2)
d3=diff(diff(u,x),y)
result:
2.4符号积分
函数int既可求定积分,也可求不定积分。
int(S,v,a,b) :求符号表达式S关于变量v 在区间[a,b]上的定积分
int(S,v) :求符号表达式S关于变量v 的不定积分。
当v省略时,自动由findsym(S,1) 确定。
例2.5 计算下列不定积分
%% 1)
syms x
y=x^2*asin(x);
int(y,x)
result:
%% 2)
syms x
y=x^2/(x+1);
int(y,x)
result:
%% 3)
syms x
y=sin(2*x)/sqrt(1+sin(x)^2);
int(y,x)
result:
例2.6
syms x;
y1=sin(log(x));
y2=x^3*sin(x)^2/(x^4+2*x^2+1);
y3=sqrt(sin(x)^3-sin(x)^5);
r1=double(int(y1,x,1,exp(1)));
r2=double(int(y2,x,-1,1));
r3=double(int(y3,x,0,pi));
disp('r1=')
disp(r1)
disp('r2=')
disp(r2)
disp('r3=')
disp(r3)
result:
2.5泰勒展开
在Matlab中,可以利用函数taylor对函数进行泰勒级数展开,基本格式为:
Taylor(f,x,a) :对f关于x在a点进行5阶泰勒展开
Taylor(f,x) :对f关于x在0点进行5阶泰勒展开
Taylor(f,x,a,'Order',n+1) :对f关于x在a点进行n阶泰勒展开
例2.7求 y=x*log(1+x)的6次麦克劳林展开式
syms x;
y=x*log(1+x);
taylor(y,x,0,'Order',7)
result:
3.符号方程求解
3.1代数方程求解(可用help参考matlab帮助文档)
S = solve(eqn,var)
S = solve(eqn,var,Name,Value)
Y = solve(eqns,vars)
Y = solve(eqns,vars,Name,Value)
[y1,...,yN] = solve(eqns,vars)
[y1,...,yN] = solve(eqns,vars,Name,Value)
[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true)
例3.1 求解方程sinx=1。
syms x
eqn = sin(x) == 1;
solx = solve(eqn,x)
我们知道sinx=1有无穷多个解,此时需要指定'ReturnConditions'为true
[solx, params, conds] = solve(eqn, x, 'ReturnConditions', true)
例3.2
syms u v w y z;
f1=u*y^2+v*z+w;
f2=y+z+w;
[a,b]=solve([f1,f2],[y,z])
result:
3.2微分方程求解
dsolve ('eqn1', ..., 'eqnN', 'cond1', …,'condN‘, 'var1‘,..., 'varN')
功能:求微分方程组eqn1,…,eqnN的通解,cond1,…,condN为初值或边值条件, var1,..., varN为独立变量(待求函数的自变量),缺省情况下独立变量为t.
注意:微分方程在输入时,y’应输入Dy, y’’应输入D2y,…, D应大写。
例如:dsolve(‘Dx=-a*x’) %ans=C1/exp(a*t)
dsolve('Dx=-a*x', 'x(0)=1', 's') %ans=1/exp(a*s)
S=dsolve('Df=f+g', 'Dg=-f+g', 'f(0)=1', 'g(0)=2')
dsolve('Df=f+sin(t)', 'f(pi/2)=0')
例3.3求解下列微分方程
syms y(x);
f=diff(y,x,2)+3*diff(y,x,1)+3*exp(x);
y=dsolve(f,x)
result:
syms y(x);
f=diff(y,x,2)-exp(2*y)*diff(y,x,1);
y=dsolve(f,x)
result:
例3.4
syms y(x);
s=dsolve('(x^2-1)*Dy+2*x*y-cos(x)','y(0)=1',x)
result:
syms x(t) n a x0 v0;
dsolve('D2x+2*n*Dx+a^2*x','x(0)=x0','Dx(0)=v0',t)
result:
ans =
(exp(-t*(n - (-(a + n)*(a - n))^(1/2)))*(v0 + n*x0 + x0*(-(a + n)*(a - n))^(1/2)))/(2*(-(a + n)*(a - n))^(1/2)) - (exp(-t*(n + (-(a + n)*(a - n))^(1/2)))*(v0 + n*x0 - x0*(-(a + n)*(a - n))^(1/2)))/(2*(-(a + n)*(a - n))^(1/2))