备战数学建模2-MATLAB中顺序,选择,循环及函数的应用
Posted nuist__NJUPT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了备战数学建模2-MATLAB中顺序,选择,循环及函数的应用相关的知识,希望对你有一定的参考价值。
目录
一、顺序结构程序
脚本文件:可以直接在命令窗口执行,也叫命令文件。
函数文件:不能在命令窗口直接执行,需要使用函数调用的方式调用它。
建立脚本文件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定义全局变量。
以上是关于备战数学建模2-MATLAB中顺序,选择,循环及函数的应用的主要内容,如果未能解决你的问题,请参考以下文章