实验五 MATLAB程序设计
实验者:祝松 年级:机设092 学号:09405701002
一、实验目的
掌握 MATLAB 程序设计的主要方法,熟练编写 MATLAB 函数。
二、实验内容
(1) M 文件的编辑。
(2)程序流程控制结构。
(3)子函数调用和参数传递。
(4)局部变量和全局变量。
三、实验步骤
1. M 文件的编辑
选择 MATLAB 的菜单 File|New|M-file ,打开新的 M 文件进行编辑,然后输入以下内容,并保存文件名为 exp1.m 。
% M 脚本文件
% 功能:计算自然数列 1 ~ 100 的数列和
s=0;
for n=1:100
s=s+n;
end
s
保存好文件后,在命令窗口输入 exp1 即可运行该脚本文件,注意观察变量空间。接着创建 M 函数文件,然后输入以下内容,并保存文件名为 exp2.m 。
% 这是 M 函数文件
% 功能:计算自然数列 1 ~ x 的数列和
function s=exp2(x)
s=0;
for n=1:x
s=s+n;
end
保存好文件后,在命令窗口输入
>>clear
>>s=exp2(100)
以open命令可以打开M文件进行修改
>>open conv % 打开 conv 函数
2. 程序流程控制结构
1) for 循环结构
for n=1:10
n
end
另一种形式的 for 循环:
n=10:-1:5
for i=n % 循环的次数为向量 n 的列数
i
end
2) while 循环结构
在命令窗口输入:
>>clear,clc; x=1;
while 1
x=x*2
end
将会看到 MATLAB 进入死循环,因为 while 判断的值恒为真,这时须按下 Ctrl + C 键来中断运行,并且可看到 x 的值为无穷大。
练习: (1) 请把 exp2.m 函数文件用 while 循环改写。
(2) 用 π /4 ≈ 1 - 1/3+1/5 - 1/7+ … 公式求 π 的近似值,直到最后一项的绝对值小于10?6为止,试编写其 M 脚本文件。
3) if-else-end 分支结构
if-else-end 分支有如下 3 种形式。
(a) if 表达式
语句组 1
end
(b) if表达式
语句组 1
else
语句组 2
end
(c) if 表达式 A
语句组 1
elseif 表达式 B
语句组 2
elseif
语句组 3
……
else
语句组 n
end
4) switch-case 结构
创建 M 脚本文件 exp3.m ,输入以下内容并在命令窗口中运行。
% 功能:判断键盘输入的数是奇数还是偶数
n=input('n=');
if isempty(n)
error('please input n')
end
switch mod(n,2)
case 1
A=' 奇数 '
case 0
A=' 偶数 '
end
3. 子函数和参数传递
有一个函数 g ( x ) =?n!( x = 1,2,3 … ) ,试编写实现该函数的函数文件。
n?1x
function g=exp4(x) % 主函数
g=0;
for n=1:x
g=g+fact(n); % 调用子函数
end
function y=fact(k) % 子函数
y=1;
for i=1:k
y=y*i;
end
输入参数可以由函数 nargin 计算,下面的例子 sinplot2( ) ,当只输入一个参数 w 时,sinplot2( ) 函数会给 p 赋予默认值 0 。
function y=sinplot (w,p)
if nargin>2
erro(‘too many input’)
end
if nargin==1 p=0;
end
x=linspace(0,2*pi,500);
z=sin(x.*w+p);
练习: (1) 编写求矩形面积函数 rect ,当没有输入参数时,显示提示信息;当只输入一个参数时,则以该参数作为正方形的边长计算其面积;当有两个参数时,则以这两个参 数为长和宽计算其面积。
(2) 编写一个字符串加密函数 nch=my_code( ch , x) ,其中 ch 是字符串参数, x 为整 数;加密方法是:把 ch 的每一个字符的 ASCII 码值加上 x ,得到的即为加密后的新 的字符串 nch 。由于可显示 ASCII 码值是有范围的 (32 , 126) ,因此当得到的 ASCII码值大于 126 时,需要减去 93 。同理,再编写一个解码函数 nch=my_dcode( ch , x) 。 提示: char(32:126) 可获得 ASCII 码值为 32 ~ 126 的字符。
4. 局部变量和全局变量
自程序执行开始到退出 MATLAB ,始终存放在工作空间,可被任何命令文件和数据文件存取或修改的变量即是全局变量,全局变量可用于函数之间传递参数,全局变量用关键 字 global 声明。编写一个求和的函数文件,其名为 summ.m 。程序如下:
function s=summ
global BEG END
k=BEG:END;
s=sum(k);
再编写调用 M 脚本文件 use.m 来调用 summ.m 函数文件,它们之间通过全局变量传递参数。
程序如下:
global BEG END
BEG=1;
END=10;
s1=summ; BEG=1;
END=20;
s2=summ;
第二篇:实验五 欧拉法Matlab实验报告
北京理工大学珠海学院实验报告
ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY
班级2012电气2班 学号120109021010 姓名 陈冲 指导教师 张凯 成绩
实验题目 (实验五) 欧拉法 实验地点及时间 JD501 2014/1/2(6-7节)
一、实验目的
1.掌握用程序语言来编辑函数。
2.学会用MATLAB编写Euler.m以及TranEuler.m函数。
二、实验环境
Matlab软件
三、实验内容
1、以书中第124页题目11为例编辑程序来实现计算结果。
2、使用MATLAB进行编写:
第一步:编写Euler.m函数,代码如下
编写TranEuler.m函数,代码如下
第二步:利用上述函数编辑命令:(可见实验结果中的截图)
在此之前先建立一个名为f.m的M文件,代码如下
function z=f(x);
z=8-3y;
再编辑代码:
得到了欧拉法的结果:y(0.4)=2.47838030901267
编辑另一段命令:
得到改进欧拉法的结果:y(0.4)=2.46543714659780
在此基础上,我还编辑龙格库达的命令窗口代码,如下:
四、实验题目
用欧拉法和改进欧拉法求解初值问题,试取步长计算的近似值。
五、实验结果
六、总结
通过这次实验我掌握了将得到的解进一步精确,而且要学会比较这几种方法的精确性,显然,四阶龙格库达比改进欧拉发精确,改进欧拉发比欧拉法精确。
实验难度不大,要比较n的取值不同,产生的影响不同。
…….