没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要:本文详细探讨了MATLAB程序设计中的关键技术和实际应用。主要内容包括算法设计、程序的调试与测试、算法与程序的优化、循环控制等方面的讨论,并通过一系列实例进行了具体的解析。通过分类统计、公交线路查询、列主元Gauss消去法等多种类型的程序,深入介绍了MATLAB的基本特性和编程技巧。文章还包括了一些常见的错误类型及其解决方法,以及循环控制的多种实现方式。 适合人群:具备一定编程基础,希望通过具体实例深入理解和掌握MATLAB编程的科研人员和技术开发者。 使用场景及目标:①帮助读者理解和掌握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(k) % 如果 x(i)与已测出的最后 1 个数字相同,
s2(k)=s2(k)+1; % 则对应的计数器加 1
else % 否则,则说明测到新数字
k=k+1; % k 值加 1
s1=[s1;x(i)]; % 将此新数并入 s1,
s2=[s2;1]; %对应的计数器为 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
% “测心术”游戏
format short
a=1;t=0;
while a
a1=rand(100,1);
k=3;s=[];
while k<=10
a1(9*k+1)=a1(19);
k=k+1;
end
a2=reshape(a1,20,5);
a3=reshape(99:-1:0,20,5);
for i=1:5
s=[s,a3(:,i),a2(:,i)]; %生成矩阵
end
if ~t
disp(' //任意想一个两位数 a,然后将这个两位数减去它的个位数
字与十位数字之和,');
disp(' //得到数字 b,再在下面矩阵的奇数列中找到 b,最后记住
其右边对应的小数 c');
pause(10); t=t+1;
end
disp(' '); disp(s);
pause(5); disp(' ');
d=input(' //确定你已经完成计算并记下了那个小数,摁‘Enter’键
呈现此数字\n');
disp(s(19,2)); pause(3); disp(' ');
a=input(' // ‘Enter’退出; =>‘1’再试一次\n');
end
使用说明:运行程序 I 生成一个 20
×
10 的矩阵 s,你任意想一个两位数 a,
按照上面所说的步骤操作,然后在 s 的奇数列中找到 b,将 b 右边的小数记在心里,
再调用程序 II,则返回你所记下的那个小数.(运行演示略)
原理说明:设任意一个两位数 a=10 + ,则 a-( + )=9 =b,所以 b 一定
是 9 的倍数,且只可能在9到81之间.明白了这一点,上面程序中的各种设置就一
目了然了.
1
k
2
k
1
k
2
k
1
k
例3 折半查找算法
要从一个数组 x 中找到一个指定的数 a,通常的做法是从 x 的第一个数开始
顺序查找.如果 x 是一个无序的数组,的确没有比顺序查找更好的方法了,但如果
x 有序,设计查找算法时就要充分利用这已有的规律,折半查找就是针对有序数
组进行查找的一种效率较高的方法.对于一个 维数组,折半查找最多比较次数
为 ,而顺序查找的平均比较次数为 .
n
2
log 1n +
⎢⎥
⎣⎦
/2n
写一个算法:在数组 x 中查找数字 a,其中 x 是一个元素各异并按升序排列
的一维数组.若找到 a,则返回a在x中的位置,若 a 不在 x 中则返回“找不到”.
折半查找算法程序如下:
function s= BinarySearch (x,a)
%折半查找法,x 是按升序排列的一维数组,a 是待查找的数字
n=length(x);
sign=0; %用 sign 标记是否查找成功,赋初值为假,当查找成功时其值为真
top=1;bott=n; %查找区间端点下标,top 为“顶”,bott 为“底”
if a<x(1)|a>x(n) %当a比x的最小值小或比 x 的最大值大时,返回找不到此数,
s='The number is not found'; %并终止程序,否则在 x 的内部查找 a
return;
else
while((sign==0)&(top<=bott))
mid=fix((bott+top)/2); %求中位数并取整
if a==x(mid) %若找到 a
s=mid; %记录它在 x 中的下标,
sign=1; %并置标志变量为真
elseif a<x(mid) %否则,改变区间端点下标
bott=mid-1;
剩余53页未读,继续阅读
资源评论
passionSnail
- 粉丝: 456
- 资源: 7220
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 将json文件抽取到kafka的消息队列(topic)中,再从topic中将数据抽取到hdfs上中的json数据
- pdf拆分合并及解决加密无法编辑
- 各城市-人口就业和工资数据(1978-2022年).xlsx
- qq空间历史删除说说查看
- ESG榜单冲击数据(2000-2022年).zip
- pandoc-3.5-windows-x86-64.msi
- 基于SpringBoot框架实现的网上点餐系统(程序+数据库+报告)
- 【安卓毕业设计】基于androidx的跑步app源码(完整前后端+mysql+说明文档+LW).zip
- 基于SpringBoot的旅游网站(程序+数据库+报告)
- sssssssssssssssshhhhhhhhh
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功