教你用matlab快速解决烦人的高数的微积分问题(这棵树数虽高,看了这个你肯定挂不上去),非常全面,爆肝推荐!!!

目录

1  极限和导数的符号计算

1 函数的极限

2 函数的微分

1 函数:diff

2 函数:jacobian

3 函数:polyder

4 函数:fminsearch

5 函数:taylor

2  序列/ 级数的符号求和

3  符号积分

1 符号函数的不定积分

函数:int

2 符号函数的定积分

函数:int

4 阿基米德(Archimedes)螺线


你是不是对高数很厌烦,是不是看到他就害怕就发憷,你曾经或者是不是现在已经挂在这颗树上。。。。

哈哈啊啊啊啊 : : :作为过来人同样也有这样的感受

不要担心,现在教你用matlab去做题,分分钟解决它 !!!!

分享一个学习高数的小技巧:高数这种课就上要善于做笔记,每种题型记一个例题,多看看或者考前看看就好了!

完稿:2020年5月31日17:04

作者:wyj

地点:略

1  极限和导数的符号计算

1 函数的极限

函数:limit

功能:求取函数的极限

语法:

      limit(f):指表达式f中自变量趋于0时的极限

      limit(f,x,a):指表达式f中自变量x趋于a时的极限

      limit(f,x,a,'right'):指表达式f中自变量x趋于a时的右极限

      limit(f,x,a,'left'):表达式f中自变量x趋于a时的左极限

注:如果y=f(a,b,c,……)要求a→n1,b→n2,c→n3……(n1,n2,n3……代表某个数字)时y的极限时,可以依次求其极限来获得最终结果

【例 1】试求 \lim_{x\to \infty }\left ( 1-\frac{1}{x} \right )^{kx}.

matlab 代码:

syms x k
Lim_f=limit((1-1/x)^(k*x),x,inf)

运行结果;

Lim_f = exp(-k)

【例 2】试求 \lim_{x\to 1^{+} }\left ( \frac{1}{xln^{2}x}-\frac{1}{(x-1)^{2}} \right )

matlab代码:

syms x;

y=1/(x*(log(x))^2)-1/(x-1)^2;  %log即ln

limit(y,x,1,'right')

运行结果:

ans =

1/12

 

2 函数的微分

1 函数:diff

功能:求取函数的微分

语法:

       diff(f):求表达式f对默认自变量的一次微分值

       diff(f,x):求表达式f对自变量x的一次积分值

       diff(f,n):求表达式f对默认自变量的n次微分值

       diff(f,t,n):求表达式f对自变量t的n次微分值

求矩阵的偏导数:

【例 1】已知  f=\begin{bmatrix} a & t^{3}\\ tcosx&lnx \end{bmatrix} ,求 \frac{df}{dx},\frac{d^{2}f}{dt^{2}},\frac{d^{2}f}{dtdx}

matlab 代码:

syms a t x;
f=[a,t^3;t*cos(x), log(x)];
df=diff(f)
dfdt2=diff(f,t,2)
dfdxdt=diff(diff(f,x),t)

运行结果:

df =
[ 0, 0]
[ -t*sin(x), 1/x]
dfdt2 =
[ 0, 6*t]
[ 0, 0]
dfdxdt =
[ 0, 0]
[ -sin(x), 0]

求复合函数的导数

【例 2】求的导数.

matlab代码:

sym('x');
y = 'x*f(x^2)'
y1 = diff(y,'x')

运行结果:

y1 = 
 
f(x^2)+2*x^2*D(f)(x^2)

【例 3】已知f(x)=sin|x|,求 f_{x}^{'}(0),f_{x}^{'}(x)

%代码(1)
clear
syms x
syms d positive
f_p=sin(x); 
df_p=limit((subs(f_p,x,x+d)-f_p)/d,d,0) 
df_p0=limit((subs(f_p,x,d)-subs(f_p,x,0))/d,d,0) 
%运行结果(1)
df_p =
cos(x)
df_p0 =
1

%代码(2)
f_n=sin(-x);
df_n=limit((f_n-subs(f_n,x,x-d))/d,d,0)
df_n0=limit((subs(f_n,x,0)-subs(f_n,x,-d))/d,d,0)  
%运行结果(2)
df_n =
-cos(x)
df_n0 =
-1

%代码(3)
f=sin(abs(x));
dfdx=diff(f,x) 
%运行结果(3)
dfdx =
cos(abs(x))*abs(1,x)

画图:

xn=-3/2*pi:pi/50:0;
xp=0:pi/50:3/2*pi;
xnp=[xn,xp(2:end)];
hold on
plot(xnp,subs(f,x,xnp),'k','LineWidth',2.5) 
plot(xn,subs(df_n,x,xn),'--r','LineWidth',2.5) 
plot(xp,subs(df_p,x,xp),':r','LineWidth',2.5)
legend(char(f),char(df_n),char(df_p),'Location','NorthEast')
grid on
xlabel('x')
hold off

结果:

求参数方程的导数

【例 4】对参数方程求导.

matlab 代码:

syms a b t
f1 = a*cos(t);
f2 = b*sin(t);
A = diff(f2)/diff(f1) %此处代入了参数方程的求导公式
B = diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2)/diff(f1)^3  %求二阶导数

运行结果:

求隐函数的导数

【例 5】求的一阶导数

matlab代码:

syms x y
p = 'x*y(x)-exp(x+y(x))'
%隐函数可进行整体表示
%注意y(x)这种写法,它代表了y是关于x的函数
p1 = diff(p,x)

运行结果:

2 函数:jacobian

功能:求Jacobian matrix 雅可比矩阵

语法:jacobian(f,v)

描述:jacobian(f,v) 计算了 f 关于 v 的雅可比矩阵

输入参数说明

         f — 标量或者向量函数,符号表达式、符号函数、符号向量等。 如果f是一个标量的话,f 的雅可比矩阵是 f 的梯度的转置。

         v — 要计算雅可比的变量向量,符号变量、符号向量。如果v 是一个标量,则结果等价于 diff(f,v) 的转置。如果v 是空符号对象,比如sym([ ]),则结果返回空符号对象。

【例 6】求 

matlab代码:

syms x1 x2;
f=[x1*exp(x2);x2;cos(x1)*sin(x2)];
v=[x1 x2];
fjac=jacobian(f,v)

运行结果:

fjac =
[ exp(x2), x1*exp(x2)]
[ 0, 1]
[ -sin(x1)*sin(x2), cos(x1)*cos(x2)]

3 函数:polyder

功能:对多项式或有理多项式求导

语法:polyder(A)

说明:A为多项式矩阵,对A求导。 

【例 7】对 f(x)=x^{4}+2x^{3}+3x^{2}+1 求导.

matlab 代码:

A = [1,2,3,0,1]  %写出多项式矩阵,中间缺幂次的用0补全
                 %注意一定要从高次写到低次,不能漏项
p = polyder(A)  %此处求得的结果也是多项式矩阵

运行结果:

p = 

4x^3+6x^2+6x

4 函数:fminsearch

功能:从某一初始值开始,找到一个标量函数的最小值

语法:x= fminsearch(fun,x0)

说明:从x0开始,找到函数fun的局部最小值

【例 8】函数f(x)=x^{2}+4,求x取值为多大时,y有局部最小值。

matlab 代码:

x0 = -2;
a = fminsearch(@(x)(x^2+4),x0)

运行结果:

a = 0

5 函数:taylor

功能:taylor(求泰勒展开式)

语法:taylor(fcn,x,x0,'Order',6);

说明:对函数fcn在点x0处,进行6阶泰勒展开;

【例 9】求f(x)=xe^{x}在 x=0 处展开的 8 阶 Maclaurin 级数。

matlab 代码:

syms x
r=taylor(x*exp(x),9,x,0) % 忽略9阶及9阶以上小量的展开

运行结果:

r =
x+x^2+1/2*x^3+1/6*x^4+1/24*x^5+1/120*x^6+1/720*x^7+1/5040*x^8

2  序列/ 级数的符号求和

函数:symsum

功能:级数符号求和

语法:

        symsum(S):S为符号表达式,S相对于符号变量k的和,k取值从0到k-1

        symsum(S,V):指定S相对于变量V的和,V从0变到V-1

        symsum(S,a,b)和symsum(s,v,a,b):指定符号表达式从v=a累加到v=b

【例 1】求 

matlab 代码:

syms k t;
f1=[t k^3];
f2=[1/(2*k-1)^2,(-1)^k/k]; 
s1=simple(symsum(f1)) 
s2=simple(symsum(f2,1,inf))

运行结果:

s1 =
[ 1/2*t*(t-1), k^3*t]
s2 =
[ 1/8*pi^2, -log(2)]

3  符号积分

1 符号函数的不定积分

函数:int

功能:求取函数的不定积分

语法:

         int(f) :求函数f对默认自变量的积分值

         int(f,x):求自变量f对对自变量t的不定积分值

【例 1】求 

matlab 代码:

clear
syms x
f=sqrt((1+x)/x)/x
s=int(f,x)
s=simple(simple(s))

运行结果:

f =
((1+x)/x)^(1/2)/x
s =
((1+x)/x)^(1/2)/x*(-2*(x^2+x)^(3/2)+2*(x^2+x)^(1/2)*x^2+log(1/2+x+(x^
2+x)^(1/2))*x^2)/((1+x)*x)^(1/2)
s =
log(1/2+x+((1+x)*x)^(1/2))-2*((1+x)*x)^(1/2)/x

2 符号函数的定积分

函数:int

功能:求取函数的定积分

语法:

         int(f,a,b):求表达式f对默认自变量的定积分值,积分区间为[a,b]

         int(f,x,a,b):求表达式f对自变量x的定积分值,积分区间为[a,b]。

【例 2】求积分 

matlab 代码:

syms x y z
F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2)
VF2=vpa(F2)

运行结果:

F2 =
-6072064/348075*2^(1/2)+64/225*2^(3/4)+14912/4641*2^(1/4)+1610027357/
6563700
VF2 =
224.92153573331143159790710032805

4 阿基米德(Archimedes)螺线

【例】求阿基米德(Archimedes)螺线 ) r=a\cdot \theta 在 (a>0) 到 \theta =0\varphi的曲线长度函数,并求出a=1 , \varphi=2π时的曲线长度。

matlab代码:

%代码(1)
syms a r theta phi positive
x=r*cos(theta);x=subs(x,r,a*theta);
y=r*sin(theta);y=subs(y,r,a*theta);
dLdth=sqrt(diff(x,theta)^2+diff(y,theta)^2);
L=simple(int(dLdth,theta,0,phi))
%运行结果(1)
L =
1/2*a*(phi*(1+phi^2)^(1/2)+asinh(phi))

%代码(2)
L_2pi=subs(L,[a,phi],sym('[1,2*pi]'))
L_2pi_vpa=vpa(L_2pi)
%运行结果(2)
L_2pi =
pi*(1+4*pi^2)^(1/2)+1/2*asinh(2*pi)
L_2pi_vpa =
21.256294148209098800702512272566

画图:

L1=subs(L,a,sym('1'));
ezplot(L1*cos(phi),L1*sin(phi),[0,2*pi])
grid on 
hold on 
x1=subs(x,a,sym('1')); 
y1=subs(y,a,sym('1'));
h1=ezplot(x1,y1,[0,2*pi]);
set(h1,'Color','r','LineWidth',5)
title(' ')
legend(' 螺线长度- 幅角曲线',' 阿基米德螺线')
hold off 

结果:

猜你喜欢

转载自blog.csdn.net/ywsydwsbn/article/details/106456043