符号微积分
微积分的数值计算方法只能求出以数值表示的近似解,而无法得到以函数形式表示的解析解。在MATLAB中,可以通过符号运算获得微积分的解析解。
符号极限
MATLAB中求函数极限的函数是limit,可用来求函数在指定点的极限值和左右极限值。对于极限值为没有定义的极限,MATLAB给出的结果为NaN,极限值为无穷大时,MATLAB给出的结果为Inf。limit函数的调用格式如下。limit:求量化交易数据接口,符号函数fff的极限值limx→aflim_{x oa}fx→alimf即计算当变量xxx趋近于常数aaa时,fff函数的极限值。limit:求量化交易数据接口,符号函数fff的极限值。由于没有指定符号函数fff的自变量,则使用该格式时,符号函数fff的变量为函数symvar确定的默认自变量,即变量xxx趋近于∞infty∞。limit:求符号函数fff的极限值。符号函数fff的变量为函数symvar确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0a=0a=0的情况。limit:求符号函数fff的极限值limx→a+lim_{x oa^{+}}x→a+lim‘right’表示变量xxx从右边趋近于aaa。limit:求符号函数fff的极限值limx→a−lim_{x oa^{-}}x→a−lim‘left’表示变量xxx从左边趋近于aaa。例如,我们求下列极限。limx→axm−amx−alim_{x oa}frac{sqrt[m]{x}-sqrt[m]{a}}{x-a}x→alimx−amx−malimx→0sin−sinxlim_{x o0}frac{sin-sin}{x}x→0limxsin−sinlimx→+∞xlim_{x o+infty}xx→+∞limxlimx→a+x−a+x−ax2−a2lim_{x oa^{+}}frac{sqrt{x}-sqrt{a}+sqrt{x-a}}{sqrt{x^{2}-a^{2}}}x→a+limx2−a2x−a+x−a程序如下:
>> syms a m x;
>> f=(x^(1/m)-a^(1/m))/(x-a);
>> limit(f,x,a) %求极限(1)
ans =
a^(1/m - 1)/m
>> f=(sin(a+x)-sin(a-x))/x;
>> limit(f) %求极限(2)
ans =
2*cos(a)
>> f=x*(sqrt(x^2+1)-x);
>> limit(f,x,inf,"left") %求极限(3)
ans =
1/2
>> f=(sqrt(x)-sqrt(a)+sqrt(x-a))/sqrt(x^{2}-a^{2});
>> limit(f,x,a,"right") %求极限(4)
ans =
1/(2*a)^(1/2)
符号导数
diff函数用于对符号表达式求导数,其调用格式如下。diff:没有指定变量和导数阶数,则系统按symvar函数指示的默认变量对符号表达式sss求一阶导数。diff:以vvv为自变量,对符号表达式sss求一阶导数。diff:按symvar函数指示的默认变量对符号表达式sss求nnn阶导数,nnn为正整数。dif:以vvv为自变量,对符号表达式sss求nnn阶导数。例如,我们求下列函数的导数。y=1+exy=sqrt{1+e^{x}}y=1+ex,求y′y"y′。y=xcosxy=xcosxy=xcosx,求y′′y""y′′、y′′′y"""y′′′。{x=acosty=bsintleft{egin{matrix}x=acost\y=bsintend{matrix} ight.{x=acosty=bsint,求yx′y"_{x}yx′、yy′y"_{y}yy′。z=xeyy2z=frac{xe^{y}}{y^{2}}z=y2xey,求zx′z"_{x}zx′、zy′z"_{y}zy′。z=fz=fz=f由方程x2+y2+z2=a2定义,x^{2}+y^{2}+z^{2}=a^{2}定义,x2+y2+z2=a2定义,求zx′z"_{x}zx′、zy′z"_{y}zy′。程序如下:
>> syms a b t x y z;
>> f=sqrt(1+exp(x));
>> diff(f) %求(1)。未指定求导变量和阶数。按默认规则处理
ans =
exp(x)/(2*(exp(x) + 1)^(1/2))
>> f=x*cos(x);
>> diff(f,x,2) %求(2)。求f对x的二阶导数
ans =
- 2*sin(x) - x*cos(x)
>> diff(f,x,3) %求(2)。求f对x的三阶导数
ans =
x*sin(x) - 3*cos(x)
>> f1=a*cos(t);
>> f2=b*sin(t);
>> diff(f2)/diff(f1) %求(3)。按照参数方程求导公式求y对x的导数
ans =
-(b*cos(t))/(a*sin(t))
>> (diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2))/(diff(f1))^3 %求(3)。按照参数方程求导公式求y对x的二阶导数
ans =
-(a*b*cos(t)^2 + a*b*sin(t)^2)/(a^3*sin(t)^3)
>> f=x*exp(y)*y^2;
>> diff(f,x) %求(4)。求z对x的偏导数
ans =
y^2*exp(y)
>> diff(f,y) %求(4)。求z对y的偏导数
ans =
2*x*y*exp(y) + x*y^2*exp(y)
>> f=x^2+y^2+z^2-a^2;
>> zx=-diff(f,x)/diff(f,z) %求(5)。
zx =
-x/z
>> zy=-diff(f,y)/diff(f,z) %求(5)。
zy =
-y/z
第5小题是一个隐函数fff自变量求偏导数的例子,可以通过以下公式求得:∂xi∂xj=−∂∂xjf∂∂xiffrac{partialx_{i}}{partialx_{j}}=-frac{frac{partial}{partialx_{j}}f}{frac{partial}{partialx_{i}}f}∂xj∂xi=−∂xi∂f∂xj∂f例如,我们求在曲线y=x3+3x−2y=x^{3}+3x-2y=x3+3x−2上哪一点的切线与直线y=4x−1y=4x-1y=4x−1平行。依题意,就是求曲线在哪一点的导数值为程序如下:
>> x=sym("x");
>> y=x^3+3*x-2; %定义曲线函数
>> f=diff(y); %对曲线求导数
>> g=f-4;
>> solve(g) %求方程f-4=0的根
ans =
-3^(1/2)/3
3^(1/2)/3
结果表明,在x=33x=frac{sqrt{3}}{3}x=33和x=−33x=-frac{sqrt{3}}{3}x=−33处的切线和指定直线平行。
符号积分
不管被积函数的形式如何,复杂程度怎样,采用数值积分法总可以求得以恶搞结果,尽管这种结果大部分情况下是近似的,但数值方法不能获得解析解,符号积分方法可以获得积分的解析结果。
1符号函数的不定积分
在MATLAB中,int函数用于求符号函数的不定积分,有以下两种调用格式。int:没有指定积分变量和积分阶数时,系统按symvar函数指示的默认变量对被积函数或符号表达式f求不定积分。int:以vvv为自变量,对被积函数或符号表达式fff求不定积分。例如,我们求下列不定积分。∫3dxint^{3}mathrm{d}x∫3dx。∫sin2xdxintsin^{2}xmathrm{d}x∫sin2xdx。∫eαtdxinte^{alphat}mathrm{d}x∫eαtdx。∫5xt1+x2dxintfrac{5xt}{1+x^{2}}mathrm{d}x∫1+x25xtdx。程序如下:
>> x=sym("x");
>> f=(3-x^2)^3;
>> int(f) %求(1)
ans =
- x^7/7 + (9*x^5)/5 - 9*x^3 + 27*x
>> f=sin(x)^2;
>> int(f) %求(2)
ans =
x/2 - sin(2*x)/4
>> syms alpha t;
>> f=exp(alpha*t);
>> int(f) %求(3)
ans =
exp(alpha*t)/alpha
>> f=5*x*t/(1+x^2);
>> int(f,t) %求(4)
ans =
(5*t^2*x)/(2*(x^2 + 1))
2符号函数的定积分
在MATLAB中,求符号函数的定积分也是使用int函数,其调用格式如下:
int(f,v,a,b)
其中,a、ba、ba、b分别表示定积分的下限和上限。该函数求被积函数fff在区间[a,b][a,b][a,b]上的定积分。aaa和bbb可以是两个具体的数,也可以是一个符号表达式,还可以是无穷。当函数fff关于变量xxx在闭区间[a,b][a,b][a,b]上可积时,函数返回一个定积分结果。当a、ba、ba、b中有一个是inf时,函数返回一个广义积分。当a、ba、ba、b中有一个符号表达式时,函数返回一个符号函数。例如,我们求下列定积分。∫12∣1−x∣dxint_{1}^{2}left|1-x ight|mathrm{d}x∫12∣1−x∣dx。∫−∞+∞11+x2dxint_{-infty}^{+infty}frac{1}{1+x^{2}}mathrm{d}x∫−∞+∞1+x21dx。∫23x310dxint_{2}^{3}frac{x^{3}}{^{10}}mathrm{d}x∫2310x3dx。∫2sinx4xtdtint_{2}^{sinx}frac{4x}{t}mathrm{d}t∫2sinxt4xdt。程序如下:
>> x=sym("x");
>> t=sym("t");
>> int(abs(1-x),1,2) %求(1)
ans =
1/2
>> f=1/(1+x^2);
>> int(f,-inf,+inf) %求(2)
ans =
pi
>> f=x^3/(x-1)^{10};
>> I=int(f,2,3) %求(3)
I =
138535/129024
>> double(I) %将上述符号结果转换为数值
ans =
1.0737
>> int(4*x/t,t,2,sin(x)) %求(4)
ans =
4*x*(log(sin(x)) - log(2))
文章为作者独立观点,不代表股票交易接口观点