备战数学建模2-MATLAB中顺序,选择,循环及函数的应用

目录

一、顺序结构程序

 二、if实现选择结构

三、用switch实现选择结构

四、for语句实现循环结构

五、while语句实现循环结构

六、函数文件的定义与调用


一、顺序结构程序

脚本文件:可以直接在命令窗口执行,也叫命令文件。

函数文件:不能在命令窗口直接执行,需要使用函数调用的方式调用它。

建立脚本文件f.m,并创建矩阵A和B,并计算乘积,代码如下所示:

A = [1,2,3; 4,5,6] ;
B = [1,2; 3,4; 5,6] ;
C = A * B 

在命令窗口输入f,运行脚本文件。

建立函数文件fs.m,代码如下所示:

function C = fs(A,B)
C = A * B ;
end

在命令窗口调用函数文件,代码如下所示:

A = [1,2,3; 4,5,6] ;
B = [1,2; 3,4; 5,6] ;
c = fs(A,B) 

顺序结构就是按照排列,顺序执行程序,哈哈,废话文学。

数据的输入:input('提示信息') ;

数据的输出:disp();

如下代码,等待键盘输入ans,并输出:

ans = input('请输入变量a的值:') ;
disp(ans)

程序的暂停,pause(延迟秒数)函数。

我们看一下上面的例题,代码如下:

a = 1 + i ;
b = 4.5 + 4.5i ;
s = abs(a - b) ;
c = a + 0.618*(b-a) ;
disp(s);
disp(c);

 二、if实现选择结构

1-单分支条件语句

如果条件结果是标量,非零表示条件成立,零则表示条件不成立。

如果条件结果为矩阵,当矩阵非空且不包含0元素,则条件成立,反之,不成立。

例如:矩阵[1,2;0,4]作为条件,则不成立;矩阵[1,2;3,4]作为条件,则条件成立。

2-双分支if语句

直接看上面的例子1即可,代码如下:

x = input('请输入x的值:') ;

if mod(x,2)==1
y = sqrt(x) ;
else
y = x ^ (1/3) ;
end 
>> y

3-多分支if语句

多分支语句仅执行其中一个。

 我们直接看一下上面的例子2,代码如下:

c = input('请输入一个字符:') ;

if c>='A' && c <= 'Z'
disp(lower(c));
else if c>='a' & c <='z'
disp(upper(c)) ;
else if c>='0' && c<='9'
disp(str2double(c)^2) ;
else
disp(c);
end
end
end

三、用switch实现选择结构

switch表达式应该是一个其值可以列举的表达式。

我们看一下上面的例子1,代码入戏:

c = input('请输入一个单词:', 's') ;

switch c(1)
case {'a','e','i','o','u','A','E','I','O','U'}
disp([c,'以元音字母开头']) ;
otherwise
disp([c,'以辅音字母开头']) ;
end

 也可以使用findstr()函数查找单词首字母在'aeiouAEIOU'中的下标,若大于0,则说明以元音字母开头,代码入下:

c = input('请输入一个单词:', 's') ;

if findstr(c(1), 'aeiouAEIOU') > 0
disp([c,'以元音字母开头']) ;
else
disp([c,'以辅音字母开头']) ;
end

我们看一下啊上面的例子2,可以使用if或者switch选择结构实现,代码如下:

p = input('请输入PM2.5的数值:') ;

switch fix(p)
case num2cell(0:34)
disp('空气质量优') ;
case num2cell(35:74)
disp('空气质量良好') ;
case num2cell(75:114)
disp('空气质量轻度污染') ;
case num2cell(115:149)
disp('空气质量中度污染') ;
case num2cell(150:249)
disp('空气质量重度污染')
otherwise 
disp('空气质量严重污染') ;
end

当然也可以这样写,代码如下:

g = input('请输入PM2.5的数值:') ;

if fix(g)>=0 && fix(g)<=34
disp('空气质量优') ;
else if fix(g)>=35 && fix(g)<=74
disp('空气质量良好') ;
else if fix(g)>=75 && fix(g)<=114
disp('空气质量轻度污染') ;
else if fix(g)>=115 && fix(g)<=149
disp('空气质量中度污染') ;
else if fix(g)>=150 && fix(g)<=249
disp('空气质量重度污染') ;
else
disp('空气质量严重污染') ;
end
end
end
end
end

四、for语句实现循环结构

for语句针对向量的每一个元素执行一次循环体。退出循环的值就是向量最后元素的值,当向量为空时,不执行循环。

我们求圆周率Π的近似值,用下面几种方法实现。

1-利用无穷级数展开式求Π的近似值,代码如下:

y = 0 ;
g = -1 ;
n = input('请输入一个n:') ;

for i=1:n
g = -g ;
y = y + g * (1 / (2*i - 1)) ;
end
pai = 4 * y 

 2-用向量求和的方式求圆周率Π,代码如下:

n = input('请输入迭代次数n:') ;
x = 1:2:(2*n-1) ;
y = (-1).^(2:n+1)./x ;
pai = sum(y) * 4 

3-利用定积分的近似值求Π的近似值,其实就是求所有的曲边梯形的面积,再求和,代码如下所示:

 

a = 0 ;
b = 1 ;
n = input('请输入一个整数n:') ;

h = (b-a) / n ;
x = a : h : b ;
f = sqrt(1- x.*x) ;
s = [] ;
for k = 1:n
s1 = (f(k) + f(k+1)) * h / 2 ; 
s = [s,s1] ;
end
pai = sum(s) * 4

4-利用蒙特卡罗方法求圆周率Π,求出概率P,就可以求出Π,代码如下所示:

 

s = 0 ; %记录落在圆形中的总点数
n = input('请输入投入的总点数n:') ;

for i = 1:n
x = rand(1) ;
y = rand(1) ;
if x*x+y*y<=1
s = s + 1 ;
end
end
pai = s / n * 4 

五、while语句实现循环结构

while语句多用于循环体不确定的情况,循环题确定的情况,使用for语句更方便,我们看一下例子1。

例子1的代码如下所示:

sum = 0 ;
n = 0 ;
x = input('请输入一个整数x:') ;

while x~= 0
sum = sum + x ;
n = n + 1 ;
x = input('请输入整数x:') ;
end

if n > 0 
sum
mean = sum / n 
end

break语句和continue语句,break终止所有循环,continue是结束本次循环。

看一下上面的例子2,代码如下:

for i=100:200
if mod(i,21) ~= 0
continue ;
end
i
break ;
end

循环里面仍有循环,也就是循环的嵌套。我们看一下这个例子3. 

例子3的参考代码如下:

m = input('请输入一个正整数m:') ;

p = 1 : m ;
p(1) = 0 ;
for i=2:sqrt(m)
for j = 2*i:i:m
p(j) = 0 ;
end
end
n = find(p~=0) ;
p(n)

六、函数文件的定义与调用

函数文件的基本结构如下:

function 输出形参表 = 函数名(输入形参表)

注释说明部分

函数主体语句

注意:当有多个形参时,形参之间用逗号分割,形成形参表,当输出形参多于一个时,应该用方括号括起来,形成一个输出矩阵。

另外一般来说,我们使得函数名和函数文件名统一,即函数名.m等于函数文件名。

函数中可以使用return语句结束函数的执行。

我们看一下上面的例子,首先建立名称为fc.m的函数文件,并输入函数如下:

function [s1,c1] = fc(r)
s1 = pi * r * r ;
c1 = 2 * pi * r ;
end

 在MATLAB命令窗口调用函数fc(),半径为10,面积为s,周长为c,代码如下:

 [s,c] = fc(10) 

函数的递归调用:函数调用自身的过程,一般来说代码简洁,但是会包含大量重复计算,复杂度较高。

我们看一下上面的例子1,我们创建函数文件fact.m,代码如下所示:

function f = fact(n)
if n==1
    f = 1 ;
else
    f = n * fact(n-1) ;
end

在命令窗口调用函数求解n的阶乘,代码如下:

s = fact(4); 
disp(s) ;

我们看一下例子2,编写函数验证斐波那契数列有以上性质,首先编写函数文件fib.m,代码如下:

function f = fib(n)
if n==1 || n==2
    f = 1 ;
else
    f = fib(n-1) + fib(n-2) ;
end

 在命令窗口调用函数,验证斐波那契数列的上述性质,代码如下:

s1 = 0 ;
for i=1:20
s1 = s1 + fib(i) * fib(i) ;
end
s2 = fib(20) * fib(21) ;
disp(s1) ;
disp(s2) ;

函数参数与变量的作用域

函数参数的可调性:nargin记录输入实参的个数,nargout记录输出实参的个数。

建立函数文件text.m,测试xnargin和nargout,代码如下:

function fout = text(a,b,c)
if nargin == 1
    fout = a ;
end
if nargin == 2
    fout = a + b ;
end
if nargin == 3 
    fout = (a*b*c) / 2 ;
end

MATLAB命令窗口输入如下代码,测试结果分别为:1,3,12

f = text(1)
f = text(1,2)
f = text(2,3,4)

局部变量和全部变量:

局部变量:在特定的过程或者函数中可以访问的变量。

全局变量:在MATLAB全局中都可以访问的变量。使用global定义全局变量。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuist__NJUPT

给个鼓励吧,谢谢你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值