为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > MatLab程序设计

MatLab程序设计

2017-09-18 17页 doc 108KB 62阅读

用户头像

is_266065

暂无简介

举报
MatLab程序设计MatLab程序设计 MatLab & 数学建模 授课, 唐 静 波 ,九江学院理学院, 第三讲 MatLab程序设计 一、 M文件 我们前面所介绍在MATLAB所做的运算,是适合于所要计算的算式不太长或是想以交谈式方式做运算,如果要计算的算式很长有数十行或是须要一再执行的算式,则那样的方式就行不通了。MATLAB提供了所谓的 M-file 的方式,可让使用者自行将指令及算式写成巨集程式然后储存成一个特别的文档,其扩展名是m,譬如 picture.m,其中的picture就是文件名称。 (1)编写M脚本文件的步骤 ...
MatLab程序设计
MatLab程序设计 MatLab & 数学建模 授课, 唐 静 波 ,九江学院理学院, 第三讲 MatLab程序设计 一、 M文件 我们前面所介绍在MATLAB所做的运算,是适合于所要计算的算式不太长或是想以交谈式方式做运算,如果要计算的算式很长有数十行或是须要一再执行的算式,则那样的方式就行不通了。MATLAB提供了所谓的 M-file 的方式,可让使用者自行将指令及算式写成巨集程式然后储存成一个特别的文档,其扩展名是m,譬如 picture.m,其中的picture就是文件名称。 (1)编写M脚本文件的步骤 , 点击MATLAB指令窗工具条上的New File图标 ,就可打开如图所示的 MATLAB文件编辑调试器。用户即可在空白窗口中编写程序。 输入如下一段程序 (picture.m) x=linspace(0,2*pi,20); y=sin(x); plot(x,y,'r+') title('2D plot') 1 点击编辑调试器工具条图标 ,在弹出的Windows标准风格的“保存为”对话框中,选择保存文件夹,键入新编文件名(如picture),点击【保存】键,就完成了文件保存。 (2)运行文件 , 使picture.m所在目录成为当前目录(系统默认路径),或让该目录处在 MATLAB的搜索路径上. , 然后在指令窗口运行以下指令,便可得到图形。 picture 2 再来看另一个 M-file: area.m 的例子 % 新建M-file, area.m % 计算一个球的体积 :'); r = input('Type radius 输入半径 Area=pi*r^2; volume=(4/3)*pi*r^3; fprintf('半径 The radius is %12.5f\n',r) fprintf('面积 The area of a circle is %12.5f\n',Area) fprintf('体积 The volume of a sphere is %12.5f\n',volume) 在指令窗口运行指令 area 3 二、 M文件函数 一个函数M文件与脚本文件类似之处在于它们都是一个有.m 扩展名的文本文件。如同脚本M文件一样,函数M文件不进入命令窗口,而是由文本编辑器所创建的外部文本文件。一个函数的M文件与脚本文件在通信方面是不同的。函数与MATLAB工作空间之间的通信,只通过传递给它的变量和通过它所创建的输出变量。在函数内中间变量不出现在MATLAB工作空间,或与MATLAB工作空间不交互。一个函数的M文件的第一行把M文件定义为一个函数,并指定它的名字。它与文件名相同,但没有.m 扩展名。它也定义了它的输入和输出变量。 M文件函数之间可以互相调用. M文件函数必须遵循以下特定的规则。 1. 函数名和文件名必须相同。例如,函数fliplr 存储在名为fliplr.m 文件中。 2. MATLAB头一次执行一个M文件函数时,它打开相应的文本文件并将命令编辑成存储器的内部表示,以加速执行以后所有的调用。如果函数包含了对其它M文件函数的引用,它们也同样被编译到存储器。普通的脚本M文件不被编译,即使它们是从函数M文件内调用;打开脚本M文件,调用一次就逐行进行注释。 3. 在函数M文件中,到第一个非注释行为止的注释行是帮助文本。当需要帮助时,返回该文本。例如, ? help fliplr返回上述前八行注释。 4. 第一行帮助行,名为H1 行,是由lookfor 命令搜索的行。 5. 函数可以有零个或更多个输入参量。函数可以有零个或更多个输出参量。 6. 函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M文件中function 语句一开始所规定的数目,则调用时自动返回一个错误。 7. 当函数有一个以上输出变量时,输出变量包含在括号内。例如,[V,D] = eig(A)。不要把这个句法与等号右边的[V,D] 相混淆。右边的[V,D] 是由数组V和D 所组成。 8. 当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin 包含输入参量个数;函数工作空间变量nargout 包含输出参量个数。事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。 2f(1)f(2)+f(3) 例: ,计算 首先建立一个M函数:fun1.m function Y= fun1(x) Y=(x^3 - 2*x^2 + x - 6.3)/(x^2 + 0.05*x - 3.14); 在指令窗口运行以下指令: fun1(1)*fun1(2)+fun1(3)*fun1(3) 4 ans = -12.6023 例:计算阶层函数 fact.m function output = fact(n) if n == 1 output = 1; return; end output = n*fact(n-1); 【例】M函数文件示例。 [circle.m] function sa = circle(r,s) %CIRCLE plot a circle of radii r in the line specified by s. % r 指定半径的数值 % s 指定线色的字符串 % sa 圆面积 % % circle(r) 利用蓝实线画半径为 r 的圆周线. % circle(r,s) 利用串 s 指定的线色画半径为 r 的圆周线. % sa=circle(r) 计算圆面积,并画半径为 r 的蓝色圆面. % sa=circle(r,s) 计算圆面积,并画半径为 r 的 s 色圆面. if nargin>2 error('输入宗量太多。'); end; if nargin==1 s='b'; end; clf; t=0:pi/100:2*pi; x=r*exp(i*t); if nargout==0 plot(x,s); 5 else sa=pi*r*r; fill(real(x),imag(x),s) end axis('square') 三 MATLAB控制流 for循环结构 For循环允许一组命令以固定的和预定的次数重复。For循环的一般形式是: for x = array {commands} end 在for和end语句之间的{commands}按数组中的每一列执行一次。 【例】 for n=1:10 x(n)=sin(n*pi/10); end ? x x = Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns 8 through 10 0.5878 0.3090 0.0000 For循环可按需要嵌套。 n=0:1:10; for i=1:11 for j=1:11 y(i)=sin(n(i)); n(j)=n(j)*10; end end 6 y = Columns 1 through 7 0 -0.5064 0.9300 -0.8027 -0.1425 -0.9765 -0.5118 Columns 8 through 11 0.8586 -0.9957 0.9917 0.9287 n = 1.0e+012 * Columns 1 through 7 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 Columns 8 through 11 0.7000 0.8000 0.9000 1.0000 可以利用break命令跳出for循环 【例】一个简单的for循环示例。 for i=1:10; %i依次取1,2,„10,. x(i)=i; %对每个i值,重复执行由该指令构成的循环体, end; x %要求显示运行后数组x的值。 x = 1 2 3 4 5 6 7 8 9 10 while循环结构 与For循环以固定次数求一组命令的值相反,While 循环以不定的次数求一组语句的值。While循环的一般形式是: while expression {commands} end 只要在表达式里的所有元素为真,就执行while和end 语句之间的{commands}。 【例】 num=0;EPS=1; while (1+EPS)>1 EPS=EPS/2; num=num+1; end 7 ? num num = 53 ? EPS=2*EPS EPS = 2.2204e-016 【例】 x = zeros(1,6); % x是一个的零矩阵 i = 1; while i <= 6, x(i) = 1/i; i = i+1; end ? x x = 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 可以利用break命令跳出while循环 while循环可按需要嵌套。 (k,1,2,?)【例】Fibonacci数组的元素满足Fibonacci 规则: ,;且a,a,ak,2kk,1 。现要求该数组中第一个大于10000的元素。 a,a,112 a(1)=1;a(2)=1;i=2; while a(i)<=10000 a(i+1)=a(i-1)+a(i); %当现有的元素仍小于10000时,求解下一个元素。 i=i+1; end; i,a(i), i = 21 ans = 10946 8 if-else-end分支结构 很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种逻辑由某种If-Else-End结构来提供。最简单的If-Else-End结构是: if expression {commands} end 如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的{commands}【例】? apples=10; ? cost=apples*25 cost = 250 ? if apples>5 cost=(1-20/100)*cost; end ? cost cost = 200 假如有两个选择,If-Else-End结构是: if expression commands evaluated if True else commands evaluated if False end 在这里,如果表达式为真,则执行第一组命令;如果表达式是假,则执行第二组命令。 当有三个或更多的选择时,If-Else-End结构采用形式 if expression1 commands evaluated if expression1 is True elseif expression2 commands evaluated if expression2 is True elseif expression3 commands evaluated if expression3 is True elseif expression4 commands evaluated if expression4 is True elseif „„ ( 9 ( ( else commands evaluated if no other expression is True end 最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;接下来的 关系表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。 【例】 if rand(1)>0.5 disp('i love you') else disp('i donot love you') end 【例】一个简单的分支结构。 cost=10;number=12; if number>8 sums=number*0.95*cost; end, sums sums = 114.0000 【例】用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。 n=100;a=ones(1,n); for i=3:n a(i)=a(i-1)+a(i-2); if a(i)>=10000 a(i), break; %跳出所在的一级循环。 end; end, i ans = 10946 i = 21 10 switch-case结构 【例】学生的成绩管理,用来演示switch结构的应用。 %划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。 N = input('输入分数'); switch N case 100 %得分为100时 S ='满分'; %列为'满分'等级 case 90 %得分在90和99之间 S =' 优秀'; %列为'优秀'等级 case 80 %得分在80和89之间 S =' 良好'; %列为'良好'等级 case 60 %得分在60和79之间 S =' 及格'; %列为'及格'等级 otherwise %得分低于60。 S ='不及格'; %列为'不及格'等级 end disp(S) try-catch结构 【例】try-catch结构应用实例。 clear,N=4;A=magic(3); %设置3行3列矩阵A。 try A_N=A(N,:), %取A的第N行元素 catch A_end=A(end,:), %如果取A(N,:)出错,则改取A的最后一行。 end lasterr %显示出错原因 A_end = 4 9 2 ans = Index exceeds matrix dimensions. 例:[tang.m] a=2;b=2; x=-a:0.2:a;y=-b:0.2:b; for i=1:length(y) for j=1:length(x) if x(j)+y(i)>1 z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2-1.5*x(j)); elseif x(j)+y(i)<=-1 z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2+1.5*x(j)); 11 else z(i,j)=0.7575*exp(-y(i)^2-6.*x(j)^2); end end end axis([-a,a,-b,b,min(min(z)),max(max(z))]); colormap(flipud(winter)); surf(x,y,z); MATLAB的输入与输出语句 , 输入语句 o 输入数值 x=input('please input a number:') please input a number:22 x = 22 o 输入字符串 x=input('please input a string:','s') please input a string:this is a string x = this is a string , 输出语句 o 输出显示命令 , 自由 (disp) disp(23+454-29*4) 12 361 disp([11 22 33; 44 55 66; 77 88 99]) 11 22 33 44 55 66 77 88 99 disp('this is a string') this is a string , 格式化输出 (fprintf)。 fprintf('The area is %8.5f\n', area) % 注意输出格式前须有%符号, %跳行符号须有\符号 The area is 12.56637 % 输出值为8位数含5位小数 在这里你如果学过c语言就能很好的理解了。 o 错误消息显示命令 error('this is an error') ?? this is an error 关系操作符 说明 < 小于 < = 小于或等于 > 大于 > = 大于或等于 = = 等于 ~ = 不等于 逻辑操作符 说明 & 与 | 或 ~ 非 13
/
本文档为【MatLab程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索