【科学计算与MATLAB语言】MATLAB程序流程控制

在这里插入图片描述

  • 程序的三种基本结构:顺序结构、选择结构、循环结构
  • 程序文件分为脚本文件和函数文件
区分
脚本文件是可以在命令行窗口直接执行的文件,也叫作命令文件;
函数文件是定义一个函数,不能直接执行,而必须以函数调用的方式来调用它。

例:
创建脚本文件和函数文件(可用edit命令创建)在这里插入图片描述

1顺序结构

在这里插入图片描述

  • 按照数据出现的顺序进行处理

例:
线 段 A B , A ( 1 , 1 ) , B ( 4.5 , 4.5 ) , 求 A B 的 长 度 以 及 黄 金 分 割 点 C 的 坐 标 线段AB,A(1,1),B(4.5,4.5),求AB的长度以及黄金分割点C的坐标 线AB,A(1,1),B(4.5,4.5),ABC

a=input('a=');
b=input('b=');
c=a+0.618*(b-a);
s=abs(a-b);       %取模(abs函数:求实数的绝对值、复数的模、字符串的ASCII码值。)
disp(s)
disp(c)

1.1数据的输入

调用格式
A=input(提示信息,选项)
>>A=input('请输入变量A的值:')
请输入变量A的值:100           %运行提示键盘输入

A =

   100

1.2数据的输出

调用格式
disp(输出项)
>>s='Hello World!';
s =

Hello World!
>>disp(s)

Hello World!  %输出格式无变量的名字

1.3程序暂停

调用格式
pause(延迟秒数)
  • 如果省略参数延迟秒数,则程序暂停,直到用户按任意键结束暂停
  • 若要强行中止程序的运行,可使用ctrl+c命令

一个程序一般包括

  • 输入原始数据
  • 对原始数据进行处理
  • 输出处理结果

2选择结构

又称为分支结构,是根据给定的条件是否成立来决定程序的执行流程

在这里插入图片描述

  • if 选择结构
  • switch 选择结构

2.1 if语句实现选择结构

2.1.1单分支if语句

格式

if  条件
    语句组
end
  • 条件:关系运算或逻辑运算来表结果是一个标量或者矩阵
    1.当条件结果为标量时,非零表示条件成立表示条件不成立
    2.当条件结果为矩阵时,如果矩阵是非空矩阵,且不包含零元素,则条件成立,否则条件不成立。
  • 语句组:一条或多条语句

2.1.2双分支if语句

格式

if  条件
    语句组1
else
    语句组2
end

例:
输入一个整数,若为奇数则输出其平方根,否则输出其立方根。

x = input('Please input a number:'); 
if rem(x,2) == 1     %取余 => rem(x,2)
    s = sqrt(x);
else
    s = x ^ (1/3);   % => power(x,1/3)
end
disp(s);

2.1.3多分支if语句

格式

if  条件1
    语句组1
else if 条件2
        语句组2
     ···
else if 条件n
        语句组n
end

例:
输入一个字符。
若为大写字母,则输出其对应的小写字母;
若为小写字母,则输出其对应的大写字母;
若为数字字符,则输出其对应数的平方;
若为其他字符,则原样输出。

x=input('请输入一个字符:','s'); %定义输入的字符为s
if x>='A'& x<='Z'
    y=char(x+('a'-'A'));      %lower(x) char函数把ASCII码矩阵转换为字符串矩阵
else if x>='a'& x<='z'
        y=char(x-('a'-'A'));  %upper(x)
    else if x>='0'
            y=(str2double(x))^2; %把字符串转换为数值
        else
            y=x;
        end
    end
end
disp(y)

2.2 swich语句实现选择结构

格式

switch 表达式
 case  结果表1
       语句组1
 case  结果表2
       语句组2
     ···
 case  结果表n
       语句组n
 otherwise
       语句表m
 end
  • switch表达式其值可以列举
  • case结果表为switch表达式的取值,当取值有多个时,用单元数据表示

例:输入一个英文单词,判断其是否以元音字母开头

x=input('请输入一个英文单词:','s');
switch x(1)
    case {'A','E','I','O','U','a','e','i','o','u'}; %多个结果组成一个单元数据
        disp ('以元音字母开头');
    otherwise
        disp ('以辅音字母开头');
end

3循环结构

循环结构又称为重复结构:重复执行某些条件(循环体)

3.1 for语句实现循环结构

  • 确定循环次数
    格式
for 循环变量=表达式1(初):表达式2(步长):表达式3(终)/矩阵表达式
    循环体语句
end
  • 表达式2可以省略
    在这里插入图片描述

说明:

  • for语句针对向量的每一个元素执行一次循环体。向量有多少个元素,for语句就执行多少次循环体语句。
  • 退出循环后,循环变量的值就是向量的最后一个元素值。
  • 当向量为空时,循环体一次也不会执行。例如:k=1: -1:10就是一个空向量

例:
求Π的值(pai/4=1-1/3+1/5-1/7+…+(-1)^(n+1)/2n-1)

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

%利用矩阵运算
n=input('n=');
x=1:2:(2*n-1);
y=(-1).^(2:n+1)./x;  %y是一个矩阵
pai=4*sum(y) %sum向量求和
%定积分求Π/4
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)
%蒙特卡洛法
s=0
n=input('n=')
for i=1:n
    x=rand(1)*2-1;
    y=rand(1)*2-1;
    if  x^2+y^2<=1
        s=s+1;
    end
end
pai=s/n*4

3.2 while语句实现循环结构

  • 循环次数不确定
    格式
while 条件
      循环语句体
end

例:
从键盘输入任何数,输入0时输入结束,求这些数的平均值和它们之和。

s=0;
n=0;
x=input('x=');
while x~=0
    s=s+x;
    n=n+1;
    x=input('x=');
end
if n>0
    mean=s/n;
end
s
mean

bread语句和continue语句

  • break语句用来跳出循环体,结束整个循环。
  • continue语句用来结束本次循环,接着进行下一次是否执行循环的判断。

例:
求[100, 200]之间第一个能被21整除的整数

for n=100:999
    if rem(n,21)~=0;
        continue;
    end
    disp(n)
    break     %跳出循环  
end

3.3 循环的嵌套

  • 如果一个循环结构的循环体又包含一个循环结构,就称为循环的嵌套,或称为多重循环结构。

例:筛选法求出某自然数范围内的全部素数

%寻找m以内的素数
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)

4函数文件的定义与调用

4.1函数文件的定义

格式
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
  • 当有多个形参时,形参之间用逗号分隔,组成形参表。

  • 当输出形参多于一个时,用方括号括起来,构成一个输出矩阵。

  • 函数文件名通常由函数名再加上扩展名.m组成,函数文件名与函数名也可以不相同。当函数文件名与函数名不相同时,MATLAB将忽略函数名,调用该函数时使用函数文件名。建议函数文件名与函数名一致。

  • return语句表示结束函数的执行。通常也可以不使用return语句。

例:
编写函数文件,求半径为r的圆的面积和周长

function [ s,p ] = fcircle( r ) %fcircle为函数名
%fcircle 此处显示有关此函数的摘要
%   此处显示详细说明
s=pi*r*r;
p=2*pi*r;
end

4.2函数文件的调用

格式
[输出实参表] = 函数名(输入实参表)
  • 在函数调用时,函数输入输出参数称为实际参数,简称实参
  • 输入输出的实参应当与函数定义时的形参个数、顺序一致。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。
[s,p]=fcircle(1)

s =
    3.1416
    
p =
    6.2832

4.3匿名函数

格式
函数句柄变量 = @(匿名函数输入参数)匿名函数表达式

函数句柄变量相当于这个匿名函数的别名。
利用函数句柄可以间接地调用这个函数,@是创建函数句柄的运算符

例:
创建一个函数,该函数的表达式为x²+y²,并求x=3, y=4时的函数值。

f=@(x,y)x^2+y^2
f(3,4)

ans =

    25

除了可以给自定义的函数表达式创建函数句柄以外,还可以给已存在的函数创建函数句柄(包括内部函数和自定义函数)。

格式
函数句柄变量 = @函数名
h=@fcircle
h(1)
ans =

    3.1416

5函数的递归调用

函数的嵌套调用
在一个函数的定义中,调用了其他函数,这就是函数的嵌套调用。
函数的递归调用
一个函数调用它自身称为函数的递归调用。

  • 递归是把一个大型复杂的问题层层转化为一个与原问题相似的、规模较小的问题来求解

1.直接递归调用:在定义函数时直接调用这个函数本身
2.间接递归调用:通过嵌套调用其他函数,在其他函数中又调用这个函数本身来实现

例:利用函数的递归调用求n!

n=input('n='); 
s=fcircle(n);
disp(s)

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

6函数参数与变量的作用域

6.1函数参数的可调性

1.MATLAB在函数调用上有一个特点,就是函数所传递的参数数目是可调的,由于这个特点,同一个函数就可以完成多种功能。
2.在调用函数时,MATLAB有两个预定义变量,nargin和nargout。

  • nargin记录调用这个函数时输入实参的个数
  • nargout记录调用这个函数时输出实参的个数
clear; clc; 
f1 = fout(10);
disp(f1);
f2 = fout(10, 10);
disp(f2);
f3 = fout(10, 10, 10);
disp(f3);
 
%%
function f = fout(a,b,c)
if nargin == 1
    f = a;
else if nargin == 2
        f = a + b;
    else if nargin == 3
            f = (a * b * c) / 3;
        end
    end
end
end

6.2全局变量和局部变量

  • 局部变量是指程序中只在特定过程或函数中可以访问的变量。
  • 变量的作用域是整个MATLAB工作空间,也就是全程有效,所有的函数都可以对它进行存取或修改。
定义格式
global 变量名

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值