第二讲Matlab编程与作图可编辑修改word版.docx
- 文档编号:6310028
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:10
- 大小:26.68KB
第二讲Matlab编程与作图可编辑修改word版.docx
《第二讲Matlab编程与作图可编辑修改word版.docx》由会员分享,可在线阅读,更多相关《第二讲Matlab编程与作图可编辑修改word版.docx(10页珍藏版)》请在冰豆网上搜索。
第二讲Matlab编程与作图可编辑修改word版
第二讲Matlab编程与作图
第一部分Matlab程序设计初步
Matlab除了指令行操作的直接交互外,作为一种高级应用软件还提供了自己的编程语言。
通过编写Matlab程序,可以更加方便地调用Matlab提供的各种功能强大的函数库,使得程序能完成复杂的运算处理大量的数值数据。
1、M文件简介
Matlab提供了丰富的编程语言,使得用户可以将一连串的命令写入文件,然后使用简单的函数来执行这些命令。
文件被保存为文本文件,后缀为.m,比如说dblquad.m,因此Matlab的程序通常被称为M文件。
M文件是一个文本文件,可以使用各种文本编辑器对它进行编辑和修改,比如Windows操作系统自带的记事本,也可以用Matlab内建的M文件编辑器。
M文件分为两类,一类称为脚本(Scripts),类似于批处理文件,
相当于将在Matlab命令窗口中执行的一系列指令放在一个文件中,当在命令窗口调用该文件名时,则按顺序执行其中的命令集。
例2.1:
编写求10!
的程序。
n=10;s=1;
fork=1:
n
s=s*k;
end
disp(s)%disp:
MATLAB中的命令,表示只显示结
果,不显示变量名。
另一类M文件称为函数(Function),它可以接受输入变量,并将运算结果送至输出变量,类似于数学中的函数y=f(x)。
函数M文件的基本结构:
functionf=fact(n)函数定义行
%Computeafactorialvalue.计算阶乘的值
%FACT(N)returnsthefactorialofN,帮助文档
%usuallydenotedbyN!
%Putsimply,FACT(N)isPROD(1:
N),注释
f=prod(1:
n);函数体
⎧x2
例2.2:
编写分段函数f(x)=⎪
x>1
-1 %myfun1.m functiony=myfun1(x) ⎪3+2xx≤-1 y=(x.^2).*(x>1)+(x>-1&x<=1)+(3+2*x).*(x<=-1); 注意: 1.函数名与变量名的命名法则相同,要求以字母开头,后接字母或下划线;2.函数名与保存的文件名最好一致。 2、控制流 所有的计算机编程语言都提供了控制程序流执行程序的语法, Matlab也不例外。 所有的控制流语法都以end结尾。 ⑴for循环语句 语法: for循环变量=数组 指令组; end 解释: 对于循环变量依次取数组中的值,循环执行指令组直到循环变量遍历数组。 数组最常用的形式是初值: 步长: 终值。 例2.3: 构造Hilbert矩阵 functionH=hilbert(n)H=zeros(n,n); fori=1: nforj=1: n H(i,j)=1/(i+j-1); endend ⑵while循环 语法: while条件式 指令组; end 解释: 当条件式满足,循环执行指令组直到条件式不满足。 使用while语句要注意避免出现死循环。 例2.4: 利用迭代公式x=1(x+a)求近似值,要求误差不超过指 k+12kx 定精度。 [Sqrt.m] functionx1=Sqrt(a,tol) %y=Sqrt(a,tol) %用牛顿迭代法求正数a的算术平方根 %tol为容许误差 x0=0;%初始值x1=a/2; whileabs(x1-x0)>tolx0=x1;x1=(x0+a/x0)/2; end ⑶分支语句 语法: if条件表达式1 指令组1; [elseif条件表达式2指令组2;][] [else 指令组k;]end 解释: 如果条件表达式1满足,则执行指令组1,且结束该语句;否 则检查条件表达式2,若满足则执行指令组2,且结束该语 句;;若所有的条件都不满足,则执行指令组k,并结 束该语句。 例2.5: 用条件语句编写例2.2的分段函数[myfun2.m] ⑷开关语句 语法: switch分支变量 case值1 指令组1;case值2 指令组2; ·········· otherwise 指令组k; end 解释: 若分支变量的值取值1,则执行指令组1,且结束该语句,若分支变量的值取值2,则执行指令组2,且结束该语句,若分支变量不取所列出的值,则执行指令组k。 ⑸其它常用指令 ●input指令提示用户从键盘输入数值、字符串或表达式,并接收该输入,语法为: user_entry=input(‘message’)user_entry=input(‘message’,’s’) ●pause指令使程序运行暂停,语法为 pause: 暂停执行程序,等待用户按任意键继续。 pause(n): 使程序暂停n秒后继续执行。 例2.6: forn=1: 4 x=-1: 0.1: 1;y=x.^n;plot(x,y)pause end ●return指令结束return指令所在函数的执行,返回到主调函数或者命令窗口。 ●break指令中断执行,用在循环语句内表示跳出循环。 ●error(’message’)显示出错信息,终止程序执行。 4、其它一些有用的函数 ●fcnchk函数验证函数 f=fcnchk(fun),fun可以是由字符串表示的函数表达式,(这时返 回一个inline函数),也可以是函数句柄,或是函数名字符串。 f=fcnchk(fun,‘vectorized’),生成向量化函数,例如用.*代替* 举例将intfzero.m文件中的语句f=inline(fun);换成f=fcnchk(fun); ●nargin,nargout函数中输入参数或输出参数的个数。 ●%注释语句 ●find寻找数组中非零元素对应的下标。 S=find(A),[I,J]=find(A) ●取整函数round(x),ceil(x),floor(x),fix(x) 例2.7: 编写用二分法求函数零点的程序。 [bisection.m]两端切断 function[x,N]=bisection(fun,a,b,tol) %x=bisection(fun,a,b,tol) %二分法求方程的根 ifnargin<3,error('输入参数不足');end ifnargin<4,tol=1e-6;end%缺省精度 f=fcnchk(fun); iff(a)*f(b)>0,error('区间端点的函数值要异号');end N=0;%记录二分次数 whileabs(b-a)>tolx=(a+b)/2;N=N+1; iff(x)==0 return elseiff(x)*f(a)<0b=x; elsea=x;end endx=(a+b)/2; 例2.8: 求Fibonacci数列: F1=F2=1,Fk=Fk-1+Fk-2,k=3,4,,并验证极 限FkFk-1 →1+5。 2 编写求Fibonacci数列的函数[fib,m]: functionx=fib(n) x=ones(1,n); ifn<=2,return;endfork=3: n x(k)=x(k-2)+x(k-1); end 编写求Fibonacci数列第n项的函数[fibn.m]: functionf=fibn(n)ifn<=2,f=1; elsef=fibn(n-1)+fibn(n-2);%递归方法 end 验证极限 n=2; FkFk-1 →1+5: 2 x0=(1+sqrt(5))/2;L=[]; whileabs(fibn(n)/fibn(n-1)-x0)>1e-8 end L=[L,fibn(n)/fibn(n-1)];n=n+1; 第二部分Matlab作图1、曲线图 ●plot(x,y)作出以数据(x(i),y(i))为节点的折线图,其中x,y为同维数的向量。 ●plot(x,y,s)其中s是由颜色、标记、线型参数组成的字符串 颜色 标记 线型 b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star (none) noline y yellow s square k black d diamond w white v triangle(down) ^ triangle(up) < triangle(left) >triangle(right) ppentagram hhexagram ●plot(x1,y1,s1,x2,y2.s2,…)在同一个坐标系中作出由向量对 (x1,y1),(x2,y2),…为节点的折线。 例: 在同一坐标系中作出函数y=x3-x-1和y= 上的图形。 ●holdon(off)保持(释放)图形窗口 x0.2sin(5x)在区间[-1,2] ●polar(theta,rho)作以(theta,rho)为坐标的极坐标图形,theta,rho为同维数的向量 例: 作出四叶玫瑰线=4sin2的图形。 ●fplot(fun,[a,b])作出函数fun在区间[a,b]上的图形。 ●plot3(x,y,z)作空间曲线的图形,x,y,z为同维向量。 例: 作出曲线x=tsint,y=tcost,z=t的图形。 ●subplot(m,n,k)将图形窗口分成m⨯n个子图形窗口,将当前操作 定位在第k个子图形窗口。 2、曲面图 [X,Y]=meshgrid(x,y)生成以数组x,y为坐标的网格矩阵mesh(X,Y,Z)绘制网面图,X、Y、Z是同维矩阵surf(X,Y,Z)绘制曲面图,与mesh用法类似。 例: 作出曲面z=xe-x2-y2在-2≤x≤2,-2≤y≤2上的图形 ●ezmesh(fun)轻松绘出二元函数fun的曲面图(easytousemesh) 绘图区域为[-2,2,-2,2] ●ezmesh(fun,[xmin,xmax,ymin,ymax])在指定区域绘图 ●ezmesh(fun,…,’circ’)绘图区域为圆域 上机练习 1、设x为一个长度为n的数组,编程求下列均值和标准差 x=1 n x,s= [x2-nx2],n>1 ∑ii=1 ∑ii=1 m 2、求满足∑ln(1+n)>100的最小m值。 n=0 106 3、分别用for和while循环结构编写程序,求出K=∑i i=1 。 并考虑 一种避免循环语句的程序设计,比较不同算法的运行时间。 4、求出所有的“水仙花数”。 所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。 例如,153是一个“水仙花数”,因为153=13+53+33。 5、求1000之内的所有“完数”。 所谓“完数”是指一个数恰好等于它的所有因子之和,例如,6是完数,因为6=1+2+3。 6、一球从100米高处落下,每次落地后反弹跳回原高度的一半,再落下。 求该球在第10次落地时,共经过了多少米? 第10次反弹多高? 7、猴子吃桃问题。 猴子第1天摘下若干桃子,当即吃掉一半,还不过瘾,又多吃了一个。 第2天早上又将剩下的桃子吃掉一半,又多吃 了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,只剩下一个桃子了。 问第1天共摘下多少桃子? 时刻t(h) 0 1 2 3 4 5 6 7 8 9 10 11 12 温度 T(℃) 15 14 14 14 14 15 16 18 20 22 23 25 28 时刻t(h) 13 14 15 16 17 18 19 20 21 22 23 24 温度 T(℃) 31 32 31 29 27 25 24 22 20 18 17 16 8、假定某天的气温变化记录如下表,试作图描述这一天的气温变化规律。 9、作出下列函数图像 ⑴曲线y=x2sin(x2-x-2),-2≤x≤2 (要求分别使用plot或fplot完 成) ⑵椭圆x2+y2= 49 ⑶抛物面z=x2+y2,x<3,y<3 ⑷曲面z=x4+3x2+y2-2x-2y-2x2y+6,x<3,-3 ⑸空间曲线x=sint,y=cost,z=cos(2t),0 ⑹半球面x=2sincos,y=2sinsin,z=2cos,0≤≤2,0≤≤/2 ⑺三条曲线合成图y1=sinx,y2=sinxsin(10x),y3=-sinx,0≤x≤ ⎛1.1x>1.1 10、作下列分段函数图 y=çxx≤1.1 ⎝ ç-1.1x<-1.1 11、用MATLAB函数表示下列函数,并作图 ⎪ ⎧0.5457e-0.75y2-3.75x2-1.5x x+y>1 ⎨ p(x,y)=⎪0.7575e ⎪ -y2-6x2 -0.75y2-3.75x2+1.5x -1 ⎪0.5457e ⎪⎩ x+y≤-1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 Matlab 编程 作图 编辑 修改 word