首页 > 编程语言 >「matlab学习笔记」MATLAB程序流程控制

「matlab学习笔记」MATLAB程序流程控制

时间:2023-02-02 01:33:44浏览次数:63  
标签:语句 文件 end 函数 程序流程 cfrac 循环 matlab MATLAB

中国大学MOOC 科学计算与MATLAB语言(点击此处跳转)

MATLAB官方文档(点击此处跳转)

3.1 程序文件

脚本文件和函数文件

  • 在MATLAB中程序文件的扩展名为.m,所以程序文件也称为M文件。
  • 程序文件分为脚本文件和函数文件。
文件类型 说明
脚本文件 可在命令行窗口直接执行的文件,也叫命令文件
函数文件 定义一个函数,不能直接执行,而必须以函数调用的方式来调用它

文件的建立

  • 用edit命令创建文件。例如>> edit test
  • 用命令按钮创建文件。

image

#建立脚本文件f1.m
A=[1,2,3;4,5,6];
B=[1,2;3,4;5,6];
C=A*B

#在命令行窗口运行脚本文件
>> f1
C =
  22 28
  49 64

#建立函数文件f2.m
function C=f2(A,B)
C=A*B;

#在命令行窗口调用函数文件
>> A=[1,2,3;4,5,6];
>> B=[1,2;3,4;5,6];
>> C=f2(A,B)
C =
  22 28
  49 64

程序的三种基本结构分别是顺序结构、选择结构和循环结构。

3.2 顺序结构程序

MATLAB指令 功能
input(提示信息,选项) 数据的输入
disp(输出项) 数据的输出
pause(延迟秒数) 程序的暂停,若要强行中止程序的运行可使用Ctrl+C命令
#数据的输入
>> A=input('请输入变量A的值:');
请输入变量A的值:100

#数据的输出
>> s='Hello,World';
>> disp(s)
Hello,World
>> a=[1,2,3;4,5,6];
>> disp(a)
 1 2 3
 4 5 6

拓展:黄金分割点

黄金分割点源于黄金矩形。设矩形的长和宽分别为 x 和 y。把这个矩形裁掉一个边长为 y 的正方形后,剩下的小矩形的形状与原来的矩形完全一致,即矩形的长宽之比相同。

image

由黄金矩形的定义

\[\cfrac {x}{y}=\cfrac {y}{x-y} \implies x^2-xy-y^2=0 \]

解得

\[x=\cfrac {y\pm y\sqrt{5}}{2} \implies \cfrac {x}{y}=\cfrac {1\pm\sqrt{5}}{2} \]

\[\cfrac {x}{y}=\cfrac {1+\sqrt{5}}{2} \implies y=\cfrac{\sqrt{5}-1}{2}x \]

\[y=0.618x \]

3.3 选择结构程序

用if语句实现选择结构

单分支if语句

if 条件   #关系运算或逻辑运算。
   语句组 #可以是一条语句,也可以是多条语句。
end

1.当条件结果为标量时,非零表示条件成立,零表示条件不成立。
2.当条件结果为矩阵时,如果矩阵为非空,且不包含零元素,则条件成立,否则不成立。
例如,[1,2;0,4]表示条件时,条件不成立;[1,2;3,4]表示条件时,条件成立。


双分支if语句

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

多分支if语句

if 条件1
   语句组1
elseif 条件2
   语句组2
   …
elseif 条件m
   语句组m
else
   语句组n
end

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

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语句实现选择结构

switch 表达式
    case 结果表1
       语句组1
    case 结果表2
       语句组2
       …
    case 结果表m
       语句组m
    otherwise
       语句组n
end

注意:
1.switch表达式应该是一个其值可以列举的表达式。
例如,double不可列举,所以不能作为switch表达式的值
2.case结果表为switch表达式的取值,当取值有多个时,用单元数据表示。
3.当任意一个分支的语句执行完后,整个switch语句执行完毕(区别于C语言的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

#程序2
c=input('请输入一个单词:','s');
if findstr(c(1),'AEIOUaeiou')>0
   disp([c,'以元音字母开头']);
else
   disp([c,'以辅音字母开头']);
end

1.switch表达式可用取整函数来保证其值的可列举性。
2.case结果表取值有多个时可用num2cell函数将数值矩阵转化为单元矩阵。

3.4 循环结构程序

用for语句实现循环结构

for 循环变量=表达式1:表达式2:表达式3 #初值:步长:终值
    循环体语句
end

image

说明:
1.for语句针对向量的每一个元素执行一次循环体。
2.退出循环之后,循环变量的值就是向量中最后的元素值。
3.当向量为空时,循环体一次也不执行。例如1:-2:10

for语句更一般的格式为

for 循环变量=矩阵表达式
    循环体语句
end

执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直到各列元素处理完毕循环结束。

拓展:计算圆周率 \(\pi\)

(1)利用无穷级数展开式求 \(\pi\) 的近似值

\[\cfrac {\pi}{4}=1-\cfrac {1}{3}+\cfrac {1}{5}-\cfrac {1}{7}+\cdots+(-1)^{n+1}\cfrac {1}{2n-1} \]

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

#程序2
#用向量计算方法写出来的程序更加简洁,也更加具有MATLAB的特点。
n=input('n=?');
x=1:2:(2*n-1);
y=(-1).^(2:n+1)./x;
pai=sum(y)*4

(2)利用定积分的近似值求 \(\pi\) 的近似值

设 $f(x)=\sqrt{1-x^2}{\rm d}x$,求 $\cfrac {\pi}{4}=\int_0^1 {f(x)}\,{\rm d}x$,即求四分之一单位圆的面积。
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)利用蒙特卡洛法求 \(\pi\) 的近似值

在正方形内随机投点,设点落在圆内的概率为 $p=\cfrac {\pi}{4}=\cfrac {落在圆内的点数}{所投点的总数}$。
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 条件 #循环判断条件
      循环体语句
end

说明:
1.while语句多用于循环次数不确定的情况,而对于循环次数确定的情况,使用for语句更方便。
2.针对不同情况可以选择不同的循环语句,但从功能上讲两种循环语句可以相互替代。


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

循环的嵌套

  • 如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。
  • 处于内部的循环叫做内循环,处于外部的循环叫做外循环。

拓展:用筛选法求素数

筛选法求素数的基本思想:要找出 \(2\text{~}m\) 之间的全部素数,首先在 \(2\text{~}m\) 中划去 \(2\) 的倍数(不包括 \(2\)),然后划去 \(3\) 的倍数(不包括 \(3\)),由于 \(4\) 已被划去,再找 \(5\) 的倍数(不包括\(5\)),\(\cdots\),直到再划去不超过 \(

标签:语句,文件,end,函数,程序流程,cfrac,循环,matlab,MATLAB
From: https://www.cnblogs.com/YuukiAsuna/p/17083682.html

相关文章