MatLab3第三讲 MatLab程序设计文档格式.docx

上传人:b****6 文档编号:20408801 上传时间:2023-01-22 格式:DOCX 页数:15 大小:117.06KB
下载 相关 举报
MatLab3第三讲 MatLab程序设计文档格式.docx_第1页
第1页 / 共15页
MatLab3第三讲 MatLab程序设计文档格式.docx_第2页
第2页 / 共15页
MatLab3第三讲 MatLab程序设计文档格式.docx_第3页
第3页 / 共15页
MatLab3第三讲 MatLab程序设计文档格式.docx_第4页
第4页 / 共15页
MatLab3第三讲 MatLab程序设计文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

MatLab3第三讲 MatLab程序设计文档格式.docx

《MatLab3第三讲 MatLab程序设计文档格式.docx》由会员分享,可在线阅读,更多相关《MatLab3第三讲 MatLab程序设计文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

MatLab3第三讲 MatLab程序设计文档格式.docx

体积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'

;

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:

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

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

y=

0-0.50640.9300-0.8027-0.1425-0.9765-0.5118

Columns8through11

0.8586-0.99570.99170.9287

n=

1.0e+012*

00.10000.20000.30000.40000.50000.6000

0.70000.80000.90001.0000

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

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

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

x(i)=i;

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

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

x=

12345678910

while循环结构

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

While循环的一般形式是:

whileexpression

{commands}

只要在表达式里的所有元素为真,就执行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;

»

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;

i,a(i),

i=

21

10946

if-else-end分支结构

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

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

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

ifexpression

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

apples=10;

cost=apples*25

cost=

250

ifapples>

5

cost=(1-20/100)*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

最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;

接下来的关系表达式不检验,跳过其余的If-Else-End结构。

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

ifrand

(1)>

0.5

disp('

iloveyou'

idonotloveyou'

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

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

a(i),

break;

%跳出所在的一级循环。

end;

i

10946

21

switch-case结构

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

%划分区域:

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

60)。

N=input('

输入分数'

switchN

case100%得分为100时

S='

满分'

%列为'

等级

case90%得分在90和99之间

优秀'

优秀'

case80%得分在80和89之间

良好'

良好'

case60%得分在60和79之间

及格'

及格'

otherwise%得分低于60。

不及格'

%列为'

等级

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的最后一行。

lasterr%显示出错原因

A_end=

492

Indexexceedsmatrixdimensions.

[tang.m]

a=2;

b=2;

x=-a:

0.2:

a;

y=-b:

b;

length(y)

forj=1:

length(x)

ifx(j)+y(i)>

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);

axis([-a,a,-b,b,min(min(z)),max(max(z))]);

colormap(flipud(winter));

surf(x,y,z);

MATLAB的输入与输出语句

∙输入语句

o输入数值

x=input('

pleaseinputanumber:

22

x=22

o输入字符串

pleaseinputastring:

'

s'

thisisastring

x=thisisastring

∙输出语句

o输出显示命令

▪自由格式(disp)

disp(23+454-29*4)

361

disp([112233;

445566;

778899])

112233

445566

778899

thisisastring'

thisisastring

▪格式化输出(fprintf)。

fprintf('

Theareais%8.5f\n'

area)%注意输出格式前须有%符号,

%跳行符号须有\符号

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

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

o错误消息显示命令

error('

thisisanerror'

?

thisisanerror

关系操作符

说明

<

小于

=

小于或等于

>

大于

大于或等于

==

等于

~=

不等于

逻辑操作符

&

|

~

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

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1