当前位置:文档之家› 第八章MATLAB编程

第八章MATLAB编程

while mod(100-2*g,4)|g+(100-2*g)/4-36 g=g+1; end; sprintf('鸡数是%d; 兔数是%d',g,36-g)
注: mod(100-2*g,4)0表示100-2*g只脚不全是
兔脚;在mod(100-2*g,4)=0条件下g+(1002*g)/4-360进一步判定100-2*g只脚不全是 兔脚,故当前的g不对应任何解.
if mod(x,i)==0 break; end; end; if i==b y=1; else y=0; end;
例4:编一个函数对随机输入的一个大于1
的正数n,输出不大于n的所有素数
function a=sushubiao(n); if n<2 error(‘输入不合要求!’); end; k=1; for i=1:n if sushu(i) %是否素数 a(k)=i;k=k+1; end; end;
for-end 循环
for-end 循环允许一组命令以预定的 固定次数重复.
其一般形式为:
for i=某一维数组 {循环体} end;
求前n个正整数平方之和
例6:随机输入一个正整数n,计算前n个正整
数平方之和,并用反复执行此程序的办 法验证此和都等于 (1/6)n(n+1)(2n+1) 解:程序为
解:
x=10000*rand for n=2:100 %100为10000的平方根 if fibodt(n)>x %第n个Fibonacci数>x break; end; end; while mod(fibodt(n),2)%第n个Fibonacci数是偶 n=n+1; end; sprintf('不小于%f最小偶Fibonacci数是 %d.',x,fibodt(n))
§8.4 Matlab程序结构
原则上,只要有顺序,循环和分支结构的 计算机语言,即可编程解决任何计算问 题. Matlab有这三种结构,故可用它编 程解决任何计算问题. Matlab虽然没有C语言那样丰富的控制 结构,但Matlab自身的强大功能(众多的 函数及命令)弥补了这个不足,使用户几 乎感觉不到困难.人们评价说: Matlab语言是一种完善而易用的高水平 编程语言.
第八章 Matlab编程及应用
§8.1 §8.2 §8.3 §8.4 §8.5 引言 M文件的形式 全局变量与局部变量 Matlab 的程序结构 Matlab 编程练习题
§8.1
引言
Matlab是一个高性能的科学计算软件,它 将计算,可视化和编程功能集成于一个使 用非常方便的环境. Matlab是一个强有力的操作环境,提供完 整而易于使用的语言,这是一个是很方便 的解释性编程语言,与C语言等兼容.因而, Matlab程序语法简单,容易调试,人机交 互性强. 此外,Matlab有一系列非常强有力的工具 箱和函数,除可用来解决各种各样复杂计 算问题之外,更可给编程带来简化,是公 认最好的第四代计算机语言.
循环结构
计算机的优势之一在于它能按设定的方 案以高速度重复执行若干运算,求得用 手工很难实现的计算结果. 当编程中涉及运行有规律的重复运算时, 要用循环结构,即将某些语句重复执行. 一组被重复执行的语句称为循环体.它 每循环一次,都必须做出是继续重复或 是停止的判断,其依据称为终止条件. Matlab语言提供两种循环方式: for - end 和 while - end
解: tongji.m 的内容如下:
function [p,q]=tongji(x) [m,n]=size(x); % x的行列数 if m~=1 error(‘不是行向量!’); end; p=sum(x)/n; q=0; for i=1:n q=q+(x(i)-p)*(x(i)-p); end;
§8.2 M文件的形式
Matlab程序,即M文件,有两种类型,它们 是:命令文件和函数文件. 命令文件是直接交互指令行操作方式的 发展,非常容易编写,只要把有关的指令 按顺序写出来组成一个M文件即可.但此 类文件不能适应计算复杂的问题. 函数文件相当于C语言的”函数”,可灵 活调用.Matlab编程也提倡尽量多编函 数文件作为子程序,以求程序更清晰,层 次更分明,便于调试和阅读.
if–elseif––else–end分支结构 结构形式:
if 逻辑表达式ex1 {ex1为真时执行的命令序列1} elseif 逻辑表达式ex2 {ex2为真时执行的命令序列2} elseif 逻辑表达式3 {ex3为真时执行的命令序列3} else {ex1-ex3全为假时执行的命令序列} end
A=rand(m,n) %34随机矩阵 for i=1:m for j=1:n p=p+A(i,j); end; end; p=p/m/n; for i=1:m for j=1:n B(i,j)=A(i,j)-p; end; end; p,B %显示结果
while-end 循环
while-end 循环以不定的循环次数求一 组语句的值. 其一般形式为:
调用方法 n=100*rand;sushubiao(n)
例5:编一个函数对随机输入的一个正偶数
2n,验证2n是两个素数之和.
function y=godebaha(n) a=ceil(sqrt(n));y=0; if rem(n,2) | n<4 error('输入不合要求') end; for i=2:a if sushu(i)&sushu(n-i) y=1;break; end; end;
命令文件举例
编写命令文件,只要把有关的指令用”;” 隔开,并按顺序写出来即可. 例1:编一个求前100个正整数之和的命令 文件:example1.m 解: example1.m 的内容如下: s=0; for i=1:100 s=s+i; end; s
函数文件
函数文件一般形式如下:
Function [输出参数1,…,输出参数n] = 函数名(输入参数1,…,输入参数m) {函数体}
Break 指令
功能:前面讲过,break 指令是改变执行顺
序的一种手段.它的功能就是导致最内 层的 while,for,if 等语句终止.
一般形式:在循环体内另设条件(通常用
if — end语句),达到适时退出循环的目 的.
例12 鸡兔同笼问题:已知一笼鸡兔共有
头36,和脚100,求鸡数j和兔数t 解1:g=1;
顺序结构
顺序结构实际上就是用复合表达式构成 的.复合表达式定义为用”;”号连接在 一起的若干表达式: 复合表达式=表达式1;表达式2;…;表达式n; Matlab程序按一行一行从上往下顺序执 行;同一行则按从左往右顺序执行. Goto 语句虽可强行改变执行顺序,但可 读性差,不足取.后面将要介绍的 break 语句才是Matlab编程中经常用来改变执 行顺序的手段.
解2
for j=1:50 if rem(100-j2,4)==0&(j+(100-j2)/4)==36 break; end; j=j+1; end; sprintf('鸡数是%d, 兔数是%d.',j,36-j)
注:若满足判定条件时,当前的j 便是问题
的解.
例13:输入不大于10000的正随机数x,输 出不小于x的最小偶数Fibonacci数
function y=jishuhe(x) n=length(x);y=0; for i=1:n if mod(x(i),2) y=y+x(i); end; end;
%是否奇数
if–else–end 分支结构
结构形式: if 逻辑表达式
{为真时执行的命令序列} else {为假时执行的命令序列} end
注:⑴给该函数文件命名时须与函数名一致. ⑵ n=1时,第一行简化为
Function 输出参数= 函数名(输入参数)
⑶ 输入,输出参数可以是任意类型的量,字 符,不同维数数组或数据结构等. ⑷ 输入参数是已知量,输出参数则要进行计 算,其最后值是函数调用时的返回值.
例2:编一个求一维数组的平均值与方差的 函数文件:tongji.m
while 某一执行循环 体中所有命令,否则,就跳出循环.
例8:对随机输入的一个正数n,输出大于n
的第一个素数 解: n=10000*rand %不大于10000的随机数 i=floor(n+1); %不小于n+1的最小整数 while sushu(i)==0 %i不是素数 i=i+1; end; i %显示i
n=ceil(100*rand) %不大于100的随机数 s=0; for i=1:n s=s+i*i; end; s,s-n*(n+1)*(2n+1)/6
for-end 循环可嵌套
例7:求给定mn实矩阵A元素的平均值p,和各元
素与平均值的偏差组成的矩阵B 解:程序为: m=3;n=4;p=0;
调用方法 x=[1:100];[a,b]=tongji(x)
例3:编一个函数文件sushu.m判定数x是否素
数,若是,返回1,否则,返回0.内容如下:
function y=sushu(x); if((mod(x,1)|~(x>0)) error(‘不是正整数’); elseif x==2|x==3 y=1; elseif x==1 y=0; else b=ceil(sqrt(x))+1; for i=2:b end;
分支结构
为了完成所需的计算任务,命令序列经 常须按关系的检验结果有条件地执行, 这就是分支结构的任务.在Matlab编程 语言里,由 if - end 结构来解决. 分支结构共有三种形式,分别叙述如下.
相关主题