MatLab3.docx

上传人:b****1 文档编号:2463931 上传时间:2023-05-03 格式:DOCX 页数:17 大小:116.94KB
下载 相关 举报
MatLab3.docx_第1页
第1页 / 共17页
MatLab3.docx_第2页
第2页 / 共17页
MatLab3.docx_第3页
第3页 / 共17页
MatLab3.docx_第4页
第4页 / 共17页
MatLab3.docx_第5页
第5页 / 共17页
MatLab3.docx_第6页
第6页 / 共17页
MatLab3.docx_第7页
第7页 / 共17页
MatLab3.docx_第8页
第8页 / 共17页
MatLab3.docx_第9页
第9页 / 共17页
MatLab3.docx_第10页
第10页 / 共17页
MatLab3.docx_第11页
第11页 / 共17页
MatLab3.docx_第12页
第12页 / 共17页
MatLab3.docx_第13页
第13页 / 共17页
MatLab3.docx_第14页
第14页 / 共17页
MatLab3.docx_第15页
第15页 / 共17页
MatLab3.docx_第16页
第16页 / 共17页
MatLab3.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MatLab3.docx

《MatLab3.docx》由会员分享,可在线阅读,更多相关《MatLab3.docx(17页珍藏版)》请在冰点文库上搜索。

MatLab3.docx

MatLab3

第三讲MatLab程序设计

一、M文件

我们前面所介绍在MATLAB所做的运算,是适合于所要计算的算式不太长或是想以交谈式方式做运算,如果要计算的算式很长有数十行或是须要一再执行的算式,则那样的方式就行不通了。

MATLAB提供了所谓的M-file的方式,可让使用者自行将指令及算式写成巨集程式然后储存成一个特别的文档,其扩展名是m,譬如picture.m,其中的picture就是文件名称。

(1)编写M脚本文件的步骤

●点击MATLAB指令窗工具条上的NewFile图标

,就可打开如图所示的MATLAB文件编辑调试器。

用户即可在空白窗口中编写程序。

输入如下一段程序(picture.m)

x=linspace(0,2*pi,20);

y=sin(x);

plot(x,y,'r+')

title('2Dplot')

点击编辑调试器工具条图标

,在弹出的Windows标准风格的“保存为”对话框中,选择保存文件夹,键入新编文件名(如picture),点击【保存】键,就完成了文件保存。

(2)运行文件

●使picture.m所在目录成为当前目录(系统默认路径),或让该目录处在MATLAB的搜索路径上.

●然后在指令窗口运行以下指令,便可得到图形。

picture

再来看另一个M-file:

area.m的例子

%新建M-file,area.m

%计算一个球的体积

r=input('Typeradius输入半径:

');

Area=pi*r^2;

volume=(4/3)*pi*r^3;

fprintf('半径Theradiusis%12.5f\n',r)

fprintf('面积Theareaofacircleis%12.5f\n',Area)

fprintf('体积Thevolumeofasphereis%12.5f\n',volume)

在指令窗口运行指令area

 

二、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文件中,到第一个非注释行为止的注释行是帮助文本。

当需要帮助时,返回该文本。

例如,»helpfliplr返回上述前八行注释。

4.第一行帮助行,名为H1行,是由lookfor命令搜索的行。

5.函数可以有零个或更多个输入参量。

函数可以有零个或更多个输出参量。

6.函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。

如果输入和输出变量数目多于函数M文件中function语句一开始所规定的数目,则调用时自动返回一个错误。

7.当函数有一个以上输出变量时,输出变量包含在括号内。

例如,[V,D]=eig(A)。

不要把这个句法与等号右边的[V,D]相混淆。

右边的[V,D]是由数组V和D所组成。

8.当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。

函数工作空间变量nargin包含输入参量个数;函数工作空间变量nargout包含输出参量个数。

事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。

例:

计算f

(1)f

(2)+f2(3)

首先建立一个M函数:

fun1.m

functionY=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)

ans=

-12.6023

例:

计算阶层函数fact.m

functionoutput=fact(n)

ifn==1

output=1;

return;

end

output=n*fact(n-1);

【例】M函数文件示例。

[circle.m]

functionsa=circle(r,s)

%CIRCLEplotacircleofradiirinthelinespecifiedbys.

%r指定半径的数值

%s指定线色的字符串

%sa圆面积

%

%circle(r)利用蓝实线画半径为r的圆周线.

%circle(r,s)利用串s指定的线色画半径为r的圆周线.

%sa=circle(r)计算圆面积,并画半径为r的蓝色圆面.

%sa=circle(r,s)计算圆面积,并画半径为r的s色圆面.

ifnargin>2

error('输入宗量太多。

');

end;

ifnargin==1

s='b';

end;

clf;

t=0:

pi/100:

2*pi;

x=r*exp(i*t);

ifnargout==0

plot(x,s);

else

sa=pi*r*r;

fill(real(x),imag(x),s)

end

axis('square')

三MATLAB控制流

for循环结构

For循环允许一组命令以固定的和预定的次数重复。

For循环的一般形式是:

forx=array

{commands}

end

在for和end语句之间的{commands}按数组中的每一列执行一次。

【例】forn=1:

10

x(n)=sin(n*pi/10);

end

»x

x=

Columns1through7

0.30900.58780.80900.95111.00000.95110.8090

Columns8through10

0.58780.30900.0000

For循环可按需要嵌套。

n=0:

1:

10;

fori=1:

11

forj=1:

11

y(i)=sin(n(i));

n(j)=n(j)*10;

end

end

y=

Columns1through7

0-0.50640.9300-0.8027-0.1425-0.9765-0.5118

Columns8through11

0.8586-0.99570.99170.9287

n=

1.0e+012*

Columns1through7

00.10000.20000.30000.40000.50000.6000

Columns8through11

0.70000.80000.90001.0000

可以利用break命令跳出for循环

【例】一个简单的for循环示例。

fori=1:

10;%i依次取1,2,…10,.

x(i)=i;%对每个i值,重复执行由该指令构成的循环体,

end;

x%要求显示运行后数组x的值。

x=

12345678910

while循环结构

与For循环以固定次数求一组命令的值相反,While循环以不定的次数求一组语句的值。

While循环的一般形式是:

whileexpression

{commands}

end

只要在表达式里的所有元素为真,就执行while和end语句之间的{commands}。

【例】num=0;EPS=1;

while(1+EPS)>1

EPS=EPS/2;

num=num+1;

end

»num

num=

53

»EPS=2*EPS

EPS=

2.2204e-016

【例】

x=zeros(1,6);%x是一个的零矩阵

i=1;

whilei<=6,

x(i)=1/i;

i=i+1;

end

»x

x=

1.00000.50000.33330.25000.20000.1667

可以利用break命令跳出while循环

while循环可按需要嵌套。

【例】Fibonacci数组的元素满足Fibonacci规则:

;且

现要求该数组中第一个大于10000的元素。

a

(1)=1;a

(2)=1;i=2;

whilea(i)<=10000

a(i+1)=a(i-1)+a(i);%当现有的元素仍小于10000时,求解下一个元素。

i=i+1;

end;

i,a(i),

i=

21

ans=

10946

if-else-end分支结构

很多情况下,命令的序列必须根据关系的检验有条件地执行。

在编程语言里,这种逻辑由某种If-Else-End结构来提供。

最简单的If-Else-End结构是:

ifexpression

{commands}

end

如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的{commands}【例】»apples=10;

»cost=apples*25

cost=

250

»ifapples>5

cost=(1-20/100)*cost;

end

»cost

cost=

200

假如有两个选择,If-Else-End结构是:

ifexpression

commandsevaluatedifTrue

else

commandsevaluatedifFalse

end

在这里,如果表达式为真,则执行第一组命令;如果表达式是假,则执行第二组命令。

当有三个或更多的选择时,If-Else-End结构采用形式

ifexpression1

commandsevaluatedifexpression1isTrue

elseifexpression2

commandsevaluatedifexpression2isTrue

elseifexpression3

commandsevaluatedifexpression3isTrue

elseifexpression4

commandsevaluatedifexpression4isTrue

elseif……

else

commandsevaluatedifnootherexpressionisTrue

end

最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;接下来的关系表达式不检验,跳过其余的If-Else-End结构。

而且,最后的else命令可有可无。

【例】

ifrand

(1)>0.5

disp('iloveyou')

else

disp('idonotloveyou')

end

【例】一个简单的分支结构。

cost=10;number=12;

ifnumber>8

sums=number*0.95*cost;

end,

sums

sums=

114.0000

【例】用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。

n=100;a=ones(1,n);

fori=3:

n

a(i)=a(i-1)+a(i-2);

ifa(i)>=10000

a(i),

break;%跳出所在的一级循环。

end;

end,

i

ans=

10946

i=

21

switch-case结构

【例】学生的成绩管理,用来演示switch结构的应用。

%划分区域:

满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。

N=input('输入分数');

switchN

case100%得分为100时

S='满分';%列为'满分'等级

case90%得分在90和99之间

S='优秀';%列为'优秀'等级

case80%得分在80和89之间

S='良好';%列为'良好'等级

case60%得分在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=

492

ans=

Indexexceedsmatrixdimensions.

例:

[tang.m]

a=2;b=2;

x=-a:

0.2:

a;y=-b:

0.2:

b;

fori=1:

length(y)

forj=1:

length(x)

ifx(j)+y(i)>1

z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2-1.5*x(j));

elseifx(j)+y(i)<=-1

z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2+1.5*x(j));

elsez(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('pleaseinputanumber:

')

pleaseinputanumber:

22

x=22

o输入字符串

x=input('pleaseinputastring:

','s')

pleaseinputastring:

thisisastring

x=thisisastring

∙输出语句

o输出显示命令

▪自由格式(disp)

disp(23+454-29*4)

361

disp([112233;445566;778899])

112233

445566

778899

disp('thisisastring')

thisisastring

▪格式化输出(fprintf)。

fprintf('Theareais%8.5f\n',area)%注意输出格式前须有%符号,

%跳行符号须有\符号

Theareais12.56637%输出值为8位数含5位小数

在这里你如果学过c语言就能很好的理解了。

o错误消息显示命令

error('thisisanerror')

?

?

thisisanerror

关系操作符

说明

<

小于

<=

小于或等于

>

大于

>=

大于或等于

==

等于

~=

不等于

逻辑操作符

说明

&

|

~

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2