MATLAB程序设计 下载本文

MATLAB程序设计方法及若干程序实例

樊双喜

(河南大学数学与信息科学学院 开封475004)

摘 要 本文通过对MATLAB程序设计中的若干典型问题做简要的分析和总结,并在此基础上着重讨论了有关算法设计、程序的调试与测试、算法与程序的优化以及循环控制等方面的问题.还通过对一些程序实例做具体解析,来方便读者进行编程训练并掌握一些有关MATLAB程序设计方面的基本概念、基本方法以及某些问题的处理技巧等.此外,在文章的最后还给出了几个常用数学方法的算法程序,供读者参考使用.希望能对初学者进行MATLAB编程训练提供一些可供参考的材料,并起到一定的指导和激励作用,进而为MATLAB编程入门打下好的基础. 关键字 算法设计;程序调试与测试;程序优化;循环控制

1 算法与程序

1.1 算法与程序的关系

算法被称为程序的灵魂,因此在介绍程序之前应先了解什么是算法.所谓算法就是对特定问题求解步骤的一种描述.对于一个较复杂的计算或是数据处理的问题,通常是先设计出在理论上可行的算法,即程序的操作步骤,然后再按照算法逐步翻译成相应的程序语言,即计算机可识别的语言.

所谓程序设计,就是使用在计算机上可执行的程序代码来有效的描述用于解决特定问题算法的过程.简单来说,程序就是指令的集合.结构化程序设计由于采用了模块分化与功能分解,自顶向下,即分而治之的方法,因而可将一个较复杂的问题分解为若干子问题,逐步求精.算法是操作的过程,而程序结构和程序流程则是算法的具体体现.

1.2 MATLAB语言的特点

MATLAB语言简洁紧凑,使用方便灵活,库函数极其丰富,其语法规则与科技人员的思维和书写习惯相近,便于操作.MATLAB程序书写形式自由,利用其丰富的库函数避开繁杂的子程序编程任务,压缩了很多不必要的编程工作.另外,它的语法限制不严格,程序设计自由度大.其最大的特点是以矩阵运算为最强,而数值的矩阵化又为运算和处理提供了方便.除此之外,MATLAB还有着非常强大的绘图功能.

1.3 MATLAB程序设计练习

MATLAB有着丰富的库函数,一般情况下应了解并学会使用一些常用的库函数,至少应熟悉函数库中都有哪些常用函数,当需要时可以现学现用.或者能对一些经典函数做一定的改造,以达到解决某一特定问题的目的.但,在大多情况下还需要自己编写程序去处理形形色色的问题.下面就先从一些较简单的程序入手来熟悉MATLAB的编程方式.

例1 一个分类统计函数的设计(分类统计_1)

编写一个函数,统计出一组有序(按升序或降序排列)数字中每种数字的个数,并返回数字种类数.

分析:设待统计数组为x,因为x有序,所以在设计算法时应抓住这个特点.若用s1记录已统计出的数字,则,在对x中的数字进行遍历时,每次只需让x(i)与s1中的最后一个数字进行比较就可以了,若相等,则对应计数器加1,若不等,则说明测到新数,应开辟新的存储单元.其算法程序如下:

function [s,k]=FLTJ_1(x) %x为待统计的一组有序数,返回值s为2列的数组,

%第一列为不同种类的数字,第二列为对应数字的个 %数,k记录统计出的数字种类数目

n=length(x);

s1=x(1); % s1记录测到的新数字,给其赋初值为x的第一个数字 s2=1; % s2记录s1中每个数字的个数,赋初值为x(1)的初始个数1 k=1; % k记录已统计出的数字种类数,初值赋为1 for i=2:n % 从第2项开始遍历数组x

if x(i)==s1(end) % 如果x(i)与已测出的最后1个数字相同, s2(end)=s2(end)+1; % 则对应的计数器加1 else % 否则,则说明测到新数字 s1=[s1;x(i)]; % 将此新数并入s1,

s2=[s2;1]; %对应的计数器为1

k=k+1; % 同时k值加1 end end

s=[s1,s2]; % 将s1与s2拼接成一个两列的数组s

程序运行如下(“?”代表回车,下同.) >> x=[1,2,2,3,3,4,5,5]; ? >> [s,k]=FLTJ_1(x) ? s =

1 1 2 2 3 2 4 1 5 2 k = 5

例2 一个数字游戏的设计

有这样一个数字游戏:在一个20?10的矩阵中,0~99这100个数顺序排列在奇数列中(每20个数组成一列),另有100个图案排列在偶数列中,这样每个数字右边就对应一个图案.你任意想一个两位数a,再让a减去它的个位数字与十位数字之和得到一个数b,然后,在上述矩阵的奇数列中找到b,将b右边的图案记在心里,最后点击指定的按钮,你心里的那个图案将被显示.

下面我们就来编写程序模拟一下这个小游戏,以[0,1]之间的小数代替矩阵中的图案,由MATLAB程序实现如下: 程序I