最适合小白的matlab教程系列_进阶系列二之微积分

微积分篇

    • 更多文章参考
    • 符号变量
    • 极限问题
    • 求导数
      • 求导数————偏导数
    • 积分--符号解
    • 积分数值解
    • 多重积分
    • 级数求和
    • 泰勒级数展开
    • 常微分方程

更多文章参考

最适合小白的matlab教程系列_基础系列三_矩阵与向量
最适合小白的matlab教程系列_基础系列四_基础代码
最适合小白的matlab教程系列_进阶系列一

符号变量

命名格式:
sym('var') %定义var为符号变量
sym('var',set) % 设置为实数或者正数
sym('var',dim) %定义var为符号矩阵
syms var1 var2...varn %定义多个符号变量

这东西,可以说很重要的了。
实例分析一:

定义符号变量x和y,将x设定为实数;y设置为正数

第一步来了:%创建符号变量x和y

x=sym('x');
y=sym('y');

第二步:%设置符号变量x为实属,y为正数

x=sym('x','real');
y=sym('y','positive');

在用的时候是没有必要分步的,直接用第二步的就行了,这里只是更明白点区别。

实例分析二
默认格式:>> M_mat=sym('M',[3,4])

M_mat =
[ M1_1, M1_2, M1_3, M1_4]
[ M2_1, M2_2, M2_3, M2_4]
[ M3_1, M3_2, M3_3, M3_4]

默认格式:>> M_mat=sym('N%d%d',[3,4])

M_mat =
[ N11, N12, N13, N14]
[ N21, N22, N23, N24]
[ N31, N32, N33, N34]

实例分析三

定义多个符号变量

>> syms a b c;
>> sym('f(a,b,c)');
>> f(a,b,c)=a+b+c
f(a, b, c) =
a + b + c

极限问题

极限 matlab中代码
lim(f(x)) x-0 limit(f)
limf(x) x-a limit(f,x,a)or limit(f,a)
lim f(x) x-a- limit(f,x,a,‘left’)
limf(x)x-a+ limit(f,x,a,‘right’)

实例分析
求limsin(x)/x x-0

>>sym x;
>>lim1 =limit(sin(x)/x)
lim1=1

求lim(sin(x+h)-sin(x))/h

>>syms x h;
>> Lim2=limit((sin(x+h)-sin(x))/h,h,0)
Lim2 =
cos(x)

lim2x/3x+1

>> sym x;
>> Lim3=limit(2*x/(3*x+1),x,inf)
Lim3 =
2/3

求导数

命名格式

diff(f) %f对预设独立变量的一阶导数
diff(f,'t') %f对预设’t’的二阶导数
diff(f,n) %f对预设独立变量的n阶导数
diff(f,'t',n) %f对预设’t’的n阶导数


实例分析
求f(x)=5x^3+3x关于x的一阶导数

>>f=sym('5*x^3+3*x');
>>diff(f)
ans =
15*x^2 + 3


求g(a)=4a方+3a关于a的三阶导数

>>syms a
>>g=sym('4*a^4+3*a');
>>diff(g,a,3)
ans=96*a

求导数————偏导数

h(x,y)=x2+y3+3xy的对x偏导和对y的二次

>> syms x y
>> h=sym('x^2+y^3+3*x*y');
>> diff_dx_1=diff(h,x)
diff_dx_1 =
2*x + 3*y
>> syms x y
>> h=sym('x^2+y^3+3*x*y');
>> diff_dy_2=diff(h,y,2)
diff_dy_2 =
6*y

求h=x2+y3+3xy求对x的对y的二阶

>> syms x y
>> h=sym('x^2+y^3+3*x*y');
>> diff(diff(h,'y'),'x')
ans =
3

积分–符号解

int(f) %f对预设独立变量求积分
int(f,'t') %f对预设变量t求积分
int(f,a,b) %f对预设独立变量在区间[a,b](数值)求积分
int(f,'t',a,b) %f对独立变量t在区间[a,b](数值求积分)
int(f,'m','n') %f对预设独立变量在区间m,n求积分
int(f,'t','m','n')%f对独立变量t在区间[m,n](符号)求积分

实例分析
求ax^2+bx+c dx

>>syms a b c x
>> f=sym('a*x^2+b*x+c');
>>int(f)
ans =
(a*x^3)/3 + (b*x^2)/2 + c*x

fsin(x)+2cos(y)dy(m-n)

f=sym('sin(x)+2*cos(y)');
int(f,y,m,n)
ans =
2*sin(n) - 2*sin(m) - sin(x)*(m - n)

求f0-1f0-1sin(x)+2cos(y)dxdy

>> syms x y
>> f=sym('sin(x)+2*cos(y)');
>> int(int(f,x,0,1),y,0,1)
ans =
2*sin(1) - cos(1) + 1

积分数值解

命名格式:
integral(fun,xmin,xmax)
integral(fun,xmin,xmax,Name,Value)
fun:函数句柄
xmin,xmax:积分范围
Name,Value:特殊选项的名称及其值

实例分析
求0-1f e^-2x dx

>>f=@(x)exp(-x.^2);
>>integral(f,0,1)
ans =
    0.7468

或者

g=sym('exp(-x.^2)');
  int(g,0,1)

添加条件
AbsTol 绝对误差
RelTol 相对误差
ArrayValued 数组值函数的标志
Waypoints 积分航点

实例分析
求f 0-1log(x)dx 绝对误差10^-12相对误差0

>> fun=@(x)log(x);
>> format long
>> integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)
>ans =
  -1.000000000000010

如果不加误差:

>> integral(fun,0,1)
ans =
  -1.000000010959678

求积分(航点设定)-----实例分析
求f 1/2z-1 dz航点设置0->1+i->1-i->0

>> fun=@(z) 1./(2*z-1);
>> q=integral(fun,0,0,'Waypoints',[1+i,1-i])
q =
  0.000000000000000 - 3.141592653589799i

求积分(数组)—实例分析
f(x)=[sinx,sin2x,sin3x,sin4x,sin5x],求区间[0,1]范围内的积分值

>> fun=@(x)sin((1:5)*x);
>> q=integral(fun,0,1,'ArrayValued',true)
q =
  120.459697694131860   0.708073418273571
  340.663330832200149   0.413410905215903
  50.143267562907355

多重积分

命名格式
二重积分 integral2(fun,xmin,xmax,ymin,ymax)
三重积分 integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax)
实例分析

求f-1-1f0-1f0-Π ysin(x)+zcos(x)dxdydz

>> fun=@(x,y,z)y.*sin(x)+z.*cos(x);
>> q=integral3(fun,0,pi,0,1,-1,1)
q =
   2.000000000000000

级数求和

命名格式symsum(expr,var).
.symsum(expr,var,a,b)
expr:关于var的表达式
var:自变量
a:该数列或级数所求和的起始项数
b:该数列或级数所求和的结束项数

实例分析
在没有给定ab的情况下,symsum(expr,var)会返回表达式s,s满足expr(var)=s(var+1)-s(var)

>> syms k
>> s=symsum(k)
s =
k^2/2 - k/2

symsum(expr,var,a,b)
求1/n!的累加和

>> syms n
>> f=1/sym('n!');
>> sn=symsum(f,n,0,inf)
sn =
exp(1)

泰勒级数展开

命令格式
taylor(f)
taylor(f,Name,Value)
taylor(f,v)
taylor(f,v,Name,Value)
taylor(f,v,a)
taylor(f,v,a,Name,Value)
f:符号表达式
v:符号变量
a:展开点,默认值为0

泰勒展开级数
taylor(f,v,a,Name,Value)
ExpansionPoint 指定展开点
Order 指定截断阶数n即表示求函数f(v)在v=a处的(n-1)阶泰勒级数
OrderMode 指定阶数模式

实例分析

求f(x)=tanx的麦克劳林级数

>> syms x
>> taylor(tan(x))
ans =
(2*x^5)/15 + x^3/3 + x

f(x)=log(x)在x=1处的泰勒级数

>> syms x
>> taylor(log(x),x,1)
ans =
x - (x - 1)^2/2 + (x - 1)^3/3 - (x - 1)^4/4 + (x - 1)^5/5 - 1

求f(x)=sinx/x的泰勒级数,指定截断阶数为6阶8阶10阶

syms x
f=sin(x)/x
t6=taylor(f,'order',6);
t8=taylor(f,'order',8);
t10=taylor(f,'order',10);

L1=ezplot(t6,[-10,10]);set(L1,'color','r','LineWidth',3);
hold on
L2=ezplot(t8,[-10,10]);set(L2,'color','b','LineWidth',3);
L3=ezplot(t10,[-10,10]);set(L3,'color','m','LineWidth',3);
L4=ezplot(f,[-10,10]);set(L4,'color','g','LineWidth',3);

legend('sin(x)/x截断6阶小量', 'sin(x)/x截断8阶小量','sin(x)/x截断10阶小量','sin(x)/x','location','Northeast')

title('泰勒级数展开')
hold off

最适合小白的matlab教程系列_进阶系列二之微积分_第1张图片

常微分方程

命名格式S=dsolve(eqn)
S=dsolve(eqn,cond)
eqn:符号表达式(等式)
cond:边界条件

实例分析
常微分方程----单个微分方程
求y’(t)=ty的通解

>> syms y(t)
>> y(t)=dsolve(diff(y,t)==t*y)
y(t) =
C1*exp(t^2/2)

或者

syms y(t) t
y(t)=dsolve('Dy=t*y')

求y’’-y’/x-xe^x=0的通解

>> syms x y
>> y=dsolve('D2y-Dy/x-x*exp(x)','x');
>> simplify(y)
ans =
C5 - exp(x) + C4*x^2 + x*exp(x)

d^3u /dx^3=u,u(0)=1,u’(0)=-1,u’’(0)=Π特解

>> syms u(x) x
>> u(x)=dsolve('D3u=u','u(0)=1','Du(0)=-1','D2u(0)=pi')
u(x) =
(pi*exp(t))/3 - exp(-t/2)*cos((3^(1/2)*t)/2)*(pi/3 - 1) - (3^(1/2)*exp(-t/2)*sin((3^(1/2)*t)/2)*(pi + 1))/3

常微分方程组
命名格式
[y1,yN]=dsolve(eqns)
[y1,yN]=dsolve(eqns,conds)
初学者建议使用以下命令格式
Z=dsolve(eqns)
Z=dsolve(eqns,conds)

eqns:符号 表达式
conds:边界条件
实例分析
求方程组x’(t)=y y’(t)=-x的通解

>> syms x(t) y(t)
>> [x,y]=dsolve(diff(x)==y,diff(y)==-x)
x =
C10*cos(t) + C9*sin(t)
y =
C9*cos(t) - C10*sin(t)

或者:

>> syms x(t)  y(t)
>> [x,y]=dsolve('Dx=y','Dy=-x')
x =
C10*cos(t) + C9*sin(t)
y =
C9*cos(t) - C10*sin(t)

求方程组x’(t)=x+2y+1 y’(t)=-x+y+t 的通解

syms  x(t)  y(t)
A=[1 2;-1 1];
B=[1;t];
Y=[x;y];
S=dsolve(diff(Y)==A*Y+B);
x=simplify(S.x);
y=simplify(S.y)

y =
C11*exp(t)*cos(2^(1/2)*t) - t/3 - C12*exp(t)*sin(2^(1/2)*t) - 2/9

你可能感兴趣的:(matlab)