(完整版)第二讲Matlab编程与作图
- 格式:doc
- 大小:107.01 KB
- 文档页数:13
(完整版)第⼆讲Matlab编程与作图第⼆讲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;for k=1:ns=s*k;enddisp(s) %disp:MATLAB中的命令,表⽰只显⽰结果,不显⽰变量名。
另⼀类M⽂件称为函数(Function),它可以接受输⼊变量,并将运算结果送⾄输出变量,类似于数学中的函数y=f(x)。
函数M⽂件的基本结构:function f=fact(n) 函数定义⾏%Compute a factorial value. 计算阶乘的值%FACT(N) returns the factorial of N, 帮助⽂档%usually denoted by N!%Put simply,FACT(N) is PROD(1:N), 注释f=prod(1:n); 函数体例2.2:编写分段函数21() 1 -1<1321x xf x xx x>=≤+≤-%myfun1.mfunction y=myfun1(x)y=(x.^2).*(x>1)+(x>-1& x<=1)+(3+2*x).*(x<=-1);注意:1.函数名与变量名的命名法则相同,要求以字母开头,后接字母或下划线;2.函数名与保存的⽂件名最好⼀致。
第二讲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;for k=1:ns=s*k;enddisp(s) %disp:MATLAB中的命令,表示只显示结果,不显示变量名。
另一类M文件称为函数(Function),它可以接受输入变量,并将运算结果送至输出变量,类似于数学中的函数y=f(x)。
函数M文件的基本结构:function f=fact(n) 函数定义行%Compute a factorial value. 计算阶乘的值%FACT(N) returns the factorial of N, 帮助文档%usually denoted by N!%Put simply,FACT(N) is PROD(1:N), 注释f=prod(1:n); 函数体例2.2:编写分段函数21() 1 -1<1321x xf x xx x⎧>⎪=≤⎨⎪+≤-⎩%myfun1.mfunction y=myfun1(x)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 矩阵function H=hilbert(n)H=zeros(n,n);for i=1:nfor j=1:nH(i,j)=1/(i+j-1);endend⑵while 循环语法:while 条件式指令组;end解释:当条件式满足,循环执行指令组直到条件式不满足。
使用while 语句要注意避免出现死循环。
例2.4:利用迭代公式11()2k k ka x x x +=+要求误差不超过指定精度。
[Sqrt.m]function x1=Sqrt(a,tol)% y=Sqrt(a,tol)% 用牛顿迭代法求正数a的算术平方根% tol为容许误差x0=0; %初始值x1=a/2;while abs(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:for n=1:4x=-1:0.1:1;y=x.^n;plot(x,y)pauseend●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)% 二分法求方程的根if nargin<3,error('输入参数不足');endif nargin<4,tol=1e-6;end % 缺省精度f=fcnchk(fun);if f(a)*f(b)>0,error('区间端点的函数值要异号');endN=0;% 记录二分次数while abs(b-a)>tolx=(a+b)/2;N=N+1;if f(x)==0returnelseif f(x)*f(a)<0b=x;else a=x;endendx=(a+b)/2;例2.8:求Fibonacci 数列:12121,,3,4,k k k F F F F F k --===+=L ,并验证极限1k k F F -。
编写求Fibonacci 数列的函数[fib,m]:function x=fib(n)x=ones(1,n);if n<=2,return ;endfor k=3:nx(k)=x(k-2)+x(k-1);end编写求Fibonacci 数列第n 项的函数[fibn.m]:function f=fibn(n)if n<=2,f=1;else f=fibn(n-1)+fibn(n-2); %递归方法end验证极限112k k F F -→: n=2;x0=(1+sqrt(5))/2;L=[];while abs(fibn(n)/fibn(n-1)-x0)>1e-8L=[L,fibn(n)/fibn(n-1)];n=n+1;end第二部分Matlab作图1、曲线图●plot(x,y) 作出以数据(x(i),y(i))为节点的折线图,其中x,y为同维数的向量。
●plot(x,y,s) 其中s是由颜色、标记、线型参数组成的字符串颜色标记线型b blue . point - solidg green o circle : dottedr red x x-mark -. dashdotc cyan + plus -- dashedm magenta * star (none) no liney yellow s squarek black d diamondw white v triangle (down)^ triangle (up)< triangle (left)> triangle (right)p pentagramh hexagram●plot(x1,y1,s1,x2,y2.s2,…) 在同一个坐标系中作出由向量对(x1,y1),(x2,y2),…为节点的折线。
例:在同一坐标系中作出函数31=--和0.2sin(5)y x x=在区间[-1,2]y x x上的图形。
●hold on (off) 保持(释放)图形窗口●polar(theta,rho) 作以(theta,rho)为坐标的极坐标图形,theta,rho为同维数的向量例:作出四叶玫瑰线4sin2ρθ=的图形。
●fplot(fun,[a,b]) 作出函数fun 在区间[a,b]上的图形。
●plot3(x,y,z) 作空间曲线的图形,x,y,z为同维向量。
例:作出曲线sin,cos,x t t y t t 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 用法类似。
例:作出曲面22x y=在22,22z xe---≤≤-≤≤上的图形x y●ezmesh(fun) 轻松绘出二元函数fun 的曲面图(easy to use mesh)绘图区域为[2,2,2,2]ππππ--● ezmesh(fun,[xmin,xmax,ymin,ymax]) 在指定区域绘图● ezmesh(fun,…,’circ ’) 绘图区域为圆域上机练习1、设x 为一个长度为n 的数组,编程求下列均值和标准差11,1n i i x x s n n ===>∑ 2、求满足0ln(1)100mn n =+>∑的最小m 值。