专题三 Matlab程序流程控制

一.顺序结构称程序

1.edit命令创建脚本

edit filename;

2.顺序结构

数据输入:A = input('提示信息');
数据输出:disp(A);
程序暂停:pause(delay time);  注:时间为0,程序停止
         ctrl+c 强行终止程序
1  有一线段AB,A的坐标为(11),B的坐标为(4.54.5),求AB的长度,
以及黄金分割点C的坐标。
a=input('a=');
b=input('b=');
c=a+0.618*(b-a);
s=abs(a-b);
disp(s)
disp(c)

二.if语句

1.当条件语句为矩阵,矩阵非空且不包含非零元素时为真。

1  输入一个整数,若为奇数则输出其平方根,否则输出其立方根。(双分支)  
x=input('请输入x的值:');
if rem(x,2)==1    %等价if rem(x,2)
    y=sqrt(x);
else
    y=x^(1/3);    %等价y=power(x,1/3);
end
y
2  输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出
其对应的大写字母;若为数字字符则输出其对应数的平方,若为其他字符则原样输出。
c=input('请输入一个字符:','s');
if c>='A' && c<='Z'         %多分支
    disp(lower(c))
elseif c>='a' && c<='z'
    disp(upper(c))
elseif c>='0' && c<='9'
    disp(str2double(c)^2)
else
    disp(c)
end

三.switch语句

1  输入一个英文单词,判断它是否以元音字母开头。
%%使用switch语句
c=input('请输入一个单词:','s');
switch c(1) 
    case {'A','E','I','O','U','a','e','i','o','u'} 
        disp([c,'以元音字母开头']);
    otherwise 
        disp([c,'以辅音字母开头']);
end

%%使用if语句findstr函数 
c=input('请输入一个单词:','s');
if findstr(c(1),'AEIOUaeiou')>0
    disp([c,'以元音字母开头']);
else
    disp([c,'以辅音字母开头']);
end
2  PM2.5是指大气中直径小于或等于2.5微米的可入肺颗粒物,是衡量空气质量的重要标。
假定空气质量等级以PM2.5数值划分为6级。 PM2.5数值在[035)空气质量为优,[3575)
为良,[75115)为轻度污染,[115150)为中度污染,[150250)为重度污染,大于等
于250为严重污染。编写程序,输入PM2.5数值,输出空气质量等级。
g=input('请输入PM2.5值:');
switch fix(g) 
    case num2cell(0:34)   % num2cell:将数值矩阵转换为单元矩阵
        disp('空气质量优');
    case num2cell(35:74) 
        disp('空气质量良好');
    case num2cell(75:114) 
        disp('空气质量轻度污染');
    case num2cell(115:149) 
        disp('空气质量中度污染'); 
    case num2cell(150:249) 
        disp('空气质量重度污染');  
    otherwise 
        disp('空气质量严重污染');
end

四.for语句

1.说明

    1)for语句针对向量的每一个元素执行一次循环体
    2)退出循环后,循环变量的值就是向量中最后元素的值
    3)向量为空循环体不执行
    4)对于矩阵,循环变量=矩阵的每一列,此时循环变量为向量
     (例:5行4列矩阵执行4次)
例:计算圆周率π。
(1)利用无穷级数展开式求π的近似值。
%%用if循环语句%
y=0;
g=-1;
n=input('n=?'); 
for i=1:n
    g=-g;
    y=y+g/(2*i-1); 
end
pai=4*y

%%用向量求和的方法实现程序%
n=input('n=?');
x=1:2:(2*n-1);
y=(-1).^(2:n+1)./x;
pai=sum(y)*42)利用定积分的近似值求π的近似值。
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=4*sum(s)


(3)利用蒙特卡洛法求π的近似值。
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语句

1  从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
msum=0;
n=0;
x=input('Enter a number (end in 0):');
while x~=0
    msum=msum+x;
    n=n+1;
    x=input('Enter a number (end in 0):');
end
if n>0
    msum
    mean=msum/n
end
2[100200]之间第一个能被21整除的整数。
for n=100:200
    if rem(n,21)~=0
        continue      %continue跳出本次循环,继续执行下一次
    end
    n
    break          %break跳出循环
end
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)

六.函数文件定义与调用

1.定义、调用

    return:表示结束函数的执行,可不使用,程序会自动返回
1  编写函数文件,求半径为r的圆的面积和周长。
%%functoin 输出形参表=函数名(输入形参表)%
function [s,p]=fcircle(r)
s=pi*r*r;
p=2*pi*r;

2.匿名函数

    基本格式:
    函数句柄变量=@(匿名函数输入参数)匿名函数表达式   @:函数句柄运算名
    函数句柄变量=@函数名
2  已知=(40)/((30)+(20))
①当()=+10 ln⁡(^2+5)时,的值是多少。
②当()=1×2+2×3+3×4+⋯+×(+1)时,的值是多少。
分别用匿名函数和函数文件定义函数。
%%第二问的函数文件f2.m。%
function f=f2(n)
f=0;
for k=1:n
    f=f+k*(k+1);
end
%%第一问脚本文件mf.m。%
f1=@(n) n+10*log(n*n+5);
y1=f1(40)/(f1(30)+f1(20))
y2=f2(40)/(f2(30)+f2(20))

七.函数的递归调用

专题三 Matlab程序流程控制_第1张图片

1  利用函数的递归调用,求n!。
函数文件fact.m如下:
function f=fact (n)
if n<=1
    f=1;
else
    f=fact (n-1)*n;    %递归调用求(n-1)!
end
在脚本文件a.m中调用函数文件fact.m,求n!。
n=input('Please input n=');
s=fact (n);
disp(s)
2  Fibonacci数列定义如下:
                f1=1
                f2=1
                fn=fn-1+fn-2   (n>2) 
编写递归调用函数求Fibonacci数列的第n项,然后调用该函数验证Fibonacci数列
的如下性质:
                  f1^2+f2^2+f3^2+……+fn^2=fn×fn+1
首先建立函数文件ffib.m。
function f=ffib(n)
if n>2
    f=ffib(n-1)+ffib(n-2);
else
    f=1;
end
建立程序文件test.m。
F=[];
for k=1:20
    F=[F,ffib(k)*ffib(k)];
end
sum(F)
ffib(20)*ffib(21)

八.函数参数与变量的作用域

1.函数参数的可调性

    nargin: 记录输入实参的个数
    nargout:记录输出实参的个数
1  利用nargin和nargout建立函数文件test.m。
function fout=test(a,b,c)
if nargin==1       %输入参数为一个时
    fout=a;
elseif nargin==2   %输入参数为两个时
    fout=a+b;
elseif nargin==3
    fout=(a*b*c)/2;
end

2.全局变量与局部变量

    全局变量定义格式:global 变量名
2  利用全局变量建立函数文件wad.m。
function f=wad(x,y)
global ALPHA BETA
f=ALPHA*x+BETA*y;

%%在工作区使用全局变量
>>global ALPHA BETA
>>ALPHA=1
>>BETA=2
>>s=wad(2)
s = 
     5

Study from MOOC

你可能感兴趣的:(Matlab学习笔记)