Matlab学以致用
Matlab 自学
一.用matlab的simulink做个模型
1.在matlab的命令窗口里输入Simulink,回车,打开Simulink的功能模块函数库窗口。
2.在功能模块函数库窗口,选择菜单File-New-Model,就可以打开一个空白设计区域。
3.在功能模块函数库窗口中双击“Sources”打开一个子函数库,用鼠标把“Sine wave”的图标拖到空白的设计区域;双击“Math”找到图标“Abs”,把它拖到空白设计区域;再双击“Sinks”把“Scope”图标拖两个到空白区域。
4.拖动鼠标,用线把它们的端口连接起来。分叉点通过按住【Ctrl】键再拖动鼠标就可以实现了。
5.最后保存设计的文件,然后选择设计区菜单中的“Simulink”,单击“Start”就可以仿真了。
二.matlab inline和function的区别 inline就是定义一个内置函数,本质上说跟function干的是一样的事,只不过它可以直接内嵌在命令行里,不用另外单独定义function.
想定义什么都可以。
g = inline('t^2')
g = inline('sin(2*pi*f + theta)')
g = inline('sin(2*pi*f + theta)', 'f', 'theta')
而function需要单独定义保存后,再调用定义的函数。
三.matlab中syms什么意思?
定义一个符号变量:
syms x
定义一个符号变量x
后续可以做一些符号操作,如:
p=x^2+3*x-2;
diff(p,x) %p对x求导
四.matlabnargin用法 nargin是用来判断输入变量个数的函数,这样就可以针对不同的情况执行不同的功能。通常可以用他来设定一些默认值,如下面的函数。
例子,函数test1的功能是输出a和b的和。如果只输入一个变量,则认为另一个变量为0,如果两个变量都没有输入,则默认两者均为0。
function y=test1(a,b)
ifnargin==0
a=0;b=0;
elseif nargin==1
b=0;
end
y=a+b;
五.Matlab mod的用法.
简单的说mod(a,b)就是求的是a除以b的余数。比方说
mod(100,3)=1,mod(17,6)=5
六.MATLAB中linspace函数的应用问题
linspace(x0,x1,n)
其中n代表的是点的数目,即分成n-1等分。
步长应当是(x1-x0)/(n-1)
七Matlab作图
极坐标图
polar函数用来绘制极坐标图,其调用格式为:
polar(theta,rho,选项)
其中theta为极坐标极角,rho为极坐标矢径,选项的内容与plot函数相似。
二维统计分析图
在MATLAB中,二维统计分析图形很多,常见的有条形图、阶梯图、杆图和填充图等,所采用的函数分别是:
bar(x,y,选项)
stairs(x,y,选项)
stem(x,y,选项)
fill(x1,y1,选项1,x2,y2,选项2,…)
compass 用来绘制相量图。
三维曲面
1.产生三维数据
在MATLAB中,利用meshgrid函数产生平面区域内的网格坐标矩阵。其格式为: x=a:d1:b; y=c:d2:d;
[X,Y]=meshgrid(x,y);
语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素的个数,矩阵
Y的每一列都是向量y,列数等于向量x的元素的个数。
axis函数用来操作坐标轴对象的常用属性。
1.axis([xmin xmax ymin ymax])
设置当前坐标轴的x轴和y轴的范围。
2.axis([xmin xmax ymin ymax zmin zmax cmin cmax])
设置当前坐标轴的x轴、y轴和z轴的范围以及颜色刻度范围(见caxis)。
3.v=axis
返回一个行向量,向量中的元素包含x、y和z轴的刻度因子。v具有四个或六个元素,这取决于当前坐标轴是二维的还是三维的。返回值是当前坐标轴的XLim、YLim和ZLim属性的值。
4.axis auto
基于x、y和z的最大值和最小值来自动设置坐标轴的范围。用户可以只限定某一个坐标轴,如:axis 'auto x'用来限定x轴的范围;axis 'auto yz'用来限定y轴和z轴的范围。
5.axis manual和axis(axis)
将坐标轴的范围锁定为当前范围。如果打开了hold on命令,则后续的图形都使用同样的坐标范围。该函数设置XLimMode、YLimMode和ZLimMode属性为manual值。
6.axis tight
设置坐标轴的范围为数据的范围。
7.axis fill
设置坐标轴的范围以及PlotBoxAspectRatio属性。坐标轴将填充整个矩形局域。只有PlotBoxAspectRatioMode或DataAspectRatioMode属性值为 manual时,该方法才起作用。
8.axis ij
将坐标系的原点设置到左上角。i轴为垂直轴,正方向为从上到下。j轴为水平轴,正方向为从左到右。
9.axis xy
在默认的笛卡尔坐标系中绘制图形,坐标系的原点在左下角。x轴为水平坐标轴,正方向为从左到右;y轴为垂直坐标轴,正方向为从下到上。
10.axis equal
设置坐标轴的纵横比。各坐标轴都有相同的坐标单位。
11.axis image
功能与axis equal相同。只不多坐标轴的边框紧贴在数据的四轴。多用来显示图片。
12.axis squal
调整坐标系的x、y和z轴,使它们都有相同的长度。
13.axis vis3d
锁定坐标轴的纵横比。
14.axis normal
自动调节坐标轴的纵横比,从而是图形随窗口的形状而改变。
15.axis off
关闭所有坐标轴线、刻度标记和标签。
16.axis on
打开所有坐标轴线、刻度标记和标签。
17.axis(axes_handles,...)
将axis命令应用于指定的坐标轴对象。例如,下面的代码将两个坐标轴都设置为squal:
h1 = subplot(221);
h2 = subplot(222);
axis([h1 h2],'square')
18.[mode,visibility,direction] = axis('state')
如果XLimMode、YLimMode和ZLimMode都设置为auto,则mode的值为auto;如果XLimMode、YLimMode和ZLimMode中有一个的值设为manual,则mode的值为manual。
用于axis命令的关键字可以是多个,它们之间由空格分开,如:axis tight equal。后面的关键字将覆盖前面的关键字设置的属性。
3.标准三维曲面
sphere函数的调用格式为:
[x,y,z]=sphere(n)
cylinder函数的调用格式为:
[x,y,z]= cylinder(R,n)
MATLAB还有一个peaks 函数,称为多峰函数,常用于三维曲面的演示。
视点处理
MATLAB提供了设置视点的函数view,其调用格式为:
view(az,el)
其中az为方位角,el为仰角,它们均以度为单位。系统缺省的视点定义为方位
角-37.5°,仰角30°。
Matlab中 NAN的意思!
NAN Not A Number就是代表不是一个数据
经常用在下面两种情况
1.数据处理时,在实际工程中经常数据的缺失或者不完整,此时我们可以将那些缺失设置为nan,Matlab处理缺失的数据时就会跳过或者其他处理——这个是Matlab优越于其他语言的表现之一。另外但读取数据时,某个字符不是数据,那么Matlab自动将它认为nan处理
比如Matlab中提供的nanmean, nanmax, nanmin, nanstd, nansum, nanvar这么多函数可以处理包含nan的数据
2.还有就是绘图的时候,如果我们想挖掉一部分,那么nan就起作用了
比如我们要绘制z=x^2+y^2在[-10 10]区域的图形但是要挖掉x
z=x.^2+y.^2;
subplot(121)
mesh(x,y,z)
sel=x
z(sel)=nan;
subplot(122)
mesh(x,y,z)
6-10 用不同的插值方法计算在π/2点的值。
MATLAB中有一个专门的3次样条插值函数Y1=spline(X,Y,X1),其功能及使用方法与函数Y1=interp1(X,Y,X1,‘spline’)完全相同。
二维数据插值
在MATLAB中,提供了解决二维插值问题的函数interp2,其调用格式为:
Z1=interp2(X,Y,Z,X1,Y1,'method')
其中X,Y是两个向量,分别描述两个参数的采样点,Z是与参数采样点对应的函数值,X1,Y1是两个向量或标量,描述欲插值的点。Z1是根据相应的插值方法得到的插值结果。method的取值与一维插值函数相同。X,Y,Z也可以是矩阵形式。
同样,X1,Y1的取值范围不能超出X,Y的给定范围,否则,会给出“NaN”错误。
曲线拟合
在MATLAB中,用polyfit函数来求得最小二乘拟合多项式的系数,再用polyval函数按所得的多项式计算所给出的点上的函数近似值。
polyfit函数的调用格式为:
[P,S]=polyfit(X,Y,m)
函数根据采样点X和采样点函数值Y,产生一个m次多项式P及其在采样点的误差向量S。其中X,Y是两个等长的向量,P是一个长度为m+1的向量,P的元素为多项式系数。 polyval函数的功能是按多项式的系数计算x点多项式的值,将在6.5.3节中详细介绍。
曲线拟合
在MATLAB中,用polyfit函数来求得最小二乘拟合多项式的系数,再用polyval函数按所得的多项式计算所给出的点上的函数近似值。
polyfit函数的调用格式为:
[P,S]=polyfit(X,Y,m)
函数根据采样点X和采样点函数值Y,产生一个m次多项式P及其在采样点的误差向量S。其中X,Y是两个等长的向量,P是一个长度为m+1的向量,P的元素为多项式系数。
polyval函数的功能是按多项式的系数计算x点多项式的值,将在6.5.3节中详细介绍。
八.多项式计算
多项式的四则运算
1.多项式的加减运算
2.多项式乘法运算
函数conv(P1,P2)用于求多项式P1和P2的乘积。这里,P1、P2是两个多项式系数向量。 例6-16 求多项式x4+8x3-10与多项式2x2-x+3的乘积。
多项式相乘 (s^2 + 2s + 2)(s + 4)(s + 1)
解:>> w=conv([1,2,2],conv([1,4],[1,1]))
w =
1 7 16 18 8
>> P=poly2str(w,'s') %将w表示成多项式
P =
s^4 + 7 s^3 + 16 s^2 + 18 s + 8
多项式的导函数
对多项式求导数的函数是:
p=polyder(P):求多项式P的导函数
p=polyder(P,Q):求P·Q的导函数
[p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。 上述函数中,参数P,Q是多项式的向量表示,结果p,q也是多项式的向量表示。
矩阵多项式求值
polyvalm函数用来求矩阵多项式的值,其调用格式与polyval相同,但含义不同。polyvalm函数要求x为方阵,它以方阵为自变量求多项式的值。设A为方阵,P代表多项式x3-5x2+8,那么polyvalm(P,A)的含义是:
A*A*A-5*A*A+8*eye(size(A))
而polyval(P,A)的含义是:
A.*A.*A-5*A.*A+8*ones(size(A))
例6-20 仍以多项式x4+8x3-10为例,取一个2×2矩阵为自变量分别用polyval和
polyvalm计算该多项式的值。
代数多项式求值
polyval函数用来求代数多项式的值,其调用格式为:
Y=polyval(P,x)
若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。
例6-19 已知多项式x4+8x3-10,分别取x=1.2和一个2×3矩阵为自变量计算该多项式的值。
多项式求根
n次多项式具有n个根,当然这些根可能是实根,也可能含有若干对共轭复根。MATLAB提供的roots函数用于求多项式的全部根,其调用格式为:
x=roots(P)
其中P为多项式的系数向量,求得的根赋给向量x,即x(1),x(2),…,x(n)分别代表多项式的n个根。
线性方程组求解
7.1.1 直接解法
1.利用左除运算符的直接解法
对于线性方程组Ax=b,可以利用左除运算符“\”求解:
x=A\b
非线性方程组的求解
对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为: X=fsolve('fun',X0,option)
其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。optimset(‘Display’,‘off’)将设定Display选项为‘off’。
函数极值
MATLAB提供了基于单纯形算法求解函数极值的函数fmin和fmins,•它们分别用于单变量函数和多变量函数的最小值,其调用格式为:
x=fmin('fname',x1,x2)
x=fmins('fname',x0)
这两个函数的调用格式相似。其中fmin函数用于求单变量函数的最小值点。fname是被最小化的目标函数名,x1和x2限定自变量的取值范围。fmins函数用于求多变量函数的最小值点,x0是求解的初始值向量。
符号表达式的四则运算
符号表达式的加、减、乘、除运算可分别由函数symadd、symsub、symmul和symdiv来实现,幂运算可以由sympow来实现。
2.符号表达式的提取分子和分母运算
如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。其一般调用格式为:
[n,d]=numden(s)
该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。
符号表达式的因式分解与展开
MATLAB提供了符号表达式的因式分解与展开的函数,函数的调用格式为: factor(s):对符号表达式s分解因式。
expand(s):对符号表达式s进行展开。
collect(s):对符号表达式s合并同类项。
collect(s,v):对符号表达式s按变量v合并同类项。
符号表达式的化简
MATLAB提供的对符号表达式化简的函数有:
simplify(s):应用函数规则对s进行化简。
simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。
符号表达式与数值表达式之间的转换
利用函数sym可以将数值表达式变换成它的符号表达式。
函数numeric或eval可以将符号表达式变换成数值表达式
符号极限
limit函数的调用格式为:
(1) limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。
(2) limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a。
(3) limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。
(4) limit(f,x,a,'right'):求符号函数f的极限值。'right'表示变量x从右边趋近于a。
(5) limit(f,x,a,‘left’):求符号函数f的极限值。‘left’表示变量x从左边趋近于a。
syms a m x;
f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a);
limit(f,x,a)
ans =
(1/2*a*exp(sin(a))+1/2*a-exp(tan(a))+1)/a
极限2:
syms x t;
limit((1+2*t/x)^(3*x),x,inf)
ans =
exp(6*t)
极限3:
syms x;
f=x*(sqrt(x^2+1)-x);
limit(f,x,inf,'left')
ans =
1/2
极限4:
syms x;
f=(sqrt(x)-sqrt(2)-sqrt(x-2))/sqrt(x*x-4);
limit(f,x,2,'right')
ans =
-1/2
符号导数
diff函数用于对符号表达式求导数。该函数的一般调用格式为:
diff(s):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。
diff(s,'v'):以v为自变量,对符号表达式s求一阶导数。
diff(s,n):按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。 diff(s,'v',n):以v为自变量,对符号表达式s求n阶导数。
符号导数
diff函数用于对符号表达式求导数。该函数的一般调用格式为:
diff(s):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。
diff(s,'v'):以v为自变量,对符号表达式s求一阶导数。
diff(s,n):按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。 diff(s,'v',n):以v为自变量,对符号表达式s求n阶导数。
符号积分
符号积分由函数int来实现。该函数的一般调用格式为:
int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分。
int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分。
int(s,v,a,b):求定积分运算。a,b分别表示定积分的下限和上限。该函数求被积函数在区间[a,b]上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。
符号方程求解
符号代数方程求解
在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为: solve(s):求解符号表达式s的代数方程,求解变量为默认变量。
solve(s,v):求解符号表达式s的代数方程,求解变量为v。
solve(s1,s2,…,sn,v1,v2,…,vn):求解符号表达式s1,s2,…,sn组成的代数方程组,求解变量分别v1,v2,…,vn。
例9-9 解下列方程。
f=exp(x);
>>taylor(f,x,6,0)
ans =
x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1
符号方程求解
符号代数方程求解
在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为: solve(s):求解符号表达式s的代数方程,求解变量为默认变量。
solve(s,v):求解符号表达式s的代数方程,求解变量为v。
solve(s1,s2,…,sn,v1,v2,…,vn):求解符号表达式s1,s2,…,sn组成的代数方程组,求解变量分别v1,v2,…,vn。
syms x ;
>> s=x.^3+x;
>> solve(s,x)
ans =
-i
I
符号常微分方程求解
在MATLAB中,用大写字母D表示导数。例如,Dy表示y',D2y表示y'',Dy(0)=5表示y'(0)=5。D3y+D2y+Dy-x+5=0表示微分方程y'''+y''+y'-x+5=0。符号常微分方程求解可以通过函数dsolve来实现,其调用格式为:
dsolve(e,c,v)
该函数求解常微分方程e在初值条件c下的特解。参数v描述方程中的自变量,省略时
按缺省原则处理,若没有给出初值条件c,则求方程的通解。
dsolve在求常微分方程组时的调用格式为:
dsolve(e1,e2,…,en,c1,…,cn,v1,…,vn)
该函数求解常微分方程组e1,…,en在初值条件c1,…,cn下的特解,若不给出初值条件,则求方程组的通解,v1,…,vn给出求解变量。
dsolve('D3y+D2y+Dy-x+5=0')
ans =
C5 - x + t*(x - 5) + (C6*cos((3^(1/2)*t)/2))/exp(t/2) + (C7*sin((3^(1/2)*t)/2))/exp(t/2) + 5