matlab处理符号运算

文章详细介绍了如何使用MATLAB进行符号运算,包括定义符号表达式、因式分解、合并同类项、展开式计算以及求解分子和分母。此外,还阐述了符号微积分的相关操作,如求极限、级数求和、微分和积分,以及泰勒展开。最后,讨论了符号方程的代数和微分方程求解方法。
摘要由CSDN通过智能技术生成

目录

1.基础符号运算(主要包括符号表达式的定义、因式分解、求展开式、合并同类型)

例1.1(定义符号表达式,也就是数学上的一元函数或者多元函数)

例1.2(分解因式)

 例1.3(合并同类项)

例1.4(求展开式)

例1.5

 2.符号微积分

2.1求极限

 2.2符号级数求和

 2.3 符号微分

 2.4符号积分

 2.5泰勒展开

 3.符号方程求解

3.1代数方程求解(可用help参考matlab帮助文档)

3.2微分方程求解


1.基础符号运算(主要包括符号表达式的定义、因式分解、求展开式、合并同类型)

主要包含的命令如下:

syms:定义符号变量(此处注意,当定义多个符号变量是中间要用空格,不能用逗号,否则会报错,原因是用逗号隔开的是两条matlab语句,逗号右边相当于是显示一个未定义的变量。就会出错。)

vpa:任意精度计算

factor:因式分解

collect:合并同类项

expand:求展开式

numden:提取分子和分母

例1.1(定义符号表达式,也就是数学上的一元函数或者多元函数)

定义符号表达式 z=x^2+e^{x+y}-ylnx-3,并求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(分解因式)

x^4-5x^3+5x^2+5x-6

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(求展开式)

y=(x+1)^5

syms x;
y=(x+1)^5;
expand(y)%合并同类项

result:

例1.5

f(x,y)=\frac{1}{x^3-1}+\frac{1}{x^2+y+1}+\frac{1}{x+y+1}+8的分子和分母

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))
 

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值