最适合小白的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 =
1 至 2 列
0.459697694131860 0.708073418273571
3 至 4 列
0.663330832200149 0.413410905215903
5 列
0.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
命名格式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