符号微积分计算
0.符号函数
>>syms x
>> f(x)=2*x
f(x) = 2*x
>> f(1)
ans = 2
>> g=2*x %g只是符号变量,可以用subs(函数计算数值解)
g = 2*x
>> g(1)
ans = 2*x
1.符号极限
limit()函数计算符号函数的极限,其格式如下:
- limit(F, x, a),计算符号表达式F在x→a条件下的极限;
- limit(F, a),计算符号表达式F中由默认自变量趋向于a条件下的极限;
- limit(F),计算符号表达式F在默认自变量趋向于0条件下的极限<>;
- limit(F, x, a, ‘right’) 和limit(F, x, a, ‘left’),计算符号表达式F在x→a条件下的右极限和左极限
>> syms x
>> f=sin(x)/x
f = sin(x)/x
>> limit(f,x,0)
ans = 1
>> g=1/x
g = 1/x
>> limit(g,x,0,'right')
ans = Inf
>> limit(g,x,0,'left')
ans = -Inf
>> syms a
>> h=(1+a/x)^x
h = (a/x + 1)^x
>> limit(h,x,inf)
ans = exp(a)
>> k=exp(-x)
k = exp(-x)
>> limit(k,x,inf)
ans = 0
2.求符号的微分
diff函数用来求符号微分,其格式如下:
- diff(S),求符号表达式S对于默认自变量的微分;
- diff(S, ‘v’),求符号表达式S对于自变量v的微分;
- diff(S, n),求符号表达式S对于默认自变量的n次微分;
- diff(S, ‘v’, n),求符号表达式S对于自变量v的n次微分
>> syms x
>> f=6*x^3+4*x^2+x-10
f = 6*x^3 + 4*x^2 + x - 10
>> diff(f)
ans = 18*x^2 + 8*x + 1
>> diff(f,'x',2)%对f的x变量进行二次微分
ans = 36*x + 8
>> syms a
>> f1=sin(a)
f1 =sin(a)
>> diff(f1,'a',1)
ans = cos(a)
>> diff(f1,'a',2)
ans = -sin(a)
%多变量下指定变量微分
>> f=7*exp(a*x)+8*x^4
f = 7*exp(a*x) + 8*x^4
>> diff(f,'a',1)
ans = 7*x*exp(a*x)
%微分之后
>> f=(1-x^3)/(1+x^4)
f = -(x^3 - 1)/(x^4 + 1)
>> simplify(diff(f,'x',1))
ans = -(x^2*(- x^4 + 4*x + 3))/(x^4 + 1)^2
>> simplify(diff(f,'x',2))
ans = -(2*x*(x^8 - 10*x^5 - 12*x^4 + 6*x + 3))/(x^4 + 1)^3
3.求符号的积分
int函数用来求解符号积分,其格式如下:
- int(S),求符号表达式S对于默认自变量的不定积分;
- int(S, ‘v’),求符号表达式S对于自变量v的不定积分;
- int(S, a, b),求符号表达式S对于默认自变量从a到b的定积分;
- int(S, ‘v’, a, b),求符号表达式S中自变量v计算从a到b的定积分
![ohsiz.png](https://e.im5i.com/2021/07/26/ohsiz.png)
>> f=(-2*x)/((1+x^2)^2)
f = -(2*x)/(x^2 + 1)^2
>> f(1) %不是函数,只是变量
ans = -(2*x)/(x^2 + 1)^2
>> int(f,'x')
%求不定积分
ans =1/(x^2 + 1)
>> clear x
>> syms x z
>> f(x,z)=x/(1+z)^2
f(x, z) = x/(z + 1)^2
>> f(1,z)
ans = 1/(z + 1)^2
>> f(1,1)
ans = 1/4
>> int(f,'x')
ans(x, z) = x^2/(2*(z + 1)^2)
>> int(f,'z')
ans(x, z) = -x/(z + 1)
>> f
f(x, z) = x/(z + 1)^2
>> g=x*log(1+x)
g = x*log(x + 1)
>> int(f,'x',0,1)
ans(z) = 1/(2*(z + 1)^2)
>> int(g,'x',0,1)
ans = 1/4
4.符号积分变换操作
常见的积分变换有傅里叶变换、拉普拉斯变换、z变换;
4.1 fourier变换及逆变换
傅里叶变换的定义:
>>syms x w
>>f=f(x) %要变换的函数
>>F=int(f(x)*exp(-j*w*x),'x',-inf,inf) %傅里叶变换的定义式
fourier变换函数格式:
F=fourier(f)
![okPvA.png](https://e.im5i.com/2021/07/26/okPvA.png)
函数f=f(x)为函数F(w)的逆Fourier变换,即F=F(w) → f=f(x)。
若F=F(x), ifourier(F)返回变量t的函数,即F=F(x) → f=f(t)。
f=ifourier(F, u),使函数f为变量u(u为标量符号对象)的函数
f=ifourier(F, v, u) 使F为变量v的函数,f为变量u的函数。
4.2 laplace 变换和逆变换
%F(t)是时域函数
L=laplace(F(t))
输出参量L=L(s)为有默认符号自变量t的标量符号对象F的Laplace变换,即F=F(t) → L=L(s)。若F =F(s),则fourier(F)返回变量为t的函数L,即F=F(s)→L=L(t)。
laplace(F, t),使函数L为变量t(t为标量符号自变量)的函数。
laplace(F, w, z),使函数L为变量z的函数,函数F为变量w的函数。
ilaplace函数用来求逆Laplace变换。其格式如下:
F=ilaplace(L(w))
输出参量F=F(t)为默认变量s的标量符号对象L的逆Laplace变换,即F=F(w) → f=f(x)。若L=L(t),则ifourier(L)返回变量为x的函数F,即F=F(x) → f=f(t)。
F=ilaplace(L, y),使函数F为变量y(y为标量符号对象)的函数。
F=ilaplace(L, y, x),使函数F为变量x的函数,函数L为变量y的函数
4.3 z变换
F=ztrans(f)
对默认自变量为n的函数f计算z变换。输出参量F为变量z的函数,即f=f(n) → F=F(z)。若函数f=f (z),则ztrans(f)返回一变量为w的函数,即f=f(z) → F=F(w)。
F=ztrans(f, w),用符号变量w代替默认的z作为函数F的自变量。
F=ztrans(f, k, w),对函数f中指定的符号变量k计算z变换。
f=iztrans(F)
输出参量f=f(n)为有默认变量z的单值符号函数F的逆z变换,即F=F(z) → f=f(n)。若F=F(n),则iztrans(F)返回变量为k的函数f(k),即F=F(n) → f=f(k)。
f=iztrans(F, k),使函数f为变量k(k为标量符号对象)的函数f(k)。
f=iztrans(F, w, k),使函数F为变量w的函数,函数f为变量k的函数。
5. 符号方程求解
5.1 代数方程求解
MATLAB的符号数学工具箱提供了solve函数对代数方程求解,其格式如下:
g=solve(eq),求解代数方程eq=0,自变量为默认自变量;
g=solve(eq, var),求解代数方程eq=0,自变量为var;
g=solve(eq1, eq2, …, eqn, var1, var2, …, varn)),求解符号表达式eq1, eq2, …, eqn组成的代数方程组,自变量分别为var1, var2,…, varn。方程组的解将存入结构变量g。
>> syms a b c x
>> f=a*x*x+b*x+c
f =
a*x^2 + b*x + c
>> solve(f)
ans =
-(b + (b^2 - 4*a*c)^(1/2))/(2*a)
-(b - (b^2 - 4*a*c)^(1/2))/(2*a)
>> solve(f,a)
ans =
-(c + b*x)/x^2
>> clear
>> syms x y z
>> who
您的变量为:
x y z
>> f=x^2-y*y+z-10
f =
x^2 - y^2 + z - 10
>> g=x+y-5*z
g =
x + y - 5*z
>> h=2*x-4y+z
h=2*x-4y+z
↑
错误: 不应为 MATLAB 表达式。
是不是想输入:
>> h=2*x-4*y+z
h =
2*x - 4*y + z
>> [x,y,z]=solve(lf,g,h)
未定义函数或变量 'lf'。
>> [x,y,z]=solve(f,g,h)
x =
- (19*2409^(1/2))/240 - 19/80
(19*2409^(1/2))/240 - 19/80
y =
- (11*2409^(1/2))/240 - 11/80
(11*2409^(1/2))/240 - 11/80
z =
- 2409^(1/2)/40 - 3/40
2409^(1/2)/40 - 3/40
>> s=solve(f,g,h)
s =
x: [2x1 sym]
y: [2x1 sym]
z: [2x1 sym]
>> s.x
ans =
- (19*2409^(1/2))/240 - 19/80
(19*2409^(1/2))/240 - 19/80
5.2 微分方程求解
dsolve函数用来求解微分方程,
r=dsolve('eq1,eq2,eq3,···','cond1,cond2,cond3,···','V')
求解由 ** “eq1, eq2, …”指定的微分方** 的符号解,
参数**“cond1,cond2, …”为指定常微分方程的边界条件或初始条件**
v为指定的自变量,若不指定,将采用“t”为默认自变量。
微分方程中用D表示一次微分,D2和D3分别表示二次及三次微分
D后的字符为因变量。
如果不指定边界条件,那么就返回通解
%example 1
>> dsolve('Dy=a*y')
ans =
C1*exp(a*t)
>> dsolve('Dy=a*y','y(0)=b','x')
ans =
b*exp(a*x)
%example 2
>> dsolve('D2y=-a^2*y')
ans =
C3*exp(a*t*1i) + C4*exp(-a*t*1i)
>> dsolve('D2y=-a^2*y','y(0)=1,Dy(pi/a)=0','x')
ans =
exp(-a*x*1i)/2 + exp(a*x*1i)/2
>> simplify(dsolve('D2y=-a^2*y','y(0)=1,Dy(pi/a)=0','x'))
ans =
cos(a*x)
%example 3
>> dsolve('D2y=x+Dy','y(0)=1','Dy(0)=0','x')
ans =
exp(x) - x - x^2/2
%example 4
>> [x,y]=dsolve('Dx=x+y,Dy=2*x')
x =
C10*exp(2*t) - (C9*exp(-t))/2
y =
C9*exp(-t) + C10*exp(2*t)