matlab & 数学建模
第三讲 matlab程序设计。
一、 m文件。
我们前面所介绍在matlab所做的运算,是适合于所要计算的算式不太长或是想以交谈式方式做运算,如果要计算的算式很长有数十行或是须要一再执行的算式,则那样的方式就行不通了。matlab提供了所谓的 m-file 的方式,可让使用者自行将指令及算式写成巨集程式然后储存成一个特别的文档,其扩展名是m,譬如 其中的picture就是文件名称。
1)编写m脚本文件的步骤。
点击matlab指令窗工具条上的new file图标,就可打开如图所示的matlab文件编辑调试器。用户即可在空白窗口中编写程序。
输入如下一段程序 (
x=linspace(0,2*pi,20);
y=sin(x);
plot(x,y,'r+')
title('2d plot')
点击编辑调试器工具条图标,在弹出的windows标准风格的“保存为”对话框中,选择保存文件夹,键入新编文件名(如picture),点击【保存】键,就完成了文件保存。
2)运行文件。
使所在目录成为当前目录(系统默认路径),或让该目录处在matlab的搜索路径上。
然后在指令窗口运行以下指令,便可得到图形。
picture
再来看另一个 m-file: 的例子
新建m-file,
计算一个球的体积
r = input('type radius 输入半径:')
area=pi*r^2;
volume=(4/3)*pi*r^3;
fprintf('半径 the radius is %12.5f',r)
fprintf('面积 the area of a circle is %12.5f',area)
fprintf('体积 the volume of a sphere is %12.5f',volume)
在指令窗口运行指令 area
二、 m文件函数。
一个函数m文件与脚本文件类似之处在于它们都是一个有。m 扩展名的文本文件。如同脚本m文件一样,函数m文件不进入命令窗口,而是由文本编辑器所创建的外部文本文件。
一个函数的m文件与脚本文件在通信方面是不同的。函数与matlab工作空间之间的通信,只通过传递给它的变量和通过它所创建的输出变量。在函数内中间变量不出现在matlab工作空间,或与matlab工作空间不交互。
一个函数的m文件的第一行把m文件定义为一个函数,并指定它的名字。它与文件名相同,但没有。m 扩展名。
它也定义了它的输入和输出变量。
m文件函数之间可以互相调用。
m文件函数必须遵循以下特定的规则。
1. 函数名和文件名必须相同。例如,函数fliplr 存储在名为 文件中。
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 包含输出参量个数。
事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。
例: ,计算f(1)f(2)+f2(3)
首先建立一个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)ans =
例:计算阶层函数
function output = fact(n)
if n ==1
output = 1;
return;
end output = n*fact(n-1);
例】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);
elsesa=pi*r*r;
fill(real(x),imag(x),s)
endaxis('square')
for循环允许一组命令以固定的和预定的次数重复。for循环的一般形式是:
for x = array
commands}
end在for和end语句之间的按数组中的每一列执行一次。
例】 for n=1:10
x(n)=sin(n*pi/10);endx
x =columns 1 through 7
columns 8 through 10
for循环可按需要嵌套。
n=0:1:10;
for i=1:11
for j=1:11
y(i)=sin(n(i));
n(j)=n(j)*10;
endend
y =columns 1 through 7
columns 8 through 11
n =1.0e+012 *
columns 1 through 7
columns 8 through 11
可以利用break命令跳出for循环。
例】一个简单的for循环示例。
for i=1:10i依次取1,2,…10,.
x(i)=i对每个i值,重复执行由该指令构成的循环体,end;
x要求显示运行后数组x的值。 x =
与for循环以固定次数求一组命令的值相反,while 循环以不定的次数求一组语句的值。while循环的一般形式是:
while expression
commands}
end只要在表达式里的所有元素为真,就执行while和end 语句之间的。
例】 num=0;eps=1;
while (1+eps)>1
eps=eps/2;
num=num+1;
endnumnum =
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 =可以利用break命令跳出while循环。
while循环可按需要嵌套。
例】fibonacci数组的元素满足fibonacci 规则: ,且。现要求该数组中第一个大于10000的元素。
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 =
ans =
matlab
实验。四 调幅信号通过带通滤波器。一 实验目的。1 掌握如何使用matlab进行系统的时域和频域分析2 掌握如何使用matlab进行系统的稳定性分析。二 实验内容和要求1 实验内容。1 练习matlab7.0或以上版本。2 练习掌握matlab进行系统的时频域分析和稳定性分析2 实验要求 每位学生独...
matlab
第1章矩阵及其基本运算。matlab,即 矩阵实验室 它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍matlab的命令及其用法。1 实数值矩阵输入。matlab的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。不管是任何矩阵 向量 我们可以直接按行方式...
matlab
matlab程序设计 数学软件i 授课人 艾斯卡尔。课时 周学时 2 2,共18周。授课班级 2008级应数班。授课地点 数学学院2 课程类型 本课程是新大重点课程。电子教案说明 电子教案以word为工作界面,采用notebook技术与matlab相连接,集教学与演示为一体 同时采用vba技术与外部...