第一篇:MATLAB总结与上机指南
化工计算中常用的MATLAB命令总结
化学工程中的计算问题一般比较复杂, 其操作的数据对象通常是数组, 具体计算涉及到插值、求积分、参数拟合、解常微分和偏微分微分方程、解线性和非线性方程等。MATLAB是新一代的科学计算语言, 在解决上述问题上, 相对于FORTRAN、C 和BASIC等传统的计算语言具有明显的优越性。本文针对应用MATLAB 解决化工中的典型问题进行计算常用方法和命令做以小结。1.最小二乘法拟合 1.1 最小二乘拟合直线
函数
lsline 格式
lsline
%最小二乘拟合直线
h = lsline
%h为直线的句柄 1.2约束线性最小二乘
有约束线性最小二乘的标准形式为
minx1Cxd222
sub.to
Axb
Aeqxbeq
lbxub
其中:C、A、Aeq为矩阵;d、b、beq、lb、ub、x是向量。在MATLAB5.x中,约束线性最小二乘用函数conls求解。
函数
lsqlin
格式
x = lsqlin(C,d,A,b)
%求在约束条件Axb下,方程Cx = d的最小二
乘解x。
x = lsqlin(C,d,A,b,Aeq,beq)
%Aeq、beq满足等式约束Aeqxbeq,若没有不等式约束,则设A=[ ],b=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
%lb、ub满足lbxub,若没有等
式约束,则Aeq=[ ],beq=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)
% x0为初始解向量,若x没有界,则lb=[ ],ub=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)
% options为指定优化参数 [x,resnorm] = lsqlin(…)
% resnorm=norm(C*x-d)^2,即2-范数。[x,resnorm,residual] = lsqlin(…)
%residual=C*x-d,即残差。
[x,resnorm,residual,exitflag] = lsqlin(…)
%exitflag为终止迭代的条件 [x,resnorm,residual,exitflag,output] = lsqlin(…)
% output表示输出优化
信息
[x,resnorm,residual,exitflag,output,lambda] = lsqlin(…)
% lambda为解x的Lagrange乘子
1.3 非线性最小二乘
非线性最小二乘(非线性数据拟合)的标准形式为
minxf(x)f1(x)2f2(x)2fm(x)2L
其中:L为常数
在MATLAB5.x中,用函数leastsq解决这类问题,在6.0版中使用函数lsqnonlin。
f1(x)f2(x) 设F(x)fm(x)则目标函数可表达为minx12F(x)221fi(x)2 2i其中:x为向量,F(x)为函数向量。函数
lsqnonlin 格式
x = lsqnonlin(fun,x0)
%x0为初始解向量;fun为fi(x),i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同。
lbxubx = lsqnonlin(fun,x0,lb,ub)
%lb、ub定义x的下界和上界:。
x = lsqnonlin(fun,x0,lb,ub,options)
%options为指定优化参数,若x没有界,则lb=[ ],ub=[ ]。
[x,resnorm] = lsqnonlin(…)% resnorm=sum(fun(x).^2),即解x处函数值。[x,resnorm,residual] = lsqnonlin(…)
% residual=fun(x),即解x处fun的值。[x,resnorm,residual,exitflag] = lsqnonlin(…)
%exitflag为终止迭代条件。[x,resnorm,residual,exitflag,output] = lsqnonlin(…)%output输出优化信息。[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(…)
%lambda为
Lagrage乘子。
[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(…)
%fun
在解x处的Jacobian矩阵。
多项式 2.1 多项式求值
函数名称:polyval 调用格式:y=polyval(p,x),[y,delta]=polyval(p,x,S)返回多项式p在x点处的取值。X可以是向量也可以是矩阵。[y,delta] = polyval(p,x,S)同时还生成误差估计。2.2 多项式求根
函数名称:roots 调用格式:r=roots(c)
返回一个元素为多项式c的根的列向量。行向量中包含按降幂排列的多项式的系数,如果c中包含n+1个元素,则多项式的表达式为:c1sn+…+cns+cn+1。3 插值 3.1 一维插值
函数名称:interp1 调用格式:yi=interp1(x,Y,xi), yi=interp1(x,Y,xi,method)MATLAB中有两类一维数据插值方法:多项式插值法和基于FFT的插值法。函数interp1采用多项式插值法,它用多项式拟合所给出的数据,然后在插值点上根据多项式算出相应的值。调用格式中,xi为需要插值的位置所组成的向量,yi 为根据插值算法求得的值所组成的向量。x,Y为已知的数据点向量。参数method用于确定具体的插值方法,包括:
‘linear’表示采用线性插值方法;‘cubic’表示采用三次插值的方法; ‘nearest’表示采用最近点插值法;‘spline’表示用三次样条插值方法。3.2 二维插值
函数名称:interp2 调用格式
ZI = interp2(X,Y,Z,XI,YI)
返回矩阵ZI,其元素包含对应于参量XI与YI(可以是向量、或同型矩阵)的元素,即Zi(i,j)←[Xi(i,j),yi(i,j)]。
ZI = interp2(Z,XI,YI)
缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按 ’nearest’:最临近插值; ’spline’:三次样条插值; ’cubic’:双三次插值。非线性数据(曲线)拟合
非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x, xdata),但不知道系数向量x。今进行曲线拟合,求x使得下式成立:
minx1F(x,xdata)ydata2221(F(x,xdatai)ydatai)2 2i在MATLAB5.x中,使用函数curvefit解决这类问题。函数
lsqcurvefit 格式
x = lsqcurvefit(fun,x0,xdata,ydata)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)[x,resnorm] = lsqcurvefit(…)[x,resnorm,residual] = lsqcurvefit(…)[x,resnorm,residual,exitflag] = lsqcurvefit(…)[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit(…)参数说明:
x0为初始解向量;xdata,ydata为满足关系ydata=F(x, xdata)的数据; lb、ub为解向量的下界和上界lbxub,若没有指定界,则lb=[ ],ub=[ ];
options为指定的优化参数;
fun为拟合函数,其定义方式为:x = lsqcurvefit(@myfun,x0,xdata,ydata),其中myfun已定义为
function F = myfun(x,xdata)F = …
% 计算x处拟合函数值fun的用法与前面相同; resnorm=sum((fun(x,xdata)-ydata).^2),即在x处残差的平方和; residual=fun(x,xdata)-ydata,即在x处的残差; exitflag为终止迭代的条件; output为输出的优化信息; lambda为解x处的Lagrange乘子;
jacobian为解x处拟合函数fun的jacobian矩阵。
数值积分
5.1 一元函数的数值积分
函数名称:
quad、quadl、quad8 调用格式 q = quad(fun,a,b)
%近似地从a到b计算函数fun的数值积分,误差为10。给fun输入向量x,应返回向量y,即fun是一单值函数。q = quad(fun,a,b,tol)
%用指定的绝对误差tol代替缺省误差。tol越大,函数计算的次数越少,速度越快,但结果精度变小。
q = quad(fun,a,b,tol,trace,p1,p2,…)
%将可选参数p1,p2,…等传递给函数fun(x,p1,p2,…),再作数值积分。若tol=[]或trace=[],则用缺省值进行计算。
[q,n] = quad(fun,a,b,…)%同时返回函数计算的次数n … = quadl(fun,a,b,…)
%用高精度进行计算,效率可能比quad更好。… = quad8(fun,a,b,…)
%该命令是将废弃的命令,用quadl代替。
5.2 一元函数的数值积分
函数名称:
dblquad 功能
矩形区域上的二重积分的数值计算
调用格式
q = dblquad(fun,xmin,xmax,ymin,ymax)
调用函数quad在区域[xmin,xmax, ymin,ymax]上计算二元函数z=f(x,y)的二重积分。输入向量x,标量y,则f(x,y)必须返回一用于积分的向量。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol)
用指定的精度tol代替缺省精度10-6,再进行计算。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method)
用指定的算法method代替缺省算法quad。method的取值有@quadl或用户指定的、与命令quad与quadl有相同调用次序的函数句柄。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method,p1,p2,…)
将可选参数p1,p2,..等传递给函数fun(x,y,p1,p2,…)。若tol=[],method=[],则使用缺省精度和算法quad。非线性方程组的解
非线性方程组的标准形式为:F(x)= 0 其中:x为向量,F(x)为函数向量。函数
fsolve 格式
x = fsolve(fun,x0)
用fun定义向量函数,其定义方式为:先定义方程函数function F = myfun(x)。
F =[表达式1;表达式2;…表达式m] 保存为myfun.m,并用下面方式调用:x =
-6fsolve(@myfun,x0),x0为初始估计值。
x = fsolve(fun,x0,options)[x,fval] = fsolve(…)
fval=F(x),即函数值向量 [x,fval,exitflag] = fsolve(…)[x,fval,exitflag,output] = fsolve(…)[x,fval,exitflag,output,jacobian] = fsolve(…)
jacobian为解x处的Jacobian阵。
其余参数与前面参数相似。7 常微分方程数值解
函数名称:ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb 功能
常微分方程(ODE)组初值问题的数值解 参数说明:
solver为命令ode45、ode23,ode113,ode15s,ode23s,ode23t,ode23tb之一。
Odefun 为显式常微分方程y’=f(t,y),或为包含一混合矩阵的方程M(t,y)*y’=f(t,y)。命令ode23只能求解常数混合矩阵的问题;命令ode23t与ode15s可以求解奇异矩阵的问题。
Tspan 积分区间(即求解区间)的向量tspan=[t0,tf]。要获得问题在其他指定时间点t0,t1,t2,…上的解,则令tspan=[t0,t1,t2,…,tf](要求是单调的)。
Y0 包含初始条件的向量。
Options 用命令odeset设置的可选积分参数。P1,p2,… 传递给函数odefun的可选参数。调用格式
[T,Y] = solver(odefun,tspan,y0)
在区间tspan=[t0,tf]上,从t0到tf,用初始条件y0求解显式微分方程y’=f(t,y)。对于标量t与列向量y,函数f=odefun(t,y)必须返回一f(t,y)的列向量f。解矩阵Y中的每一行对应于返回的时间列向量T中的一个时间点。要获得问题在其他指定时间点t0,t1,t2,…上的解,则令tspan=[t0,t1,t2,…,tf](要求是单调的)。
[T,Y] = solver(odefun,tspan,y0,options)%用参数options(用命令odeset生成)设置的属性(代替了缺省的积分参数),再进行操作。常用的属性包括相对误差值RelTol(缺省值为1e-3)与绝对误差向量AbsTol(缺省值为每一元素为1e-6)。
[T,Y] =solver(odefun,tspan,y0,options,p1,p2…)
将参数p1,p2,p3,..等传递给函数odefun,再进行计算。若没有参数设置,则令options=[]。
第二篇:Matlab上机报告
Matlab上机实习报告
这两周我们进行了Matlab的上机。为了熟练掌握Matlab的各种操纵,学会使用Matlab解决复杂矩阵的运算并学会用Matlab解决平差中的实际问题,我们以书上的例7-8为例,通过Matlab编程运行来解决这道题,以熟悉Matlab的各项操纵和编程。
首先,我对该题进行了分析,然后将解题思路和解题过程中需要的公式写在了草稿纸上,然后,我比照Matlab的正确语言将各项公式输进了Matlab中,进行调试运行的时候并没有一次就成功,因为分号等符号的不正确使用,矩阵输入的一些错误方式以及数据输入上的一些错误,一直没能能算出正确的结果,在进行了多次的调试改正后才最终得出了正确的结果。
通过这些天的上机实习,我学会了将矩阵正确输入Matlab 的方法、学会了利用Matlab进行复杂矩阵的转置、求逆等运算,也学会了一些Matlab专有语言如diag等的应用。可以说已经掌握了Matlab大概的功能,在以后的学习中,如果有需要用到Matlab的地方,我相信我也一定能好好使用Matlab来解决学习解题中遇到的问题。短短两周的实习很快结束。从这次实习中,我认识到了亲身实践是我们大学生活中很有用也很充实的一步,通过实习能学到课堂上学不到的一些东西。在课堂上我们仅仅知道该怎么去做,但没有亲自实践,只能靠想象,所以很多东西当时都很难理解,很多东西不经过实践就不会印象深刻。在上级之前,读过Matlab的相关书籍,觉得自己好像会了,但是在实际上机操纵过程中就会发现还是出现了很多这样或那样的问题。但是,经过上机的实践后,似乎就更容易理解其原理了,而且对其操纵与使用印象更深刻了。
总体来说,这几次实习我受益匪浅。在探索该如何运用Matlab课程算法实践过程中,培养了我的逻辑思维能力,增加了实际编程能力。让我在体会到分析实例与设计程序的艰辛的同时,也体会到了最后成功的喜悦。总而言之,这次Matlab的上机实习收获颇多,也让我深刻感受到,时间也是获得和掌握知识的一种好手段。
第三篇:MATLAB上机实践报告
clear all;
load('Hsoa2ib2.mat')
Hsoa2ib2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsoa2ib1.mat')
Hsoa2ib1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsoa1ib2.mat')
Hsoa1ib2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsoa1ib1.mat')
Hsoa1ib1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hscb2cb2.mat')
Hscb2cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hscb2cb1.mat')
Hscb2cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hscb1cb2.mat')
Hscb1cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hscb1cb1.mat')
Hscb1cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca2cb2.mat')
Hsca2cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca2cb1.mat')
Hsca2cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca2ca2.mat')
Hsca2ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca2ca1.mat')
Hsca2ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca1cb2.mat')
Hsca1cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca1cb1.mat')
Hsca1cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca1ca2.mat')
Hsca1ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca1ca1.mat')
Hsca1ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hoa2ca2.mat')
Hoa2ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hoa2ca1.mat')
Hoa2ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hoa1ca2.mat')
Hoa1ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hoa1ca1.mat')
Hoa1ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb2ib2.mat')
Hcb2ib2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb2ib1.mat')
Hcb2ib1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb2cb2.mat')
Hcb2cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb2cb1.mat')
Hcb2cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb1ib2.mat')
Hcb1ib2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb1ib1.mat')
Hcb1ib1=(a4+1i*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb1cb2.mat')
Hcb1cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb1cb1.mat')
Hcb1cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hca2ca2.mat')
Hca2ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hca2ca1.mat')
Hca2ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hca1ca2.mat')
Hca1ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hca1ca1.mat')
Hca1ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;
for k=2:401;w=2*pi*f
[Hcaca]=[Hca1ca1(k),Hca1ca2(k);Hca2ca1(k),Hca2ca2(k)]/(-w(k)^2);[Hcbcb]=[Hcb1cb1(k),Hcb1cb2(k);Hcb2cb1(k),Hcb2cb2(k)]/(-w(k)^2);[Hcbib]=[Hcb1ib1(k),Hcb1ib2(k);Hcb2ib1(k),Hcb2ib2(k)]/(-w(k)^2);[Hoaca]=[Hoa1ca1(k),Hoa1ca2(k);Hoa2ca1(k),Hoa2ca2(k)]/(-w(k)^2);
[Hscaca]=[Hsca1ca1(k),Hsca1ca2(k);Hsca2ca1(k),Hsca2ca2(k)]/(-w(k)^2);
[Hscacb]=[Hsca1cb1(k),Hsca1cb2(k);Hsca2cb1(k),Hsca2cb2(k)]/(-w(k)^2);
[Hscbcb]=[Hscb1cb1(k),Hscb1cb2(k);Hscb2cb1(k),Hscb2cb2(k)]/(-w(k)^2);
[Hsoaib]=[Hsoa1ib1(k),Hsoa1ib2(k);Hsoa2ib1(k),Hsoa2ib2(k)]/(-w(k)^2);KsD=inv(Hscaca*transpose(inv(Hscacb))*Hscbcb-Hscacb);Ks11D(k)=KsD(1,1);Ks22D(k)=KsD(2,2);
KsP=inv(Hcbib*inv(Hsoaib)*Hoaca-Hcaca-Hcbcb);Ks11P(k)=KsP(1,1);Ks22P(k)=KsP(2,2);
Ks11(k)=197800+j*w(k)*1344.2;Ks22(k)=189300+j*w(k)*1625.4;end
subplot(2,1,1);
semilogy(f,abs(Ks11D),'--r',f,abs(Ks11P),'-y',f,abs(Ks11),':b');subplot(2,1,2);
semilogy(f,abs(Ks22D),'--r',f,abs(Ks22P),'-y',f,abs(Ks22),':b');grid on,xlabel('频率'),ylabel('动刚度'),title('半对数频谱图'),legend('直接法','间接法','测量法');
第四篇:北航matlab上机实验报告
MATLAB基础上机指导书
实验目的
MATLAB基础上机实验的目的主要是在深入理解和掌握课程中的基本概念和原理的基础上培养学习者用计算机解决实际问题的意识,训练和提高学生分析问题、仿真、程序设计和程序调试能力。实验要求
1.整个学期的上机实践共有4个。从实验一的MATLAB的上机基本操作,到实验四的GUI设计,都本着由浅入深、由易到难、逐步深入的原则,给出了不同的上机程序。一般每个实验中有约5-7个不同难度的程序,按班级序号排列组合分组,每组学生包括5人,按组检查程序。
2.每次实验后要求学生提交上机报告,这也是整个实验过程的一个重要环节。实验结束后,要整理实验结果并认真分析和总结,根据教师要求写出实验报告。实验报告一般包括如下内容:
⑴ 实验内容:实验题目与要求。⑵ 程序清单
(3)运行结果:原始数据、相应的运行结果和必要的说明。
(4)分析与思考:调试过程及调试中遇到的问题及解决办法;调试程序的心得与体会;其他函数算法的存在与实践等。若最终未完成调试,要认真找出错误并分析原因等。常用命令参考
本节就一些常用的MATLAB命令进行介绍,使初学者尽快提高MATLAB上机调试程序的能力。
1、学会用help和doc函数。
2、输入输出文件:save/load
3、解线性方程组AX=B:X=AB
4、作图时两张曲线合并:hold on或者subplot作子图
5、程序计算时间:tic,toc或者clock
6、变量显示方式更改:format long/short/bank...7、数组元素求和:sum
8、求数组长度:length 求矩阵维数:size或者ndims 矩阵元素个数:numel
9、函数作图:
饼图:pie/pie3 误差图:errorbar 散点图:scatter/scatter3 直方图:hist 函数图:fplot 动画:movie
10、矩阵分析:
左右翻转:fliplr 上下翻转:flipud 转置:transpose 矩阵求逆:inv 矩阵范数:norm 条件数:cond 初等变换:rref 特征值:eig/eigs
11、特殊矩阵:
元素全为1的矩阵:ones 元素全为0的矩阵:zeros 单位阵:eye 魔方阵:magic 线性变化数组:linspace 聚合矩阵:cat/horzcat/vertcat
12、随机数:
创建一个元素服从均匀分布的随机数数组:rand 创建一个元素服从正态分布的随机数数组:randn 二项分布:binornd 指数分布:exprnd F分布:frnd 几何分布:geornd 超几何分布:hygernd 泊松分布:poissrnd
正态分布:normrnd 离散均匀分布:unidrnd 连续均匀分布:unifrnd
13、清屏:clc 清理内存:clear
14、字体显示变更等:preferences
15、得到一个文件夹的所有文件名:ls
16、语句太长的话可以再句末加...换行。
实验一 MATLAB快速入门操作
[实验目的] 1. 熟悉MATLAB的工作环境。2. 熟悉MATLAB的帮助系统。3. 掌握基本的运算表达。4. 掌握基本的数学函数。5. 掌握基本的字符串使用。[实验内容] 1.执行MATLAB的启动和退出。观看DEMO程序,INTRO程序,HELP文件,练习MATLAB常用命令在命令窗口中计算数学表达式,输入简单矩阵,查看工作空间中的变量,命令窗口显示清除,语句、变量及数据的表示,搜索路径设置。
2.使用函数创建字符串数组,掌握char、strvcat、strcat之间的区别。>> c1=char('china','india');>> c3=strvcat('china','india');>> c4=strcat('china','india');char中各部分互相独立,strvact竖直连接 strcat直接连接 >> c1=char('china','india')
c1 =
china india
>> c3=strvcat('china','india')
c3 =
china india
>> c4=strcat('china','india')
c4 =
chinaindia 也就是说strcat连接两个字符串,而strvcat垂直连接两个字符串. i6c2e3.设三个复数a=3+4i,b=1+2i,计算x=ab/c,注意复数的表达方式。
>> a=3+4i,b=1+2i,c=2*exp(pi/6*i)a =
3.0000 + 4.0000i
b =
1.0000 + 2.0000i
c =
1.7321 + 1.0000i
>> X=a*b/c X =
0.3349 + 5.5801i
sinx354.计算下式的结果,其中x=45°,572
注意函数参数的使用类型,掌握复杂表达式的计算。>> a=45/180*pi a =
0.7854
>> b=(sin(a)+35^(1/2))/72^(1/5)b =
2.8158
5.计算星球之间的万有引力。包括地球和太阳,地球和月亮之间的距离。具体参数太阳质量1.989×10^30千克,地球质量5.976×10^27千克,太阳和地球的距离***0米,月亮质量7.351×10^ 22千克,月亮和地球两者间距384400000米,万有引力系数K 6.67×10^-11,见P26 例2-3。
>> M1=1.989e30,M2=5.976e27,M3=7.351e22,d1=1.4960e11,d2=3.844e8 K=6.67e-11
M1 =
1.9890e+030
M2 =
5.9760e+027
M3 =
7.3510e+022
d1 =
1.4960e+011
d2 =
384400000
K =
6.6700e-011
>> F12=M1*M2*K/d1^2
F12 =
3.5426e+025
>> F23=M2*M3*K/d2^2
F23 =
1.9830e+023
333,以及数据的修改方法,尽量考2336.用两种方法创建一个二维数组433虑计算效率。在掌握二维数组基础上掌握三维数组的创建方法。
创建:方法1;x=[3,3,3;2,3,3;4,3,3] x =
3 3 2 3 3 4 3 3 方法2 在workspace中点击 new variable 就会在下面出现一个新变量unnamed 双击unnamed变量引出一个空白页面,在里面进行编辑 >> unnamed
unnamed =
3 3 2 3 3 4 3 3 修改
直接在workspace中点击需要修改的变量,在相应位置修改变量,保存后在命令窗口重新调用函数 计算
[问题讨论] 1.小结上机各个环节所出现的错误及解决的办法。
[思考问题] 1.仿真是否“真实”,与什么因素有关? 仿真是在数字计算机上进行试验的数字化技术,包括数字和逻辑模型的某些模式,这些模型描述了某一事件或经济系统在若干周期内的特征。仿真常常包括模型建立,仿真模型的建立和仿真试验三个方面。从以上可以看出,仿真其实是建立在模型之上,通过计算机或者其他载体,并借助经验知识、统计数据和信息资料等对真实或假想的系统进行试验,得出试验结果的过程。
在这点上看,仿真并不真实,因为它并不能100%模拟出真实情况,而实际上“真实”的复杂多变也难以模拟。但是,仿真可以通过以上的手段在一定范围内对真实进行模拟和预测。其与真实结果的相关性,或者说仿真方法的优劣性与其系统、模型和载体是密切相关的。
第五篇:MATLAB上机实验实验报告
M M ATL L AB B 上机实验一
一、实验目得 初步熟悉 MATLAB 工作环境,熟悉命令窗口,学会使用帮助窗口查找帮助信息。
命令窗口 二、实验内容(1)熟悉MATLAB平台得工作环境.(2)
熟悉MATLAB 得5 个工作窗口。
(3)MATLAB 得优先搜索顺序.三、实验步骤 1、熟悉MATLAB 得5 个基本窗口 ① mand Window(命令窗口)
② Workspace(工作空间窗口)
③ mand History(命令历史记录窗口)
④ Current Directory(当前目录窗口)
⑤ Help Window(帮助窗口)
(1)命令窗口(mand Window)。
在命令窗口中依次输入以下命令:
>〉x=1 〉> y=[1 2 3
4 5 68 9]; 〉> z1=[1:10],z2=[1:2:5]; >> w=linspace(1,10,10); >〉 t1=ones(3),t2=ones(1,3),t3=ones(3,1)〉〉 t4=ones(3),t4=eye(4)x =1 z1 =
3
9t1 =
1
1
t2 =
1
t3 =
1 t4 =
1
1
1
t4 =
1
0
0
0
0
0
0
0
0
0
0
0
0
思考题: ①
变量如何声明, , 变量名须遵守什么规则、就是否区分大小写。
答:(1)变量声明
1、局部变量 每个函数都有自己得局部变量,这些变量只能在定义它得函数内部使用。当函数运行时,局部变量保存在函数得工作空间中,一旦函数退出,这些局部变量将不复存在。
脚本(没有输入输出参数,由一系列MATLAB命令组成得M文件)没有单独得工作空间,只能共享调用者得工作空间。当从命令行调用,脚本变量存在基本工作空间中;当从函数调用,脚本变量存在函数空间中. 2、全局变量 在函数或基本工作空间内,用global声明得变量为全局变量。例如声明a为全局变量:
>〉global a 声明了全局变量得函数或基本工作空间,共享该全局变量,都可以给它曲赋值。
如果函数得子函数也要使用全局变量,也必须用global声明.3、永久变量 永久变量用persistent声明,只能在M文件函数中定义与使用,只允许声明它得函数存取.当声明它得函数退出时,MATLAB不会从内存中清除它,例如声明a为永久变量: 〉〉persistent a(2)变量命名规则如下: :
始于字母,由字母、数字或下划线组成;区分大小写;可任意长,但使用前N个字符.N与硬件有关,由函数namelengthmax返回,一般N=63; 不能使用关键字作为变量名(关键字在后面给出); 避免使用函数名作为变量名.如果变量采用函数名,该函数失效.(3)区分大小写
②
试说明分号、逗号、冒号得用法。
答:分号:加上分号“;“其作用就是将计算机结果存入内存,但不显示在屏幕上,反之,语句结尾若不加“;”,则表示在语句执行后,在将计算结果存入内存得同时,还将运算结果显示出来.逗号:分割列表
冒号:从什么到什么,比如1:10意思就是——1到10 ③ ③
l inspace())
称为“线性等分”函数, , 说明它得用法。可使用help命令,格式如下:
>>help linspace
④
数 说明函数 ones())、、zero s()、eye()得用法。
答;(1)ones()函数:全部元素都为 1 得常数矩阵;(2)zeros()函数:全部元素都为 0 得矩阵;(3)eye()函数:单位矩阵;
(4)linspace()函数:如 a=linspace(n1,n2,n3),表示在线性空
间上,行矢量得值从 n1 到 n2(2)工作空间窗口(Workspace). 单击工作空间窗口右上角得按钮,将其从MATLAB 主界面分离出来。
① 在工作空间查瞧各个变量,或在命令窗口用who, whos(注意大小写)查瞧各个 变量。
② 在工作空间双击变量,弹出Array Editor 窗口(数组编辑器窗口),即可修改变量。
③ 使用save 命令把工作空间得全部变量保存为my_var、mat 文件。
〉〉save my_var、mat
④ 输入下列命令: 〉〉clear all %清除工作空间得所有变量
观察工作空间得变量就是否被清空。使用load 命令把刚才保存得变量载入工作空间。
>〉load my_var、mat
⑤ 清除命令窗口命令: >〉clc(3)历史命令窗口(mand History)。
打开历史命令窗口,可以瞧到每次运行MATLAB 得时间与曾在命令窗口输入过得命 令,练习以下几种利用历史命令窗口重复执行输入过得命令得方法。
① 在历史命令窗口中选中要重复执行得一行或几行命令,右击,出现快捷菜单,选择 Copy,然后再Paste 到命令窗口。
② 在历史命令窗口中双击要执行得一行命令,或者选中要重复执行得一行或几行命令 后,用鼠标将其拖动到命令窗口中执行。
③ 在历史命令窗口中选中要重复执行得一行或几行命令,右击,出现快捷菜单,选择 Evaluate Selection,也可以执行。
④ 或者在命令窗口使用方向键得上下键得到以前输入得命令。例如,按方向键“↑” 一次,就重新将用户最后一次输入得命令调到MATLAB 提示符下。重复地按方向上键 “↑”,就会在每次按下得时候调用再往前一次输入得命令。类似地,按方向键“↓”得时 候,就往后调用一次输入得命令.按方向键“←“或者方向键“→”就会在提示符得命令 中左右移动光标,这样用户就可以用类似于在字处理软件中编辑文本得方法编辑这些命令。
(4)
当前目录命令窗口(Current Directory).MATLAB 得当前目录即就是系统默认得实施打开、装载、编辑与保存文件等操作时得文 件夹。打开当前目录窗口后,可以瞧到用“save”命令所保存得my_var、mat 文件就是保存在 目录C:MATLAB6p5work 下。
(5)帮助窗口(Help Window)。
单击工具栏得图标,或选择菜单View|Help,或选择菜单Help|MATLAB Help 都能 启动帮助窗口。
① 通过Index 选项卡查找log2()函数得用法,在Search index for 栏中输入需要查找得 词汇“log2”,在左下侧就列出与之最匹配得词汇条目,选择“log2[1]”,右侧得窗口就 会显示相应得内容。
② 也可以通过Search 选项卡查找log2()函数得用法.Search 选项卡与Index 选项卡 不同,Index 只在专用术语表中查找,而Search 搜索得就是整个HTML 帮助文件。
2、MATLAB 得数值显示格式设置 屏幕显示方式有紧凑(pact)与松散(Loose)两种,其中Loose 为默认方式.>〉a=ones(1,30)
〉>format pact
〉〉a 数字显示格式有short、long、short e、long e 等,请参照教材得列表练习一遍。
〉〉format long >>pi
〉〉format short >〉pi
〉>format long 〉〉pi
>>format + 〉〉pi
〉>—pi
3、变量得搜索顺序 在命令窗口中输入以下指令:
>>pi
〉>sin(pi);
>>exist(’pi”)
〉>pi=0;>〉exist(’pi“)
>〉pi
〉〉clear pi 〉>exist('pi’)>>pi
思考题:① 3 次执行exist(’pi’)得结果一样吗?如果不一样,试解释为什么? 答:不一样,pi原来就是库存函数,但就是如果被赋值则系统默认被赋予得值为pi后来得值,但就是当执行clear pi之后所赋得值被清空,因此pi得值又成为3、1416 ② 圆周率 pi 就是系统得默认常量,为什么会被改变为 0? 答:pi原来就是库存函数,但就是如果被赋值则系统默认被赋予得值为 pi 后来得值,但就是当执行 clear pi之后所赋得值被清空,因此 pi 得值又成为3、1416
实验二
MA TLAB语言基础 一、实验目得 基本掌握 MATLAB 向量、矩阵、数组得生成及其基本运算(区分数组运算与矩阵运算)、常用得数学函数。交接字符串得操作.二、实验内容(1)向量得生成与运算。
(2)矩阵得创建、引用与运算。
(3)
多维数组得创建及运算。
(4)字符串得操作。
三、实验步骤 1、向量得生成与运算 1)
向量得生成 直接输入法: A =
>〉 B=[1;2;3;4;5]
B =
1
2
5 冒号生成发:
〉〉 A=1:2:10 ,B=1:10,C=10:—1:1
A =
3
5
7
B =
5
C =
10
8
4
1 函数法:
Linspace()就是线性等分函数,logspace()就是对数等分函数。
>〉 A=linspace(1,10),B=linspace(1,30,10)A =
Columns 1 through 91、0000
1、0909
1、1818
1、2727
1、3636
1、4545
1、5455
1、6364
1、7273
Columns 10 through 181、8182
1、9091
2、0000
2、0909
2、1818
2、2727
2、3636
2、4545
2、5455
Columns 19 through 272、6364
2、7273
2、8182
2、9091
3、0000
3、0909
3、1818
3、2727
3、3636
Columns 28 through 36
3、4545
3、5455
3、6364
3、7273
3、8182
3、9091
4、0000
4、0909
4、1818
Columns 37 through 454、2727
4、3636
4、4545
4、5455
4、6364
4、7273
4、8182
4、9091
5、0000
Columns 46 through 545、0909
5、1818
5、2727
5、3636
5、4545
5、5455
5、6364
5、7273
5、8182
Columns 55 through 63
5、9091
6、0000
6、0909
6、1818
6、2727
6、3636
6、4545
6、5455
6、6364
Columns 64 through 72
6、7273
6、8182
6、9091
7、0000
7、0909
7、1818
7、2727
7、3636
7、4545
Columns 73 through 81
7、5455
7、6364
7、7273
7、8182
7、9091
8、0000
8、0909
8、1818
8、2727
Columns 82 through 908、3636
8、4545
8、5455
8、6364
8、7273
8、8182
8、9091
9、0000
9、0909
Columns 91 through 999、1818
9、2727
9、3636
9、4545
9、5455
9、6364
9、7273
9、8182
9、9091
Column 100
10、0000
B =
Columns 1 through 91、0000
4、2222
7、4444
10、666713、8889
17、1111
20、333323、555626、7778
Column 1030、0000 >> A=logspace(0,4,5)A =
1
10
100
1000
10000 练习:
使用 logspace()创建1—4得有 10 个元素得行向量。
答案:
>〉 A=logspace(1,10,4*pi)
A =1、0e+010 *
Columns 1 through 9
0、0000
0、0000
0、0000
0、0000
0、0000
0、0000
0、0001
0、0005
0、0035
Columns 10 through 120、0231
0、1520
1、0000 2)向量得运算 维数相同得行向量只见可以相加减,维数相同得列向量也可以相加减,标量可以与向量直接相乘除。
〉〉 A=[1 2 3 4 5],B=3:7,A =
4
B =
7
>〉 AT=A”,BT=B“, AT =
BT =
6
>〉 E1=A+B, E2=A-B
E1 =
6
10E2 =
—2
—2
—2
〉〉 F=AT—BT, F =
-2
—2
〉〉 G1=3*A, G2=B/3, G1 =
12
15
G2 =1、0000
1、3333
1、6667
2、0000
2、3333 向量得点积与叉积运算。
〉〉 A=ones(1,10);B=(1:10); BT=B”;>> E1=dot(A,B)
E1 =
55
〉〉 E2=A*BT
E2 =
〉〉 clear >> A=1:3,B=3:5,A =
3
B =
〉〉 E=cross(A,B)
E = -2
—2 2.矩阵得创建、引用与运算
1)矩阵得创建与引用
矩阵就是由元素构成得矩阵结构,行向量与列向量就是矩阵得特殊形式。
直接输入法:
〉〉 A=[1 2 3;4 5 6]
A =
1
3
4
6
〉〉 B=[ 1 4 75 86 9 ] B =
1
7
8
〉> A(1)
ans =〉〉 A(4:end)
ans =
6 〉〉 B(:,1)ans =
2〉> B(:)ans =
1
8>〉 B(5)
ans =抽取法 〉> clear 〉> A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] A =
3
4
10
12
13
16 >〉 B=A(1:3,2:3)
B =
6
10
11 〉> C=A([1 3],[2 4])
C =
10
12 〉〉 A([1 3;2 4])ans =
9
5 函数法: 〉〉 A=ones(3,4)A =
1
1
>〉 B=zero(3)
??? Undefined function or method “zero’ for input arguments of type ”double’、>> B=zeros(3)B =
0
0
0
0
0
0
0
0
0 >> C=eyes(3,2)??? Undefined function or method “eyes’ for input arguments of type ”double’、〉> C=eye(3,2)C =
0
0
0
0 >> D=magic(3)D =
6
拼接法 〉〉 clear 〉> A=ones(3,4)A =
1
1
1
1
>〉 B=zeros(3)
B =
0
0
0
0
0
0
0
0
0 >〉 C=eye(4)C =
0
0
0
0
0
0
0
0
0
0
0
0
>〉 D=[A B] D =
1
0
0
0
0
0
0
0
0
0 >〉 F=[A;C] F =
1
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
拼接函数与变形函数法:
〉〉 clear 〉> A=[0 1;1 1] A =
0
1
1
〉> B=2*ones(2)
B =
2
>> cat(1,A,B,A)ans =
0
1
1
2
2
0
>〉 cat(2 A,B,A)
??? cat(2 A,B,A)Error: Unexpected MATLAB expression、>〉 cat(2,A,B,A)ans =
0
1
0
1
2
2
1
1 >〉 repmat(A,2,2)ans =
0
1
0
1
1
1
0
0
1
1
1
〉> repmat(A,2)ans =
0
0
1
0
1
0
1
练习:使用函数法、拼接法、拼接函数法与变形函数法,按照要求创建以下矩阵:A 为
得全1矩阵、B 为得 0 矩阵/C 为得单位矩阵、D 为得魔方阵、E 由 C
与D纵向拼接而成,F 抽取 E 得2—--5 行元素生成、G 由 F 经变形为得矩阵而得、以 G 为子矩阵用复制函数(repmat)生成得大矩阵H。
答案 :
>〉 A=ones(3,4)
A =
1
1
1
1 〉〉 B=zeros(3,3)B =
0
0
0
0
0
0
0
0
0 >〉 C=eye(3)
C =
1
0
0
0
0
0
0
>〉 D=magic(3)D =
5
4
>> E=[C;D] E =
1
0
0
0
0
0
0
8
〉〉 F=(2:5,:)??? F=(2:5,:)Error: Expression or statement is incorrect—-possibly unbalanced(, {, or [、>〉 F=E(2:5,:)F =
0
0
0
0
〉〉 G=respace(E,3,4)
??? Undefined mand/function “respace’、〉>
G=respace(F,3,4)
??? Undefined mand/function ”respace“、〉> G=reshape(F,3,4)
G =
0
0
1
6
0
0
〉〉 H=repmat(G,2,2)H =
0
0
0
5
0
8
0
0
7
0
0
0
3
1
0
1
0
0
1
0
0
0
0
2)矩阵得运算 矩阵得加减、数乘与乘法
已知矩阵: >> A=[1 2
-1], A =
-1 >〉 B=[-1 0
2] B =
0
>〉 A+B ans =
0
4
1 〉〉 2*A ans =
4
-2 >〉 2*A-3*B ans =
-8 〉〉 A*B ans =
4-4
—2 矩阵得逆矩阵 〉〉 format rat;A=[1 0 1;2 1 2;0 4 6] A =
1
0
0
>> A1=inv(A)A1 =
—1/3
2/3
-1/6
-2
1
0
4/3
-2/3
1/6
>〉 A*A1
ans =
0
0
0
0
0
0
矩阵得除法 >〉 a=[1 2 1;3 1 4;2 2 1],b=[1 1 2],d=b’ a =
1
3
2
b =
1
d =
1
1
>> c1=b*inv(a),c2=b/a c1 =
6/7
3/7
-4/7
c2 =
6/7
3/7
-4/7
>> c3=inv(a)*d, c4=ab c3 =
2/7
-4/7
??? Error using ==〉 mldivide Matrix dimensions must agree、>〉 c3=inv(a)*d,c4=ad c3 =
2/7
-4/7
c4 =
2/7
-4/7
练习: 按下列要求求出各种得矩阵运算得值
求矩阵得秩、特征值与特征向量、矩阵得乘幂与开方;
矩阵得指数与对数
矩阵得提取与翻转 答案:
〉〉 A=[6 3
4 3
—2 5 7 —4
8-1 —3 —7] A =
6
-4
-1
—3
—7 〉> B=rank(A)B =〉> rb=rank(A)
rb =>> [X,Lamda]=eig(A)
??? Error using ==〉 eig Matrix must be square、〉〉 [X,Lamda]=eigs(A)??? Error using ==〉 eigs A must be a square matrix or a function which putes A*x、〉〉 C=[6 3 4
-2 5 7
—1-3] C =
4
—2
8
—1
—3 >> [X,Lamda]=eigs(C)
X =0、8013
-0、1094
-0、1606
0、3638
—0、6564
0、86690、4749
0、7464
-0、4719 Lamda =9、7326
0
0
0
-3、2928
0
0
0
1、5602 〉〉 [X,Lamda]=eig(C)
X =
0、8013
—0、1094
—0、16060、3638
—0、6564
0、86690、4749
0、7464
-0、4719 Lamda =9、7326
0
0
0
-3、2928
0
0
0
1、5602 〉> [X,Lamda]=eig(C)
X =
0、8013
—0、1094
-0、1606
0、3638
—0、6564
0、8669
0、4749
0、7464
—0、4719 Lamda =9、7326
0
0
0
—3、2928
0
0
0
1、5602 〉> D=A^2 ??? Error using ==> mpower Matrix must be square、〉> D=C^2 D =
33
34
〉〉 E=sqrtm(C)E =
2、2447 + 0、2706i0、6974 — 0、1400i0、9422-0、3494i
-0、5815 + 1、6244i
2、1005-0、8405i
1、7620-2、0970i
1、9719 - 1、8471i
-0、3017 + 0、9557i
0、0236 + 2、3845i >> F=expm(C)F =
1、0e+004 *
1、0653
0、5415
0、6323
0、4830
0、2465
0、2876
0、6316
0、3206
0、3745 〉〉 G=logm(C)Warning: Principal matrix logarithm is not defined for A with
nonpositive real eigenvalues、A non-principal matrix
logarithm is returned、〉 In funm at 153
In logm at 27 G =
1、7129 + 0、4686i0、5305-0、2425i0、5429-0、6049i
1、1938 + 2、8123i0、3658 — 1、4552i
—0、5514-3、6305i
-0、0748 - 3、1978i
0、7419 + 1、6546i1、8333 + 4、1282i >> H=fliplr(C)H =
5
-2
—1
>> I=triu(C)I =
0
0
0
-3 〉〉 J=tril(C)
J =
0
0
-2
0
-3 >> K=diag(C)K =
6-3 3.多维数组得创建及运算 1)多维数组得创建 >〉 A1=[1,2,3;4 5 6;7,8,9];A2=reshape([10:18],3,3)A2 =
10
13
16
14
17
12
15〉〉 T1(:,:,1)=ones(3);T1(:,:,2)=zeros(3)T1(:,:,1)
=
1
1
1
T1(:,:,2)=
0
0
0
0
0
0
0
0
0 〉> T2=ones(3,3,2)
T2(:,:,1)=
1
1
1 T2(:,:,2)=
1
1
1 >> T3=cat(3,A1,A2),T4=repmat(A1,[1,1,2])
T3(:,:,1)=
T3(:,:,2)=
10
13
16
17
15T4(:,:,1)
=
2
6
8
T4(:,:,2)=
7
8
2)多维数组得创建
数组运算用小圆点加在运算符得前面表示,以区分矩阵得运算。特点就是两个数组相对应得元素进行运算。
〉〉 A=[1:6];B=ones(1,6);>> C1=A+B,C2=A—B C1 =
2
C2 =
0
3
>> C3=A、*B,C4=B、/A,C5=A、B C3 =
6 C4 =
1、0000
0、5000
0、3333
0、2500
0、2000
0、1667 C5 = 1、0000
0、5000
0、3333
0、2500
0、2000
0、1667
关系运算或逻辑运算得结果都就是逻辑值.>〉 I=A〉3,C6=A(I)
I =
0
0
0
1
1 C6 =
4
6 〉〉 A1=A-3,I2=A1&A A1 =
—2
—1
0
2
I2 =
1
1
0
1
〉〉 I3=~I I3 =
1
0
0
0 4.字符串得操作 1)字符串得创建
>〉 S1=”Ilike MATLAB’ S1 = Ilike MATLAB >> S2=“I'’m a stuent、” S2 = I“m a stuent、〉> S3=[S2,”and’,S1] S3 = I“m a stuent、andIlike MATLAB 2)求字符串长度 〉〉 length(S1)ans =>> size(S1)ans =
13)字符串与一维数值数组得相互转换 >> CS1=abs(S1)CS1 =
101
32
65
84
66 〉> CS2=double(S1)CS2 =
108
105
101
32
77
65
76
>> char(CS2)
ans = Ilike MATLAB >> setstr(CS2)
ans = Ilike MATLAB 练习:用char()与向量生成得方法创建如下字符串AaBbCc、、、、、、XxYyZz、〉> S1=65:90;S2=97:122;〉〉 C=[S1;S2];>>
C=C(:)’;〉>
S3=double(C);char(S3)ans = AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz 实验三
MAL TAB B 数值运算 一、实验目得
掌握 MATLAB 得数值运算及其运算中所用到得函数,掌握结构数组与细胞数组得操作。
二、实验内容
1)
多项式运算。
2)
多项式插值与拟合。
3)
数值为积分。
4)
结构数组与细胞数组。
三、实验步骤
1、多项式运算
1)
多项式表示。在 MATLAB 中,多项式表示成向量得形式.如: 在 MATLAB 中表示为 >> s=[1 3-5 0 9] 2)
多项式得加减法相当于向量得加减法,但必须注意阶次要相同。如不同,低阶次得要补 0。如多项式与多项式相加。
〉> s1=[0 0 2 3 11] 〉〉 s2=[1 2 —5 4 7] 〉〉 s3=s1+s2 答;s1 =
0
0
3s2 =
—5
4
s3 =
—3
18 3)
多项式得乘、除法分别用函数 conv与得 deconv实现。
〉> s1=[2 3 11] >> s2=[1 3 —5 4 7] >〉 s3=conv(s1,s2)
>> s4=deconv(s3,s1)答;s1 =
11 s2 =
1
3
4
s3 =
—29
65
s4 =
1
7 4)
多项式求根用函数roots。
>〉 s1=[2 4 2] >> roots(s1)
答;s1 =
ans =
—1
5)
多项式求值用函数 polyval >> s1=[2 4 1-3] 〉〉 polyval(s1,3)
〉> x=1:10 〉〉 y=polyval(s1,x)答;s1 =
2
-3 ans =
90 x =
1
6
9
10 y =
Columns 1 through 8
193
352
579
886
1285
Columns 9 through 10 练习:求得“商”及余数.〉> s1=[1 0 1];s2=[1 3];s3=[1 1]; 〉> s4=[1 0 2 1]; >> [q,r]=deconv(conv(conv(s1,s2),s3),s4)答;q =
1
4 r =
0
0
-1 2、多项式插值与拟合 有一组实验数据如附表 1—1 所示。
附表 1-1 X 1 2 3 4 5 6 7 8 9 10 Y 16 32 7
1
分别用拟合(二阶至三阶)与插值(线性与三次样条)得方法来估算X=9、5 时 Y 得值。以下就是实现一阶拟合得语句。
〉> x=1:10 >〉 y=[16 32 70 142 260 436 682 1010 1342 1960] 〉> p1=polyfit(x,y,1)
%一阶拟合 >> y1=polyval(p1,9、5)
%计算多项式 P1 在x=9、5 得值 答;x =
2
9y =
Columns 1 through 8
32
70
142
260
436
682
1010
Columns 9 through 10
1342
1960 p1 =
200、9818 -510、4000 y1 =1、3989e+003 3、数值微积分
1)
差分使用 diff 函数实现。
>〉 x=1:2:9 〉〉 diff(x)答;x =
5
ans =
2 2)
可以用因变量与自变量差分得结果相处得到数值微分。
〉> x=linspace(0,2*pi,100);>〉 y=sin(x); >〉 plot(x,y)>〉 y1=diff(y)、/diff(x); 〉〉 plot(x(1:end-1),y1)答;
3)
cumsum 函数求累计积分,trapz 函数用梯形法求定积分,即曲线得面积。
〉〉 x=ones(1,10)
>> cumsum(x)>> x=linspace(0,pi,100); >> y=sin(x); 〉〉 trapz(x,y)〉> p=cumsum(y); >> p(100)*pi/(100—1)答;x =
1
1
ans =
9ans =
1、9998 ans =
1、9998 练习:图 A1就是瑞士地图,为了算出其国土面积,首先对地图作如下测量:以由西向东方向为 X 轴,由南向北方向为 Y 轴,选择方便得原点,并将从最西边界点到最东边界点在 X 轴上得区间适当划分为若干段,在每个分点得Y方向测出南边界点与北边界点得 Y 坐标Y1与 Y2,这样就得到表 1,根据地图比例尺回到18mm相当于 40Km,试由测量数据计算瑞士国土近似面积,与其精确值 41228 比较。地图得数据见附表 1—2(单位mm).附表 1—2 X 7 10、5 13 17、5 34 40、5 44、5 48 56 61 68、5 76、5 80、5 91 Y1 44 45 47 5
34 41 45 46 Y2 44 59 7
18 1 18 续表 X 96 101 104 106、5 111、5 118 123、5 1 36、5 142 146 150 157 158 Y1 43 37 33 28 32 65 55 54 52 50 66 66 68 Y2 121 124 1 21 1 21 121 116 1 22 83 81 82 86 85 68 提示:由高等数学得知识,一条曲线得定积分就是它与 x 轴所围成得面积,那么两条曲线所围成得面积可由两条曲线得定积分相减得到。、结构数组与细胞数组 1)
机构数组得创建. 〉> student、number=’20050731001’;〉〉 student、name=’Jack”;〉〉 student(2)、number=’20050731002’;〉〉 student(2)、name=’Lucy“; >> student 或者用 struct 函数创建。
>> student=struct(”number“,{’001”,“002’},”name',{'Jack’,“Lucy’});答;student =
1x2 struct array with fields:
number
name 2)
机构数组得操作。
〉> student(1)、subject=[]
%添加 subject 域并赋予空值 〉〉 student(1)、score=[] >〉(studeng)〉>fieldnames(studeng)
〉>fieldnames(student)
〉〉 getfield(student,{2},'name')〉〉 student=rmfield(student,”subject’)
%删除 subject 域 〉〉 student=setfield(student,{1},“score’,90);>> student(2)、score=88;
%比较与上一条语句就是否效果一样 答;student =
1x2 struct array with fields:
number
name
subject student =
1x2 struct array with fields:
number
name
subject
score ??? Undefined function or variable ’studeng’、练习:创建一结构数组stusorce,其域为:No,Name,English,Math,Chinese,Total,Average。结构数组得大小为 2×2。
3)
细胞数组得创建。
〉> A={’How are you!”,ones(3);[1 2;3 4],{“cell’}};
%直接创建
〉〉 B(1,1)={’Hello world”};
%由各个细胞元素创建
>> B(1,2)={magic(3)};
>〉 B(2,1)={[1 2 3 4]};答
或者用cell 函数先创建空得细胞数组,然后再给各个元素赋值 c=cell(1,2); >> c(1,1)={’Hello world’};>> c(1,2)={magic(3)}; 〉〉 c(1,3)={[1 2 3 4]}; 4)
细胞数组得操作。
〉> ans1=A(1,1)>> ans2=A(1,1)>〉 whos ans1 ans2 〉〉 celldisp(A)〉> a1=A{2,1}(1,2)>〉 [a2 a3]=deal(A{1:2})
答;ans1 =
’How are you!’ ans2 =
’How are you!’
Name
Size
Bytes
Class
Attributes
ans1
1x1
84
cell
ans2
1x1
84
cell
A{1,1} = How are you!
A{2,1} =
A{1,2} =
1
A{2,2}{1} = cell a1 =a2 = How are you!a3 =
1
2
实验四
MA LT AB B 符号运算
一、实验目得
掌握符号变量与符号表达式得创建,掌握MALTAB得symbol工具箱得一些基本运用。
二、实验内容
1)
符号变量、表达式、方程及函数得表示。
2)
符号微积分运算.
3)
符号表达式得操作与转换.4)
符号微分方程求解.三、实验步骤1、符号运算得引入
在数值运算中如果求,则可以不断让得让x趋近0,一球得表达式趋近什么数,但终究不能令 x=0,因为在数值运算中 0 不就是能作除数得。MATLAB得符号运算能解决这内问题。输入如下命令: 〉> f=sym(’sin(pi*x)/x')
>> limit(f,’x“,0)答;f = sin(pi*x)/x ans = pi 2 2、符号常量、符号变量、符号表达式得创建
1)
使用 sym()创建 输入以下命令,观察 Workspace 中 A、B、f就是什么内性得数据,占用多少字节得内存空间。
>〉 A=sym(”1’)
%符号常量 〉〉 B=sym(’x’)
%符号变量 >> f=sym(’2*x^2+3*x-1’)
%符号表达式 >> clear >> f1=sym(“1+2”)
%有单引号,表示字符串 >〉 f2=sym(1+2)
%无单引号 >〉 f2=sym(1+2)
〉> f4=sym(“2*x+3’)
%为什么出错 〉〉 x=1 〉〉 f4=sym(2*x+3)
答;A = 1 B = x f = 2*x^2+3*x-1 f1 = 1+2 f2 = 3 f2 = 3 f4 = 2*x+3 x =f4 = 5 通过瞧 MATLAB 得帮助可知,sym()得参数可以使字符串或就是数值类型,无论就是哪种类型都会生成符号类型数据。
2)
使用 syms创建 〉> clear >〉 syms x y z 〉> x,y,z 〉〉 f1=x^2+2*x+1 >〉 f2=exp(y)+exp(z)^2 >> f3=f1+f2 答;x = x y = y z = z f1 = x^2+2*x+1 f2 = exp(y)+exp(z)^2 f3 = x^2+2*x+1+exp(y)+exp(z)^2 3 3、符号矩阵创建
>〉 syms a1 a2 a3 a4 〉〉 A=[a1 a2;a3 a4] 〉> A(1),A(3)答;A = [ a1,a2] [ a3, a4] ans = a1 ans = a2 4 4、符号算术运算
1)
符号向量相乘、相除 符号量相成与数值量相乘一样,分成矩阵乘与数组乘。
〉> a=sym(5);b=sym(7); 〉> c1=a*b >〉 c2=a/b >> a=sym(5);B=sym([3 4 5]);>〉 C1=a*B,C2=aB >> syms a b >> A=[5 a;b 3];B=[2*a b;2*b a];〉> C1=A*B,C2=A、*B >〉 C3=AB,C4=A、/B 答;c1 =
35 c2 = 5/7 C1 = [ 15, 20, 25] C2 = [ 3/5, 4/5,1] C1 = [ 10*a+2*a*b,5*b+a^2] [
2*a*b+6*b,b^2+3*a] C2 = [
10*a,a*b] [ 2*b^2,3*a] C3 = [
2*a*(b—3)/(—15+a*b),(a^2-3*b)/(—15+a*b)] [
2*b*(a-5)/(-15+a*b), —(5*a-b^2)/(-15+a*b)] C4 = [ 5/2/a,a/b] [
1/2, 3/a] 2)
符号数值任意精度控制与运算 任意精度得 VPA 运算可以使用命令 digits(设定默认得精度)与vpa(对指定对象以新得精度进行计算)来实现。
>〉 a1=sym(’2*sqrt(5)+pi')
〉> a=sym(’2*sqrt(5)+pi’)〉〉 b=sym(2*sqrt(5)+pi)
>> digits >> vpa(a)>> digits(15)>〉 vpa(a)〉〉 c1=vpa(a,56)
〉〉 c2=vpa(b,56)
答 a1 = 2*sqrt(5)+pi a = 2*sqrt(5)+pi b = 8572296331135796*2^(-50)
Digits = 32 ans = 7、637263128 ans = 7、637 c1 = 7、6372631285535581572696
c2 = 7、6372726175781250000000 注意观察c1 与c2 得数值类型,c1 与 c2 就是否相等。
3)
符号类型与数值类型得转换 使用命令sym可以把数值型对象转换成有理数性符号对象,命令vpa可以讲数值型对象转换为任意精度得 VPA 型符号对象.使用 double,numeric 函数可以将有理数型与 VPA 型符号对象转换成数值对象、〉> clear >〉 a1=sym('2*sqrt(5)+pi’)
>〉 b1=double(a1)
%符号转数值 >> b2=isnumeric(b1)
%判断就是否转换成了数值 >> a2=vpa(a1,70)
%数值转符号 答;a1 = 2*sqrt(5)+pi b1 =7、6137 b2 =
1 a2 = 7、6372631285535589083128858 5 5、、符号表达式得操作与转换
1)独立变量得确定原则 独立变量得确定原则:在符号表达式中默认变量就是惟一得.MATLAB 会对单个英文小写字母(除 i、j外)进行搜索,且以 x 为首选独立变量。如果表达式中字母不唯一,且无 x,就选在字母表最接近x 得字母.如果有相连得字母,则选择在字母表中较后得那一个。例如:中,y 就是默认独立变量。,t 就是默认独立变量。
输入以下命令,观察并分析结果。
>> clear >〉 f=sym(”a+b+i+j+x+y+xz’)
>〉 findsym(f)
〉> findsym(f,1)>〉 findsym(f,2)>> findsym(f,3)
>〉 findsym(f,4)〉〉 findsym(f,5)>〉 findsym(f,6)答;f = a+b+i+j+x+y+xz ans = a, b, j,x,xz, y ans = x ans = x,xz ans =
x,xz,y ans = x,xz,y,j ans = x,xz,y,j,b ans = x,xz,y,j,b,a 2)符号表达式得化简 符号表达式化简主要包括表达式美化(pretty)、合并同类项(collcet)、多项式展开(expand)、因式分解(factor)、化简(simple或 simplify)等函数。
①合并同类项(collect)。分别按 x 得同幂项与e指数同幂项合并表达式: . 〉〉 syms x t; >〉 f=(x^2+x^exp(—t)+1)*(x+exp(-t));〉〉 f1=collect(f)〉〉 f2=collect(f,’exp(-t)“)答;f1 = x^3+exp(-t)*x^2+(x^exp(-t)+1)*x+(x^exp(-t)+1)*exp(-t)
f2 =(x^2+x^exp(-t)+1)*exp(-t)+(x^2+x^exp(—t)+1)*x ②对显示格式加以美化(pretty)。针对上例,用格式美化函数可以使显示得格式更符合数学书写习惯。
>〉 pretty(f1)>〉 pretty(f2)
答;f1 = x^3+exp(-t)*x^2+(x^exp(—t)+1)*x+(x^exp(—t)+1)*exp(-t)
f2 =(x^2+x^exp(-t)+1)*exp(-t)+(x^2+x^exp(—t)+1)*x >〉
pretty(f1)pretty(f2)
3
2
exp(-t)
exp(-t)
x
+ exp(—t)
x
+(x
+ 1)
x +(x
+ 1)exp(—t)
2
exp(—t)
exp(-t)
(x
+ x
+ 1)exp(-t)+(x
+ x
+ 1)x 注意与直接输出得 f1 与 f2 对比。
③多项式展开(expand)。展开成 x 不同次幂得多项式、〉> syms x 〉> f=(x—1)^12;〉> expand(f)〉〉 pretty(expand(f))
答;ans = 1+x^12-12*x^11+66*x^10—220*x^9+495*x^8—792*x^7+924*x^6-792*x^5+495*x^4-220*x^3+66*x^2—12*x
7
6
5
+ x
- 12 x
+ 66 x
— 220 x
+ 495 x
x
+ 924 x
- 792 x
+ 495 x
- 220 x
+ 66 x
- 12 x ④ 因式分解(factor)。将表达式做因式分解。
>> syms x;f=x^12—1; 〉> pretty(factor(f))
答;ans = 1+x^12—12*x^11+66*x^10—220*x^9+495*x^8-792*x^7+924*x^6—792*x^5+495*x^4—220*x^3+66*x^2-12*x
12
11
8
6
5
+ x
— 12 x
+ 66 x
— 220 x
+ 495 x
x
+ 924 x
— 792 x
3
+ 495 x
— 220 x
+ 66 x
- 12 x 〉〉 syms x;f=x^12—1;pretty(factor(f))
2
2
(x-1)(1 + x
+ x)(1 + x)
(1 — x + x)(1 + x)(x
— x
+ 1)⑤化简(simple或 simplify)。
将函数化简.〉〉 clear 〉〉 syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 〉> g1=simple(f)>〉 g2=simplify(f)
答;g1 =(2*x+1)/x g2 =((2*x+1)^3/x^3)^(1/3)6 6、符号表达式得变量替换
subs 函数可以对符号表达式中得符号变量进行替换 >> clear >> f=sym(’(x+y)^2+4*x+10’)〉〉 f1=subs(f,’x',’s')
%使用 s 替换x >〉 f2=subs(f,”x+y’,“z’)答;f =(x+y)^2+4*x+10 f1 =(s+y)^2+4*s+10 f2 = z^2+4*x+10 7、符号极限、符号积分与微分
1)
求极限函数得调用格式 limit(F,x,a)
%返回符号对象 F 当 x→a 时得极限 limit(F,a)
%返回符号对象 F 当独立变量*→a 时得极限
limit(F)
%返回符号对象 F 当独立变量→0(a=0)时得极限 limit(F,x,a,’right’)
%返回符号对象 F 当 x→a 时得右极限 limit(F,x,a,’left”)
%返回符号对象F当 x→a 时得左极限 例一:
〉〉 clear >> f=sym(“sin(x)/x+a*x”)
>〉 limit(f,“x’,0)
%以 x 为自变量求极限 >> limit(f,”a’,0)
%以 a 为自变量求极限 >> limit(f)
%在默认情况下以 x 为自变量求极限 >> findsym(f)
%得到变量并且按字母表顺序排列 答‘f = sin(x)/x+a*x ans = 1 ans = sin(x)/x ans = 1 ans = a,x 例二: >> clear >〉 f=sym('sqrt(1+1/n));
〉〉 limit(f,n,inf)
%求 n 趋于无穷大时得极限
2)
求积分函数得调用格式 int(F)
%求符号对象 F 关于默认变量得不定积分 int(F,v)
%求符号对象 F 关于指定变量 v 得不定积分 int(F,a,b)
%求符号对象 F 关于默认变量得从 a 到 b 得定积分 int(F,v,a,b)
%求符号对象 F 关于指定变量得从 a 到b得定积分 3)
求微分方程得调用格式 diff(F)
%求符号对象 F 关于默认变量得微分 diff(F,v)
%求符号对象 F 关于指定变量 v 得微分 diff(F,n)
%求符号对象 F 关于默认变量得 n 阶微分,n 为自然数 1、2、3…… diff(F,v,n)%求符号对象 F 关于指定变量 v 得 n 阶微分 8 8、符号方程求解
1)常规方程求解函数得调用格式 g=solve(eq)
%求方程(或表达式或字串)eq 关于默认变量得解
g=solve(eq,var)
%求方程(或表达式或字串)eq 关于指定变量 var 得解 g=solve(eq1,eq2,…、,eqn,var1,var2,…,varn)
%求方程(或表达式或字串)eq1,eq2,eq3,……eqn 关于指定变量组var1,var2,……,varn)得解 求一元二次方程得解.其求解方法有多种形式:
① seq=solve(“a*x^2+b*x+c')
② seq=solve(’a*x^2+b*x+c=0”)③ eq=’a*x^2+b*x+c“;④ eq=”a*x^2+b*x+c=0’; seq=solve(eq)
⑤sym x a b c
eq=a*x^2+b*x+c seq=solve(eq)
2)常微分方程求解 求解常微分方程得函数就是 dsolve。应用此函数可以求得常微分方程(组)得通解,以及给定边界条件(或初始条件)后得特解。
常微分方程求解函数得调用格式:
r=dsolve(“eq1,eq2,…’,’cond1,cond2,…’,’v’)r=dsolve(’eq1’,’eq2”,…,“cond1’,’cond2’,…,’v”)说明: ① 以上两式均可给出方程 eq1,、qeq2 对应初始条件 cond1、cond2 之下得一 v 作为解变量得各微分方程得解。
② 常微分方程解得默认变量为 t。
③ 第二式中最多可接受得输入式就是 12 个。
④ 微分方程得表达方法。
在用 MATLAB 求解常微分方程时,用大写字母 Dy表示,用D2y表示,依此类推。
边界条件以类似于 y(a)=b 给出。其中 y 为因变量,a、b 为常数、如果初始条件给得不够,求出得解为含有 C1、C2 等待定常数得通解。
例一 求微分方程得通解、练习:(1)求。
(2)求函数得积分;求函数得导数(3)计算定积分(4)求下列线性方程组得解
(5)求解但 y(0)=2,在 z(0)=7 时,微分方程组得解。
实验五
MATLA B 程序设计
一、实验目得
掌握 MATLAB 程序设计得主要方法,熟练编写 MATLAB函数、二、实验内容
(1)M 文件得编辑。
(2)程序流程控制结构。
(3)子函数调用与参数传递。
(4)局部变量与全局变量。
三、实验步骤1、M M 文件得编辑
选择MATLAB 得菜单,打开新得M文件进行编辑,然后输入以下内容,并保存文件名为 expl、m。
s=0;for n=1:100
s=s+n;end s 答;s =
5050 保存好文件后,在命令窗口输入expl 即可运行该脚本文件,主义观察变量空间。紧接着创建 M 函数文件,然后输入以下内容,并保存文件名为 expl2、m。
function s=expl2(x)
s=0;for n=1:x
s=s+n; end
保存好文件后,在命令窗口输入
>〉 clear 〉> s=expl2(100)以 open 命令可以打开 M 文件进行修改。
〉〉open conv
%打开 conv 函数 2 2、程序流程控制结构
1)
for 循环结构
>〉 for n=1:10 n end 答;n =n =n =n =n =n =
6 n =n =
n =n =
另一种形式得 for 循环: 〉> n=10:—1:5;>〉 for i=n
%循环得次数为向量 n 得列数 i end 答;i =
10 i =i =i =i =i =2)
while 循环结构 在命令窗口输入:
clear x=1;while 1 x=x*2 end 将会瞧到 MATLAB 进入死循环因为 while 判断得值恒为真,这时须按 Ctrl+C键来中断运行,并且可瞧到 x 得值为无穷大。
练习:
(1)请把 exp2、m函数文件用 while 循环改写。
(2)用公式求得近似值,直到最后一项得绝对值小于为止,试编写M脚本文件、3)
if-else—end 分支结构
if—else—end 分支结构有如下 3 种形式。
(a)
if
表达式 语句组 1 end(b)
if
表达式 语句组 1 else 语句组2 end(c)
if
表达式 A
语句组 1 else if 表达式 B 语句组 2 else if 语句组 3 …… else
语句组 n end 4)
switch—case结构 创建 M 脚本文件 exp3、m,输入以下内容并在命令窗口中运行。
%功能:判断键盘输入得数就是奇数还就是偶数 n=input(’n=');if isempty(n)
error(’please input n');
n=input(“n=’);end switch mod(n,2)
case 1
A=’奇数'
case 0
A=’偶数” End 答;n=input('n=’); if isempty(n)
error('please input n’);
n=input(“n=’); end switch mod(n,2)
case 1
A=”奇数“
case 0
A=”偶数' end n=1 A = 奇数 3、子函数与参数传递
有一个函数,试编写实现该函数得函数文件.function g=expl4(x)
%主函数 g=0;for n=1:x
g=g+fact(n);
%调用子函数 end
function y=fact(k)
%子函数 y=1; for n=1:k
y=y*n; end 输入参数可以有函数 nargin 计算,下面得例子 sinplot(),当知输入一个参数 w 时,sinplot()函数会给p赋予默认值 0。4、局部变量与全局变量
自程序执行开始到退出 MATLAB,始终存放在工作空间,可被任何命...