写在前面:作者本人是纯纯的菜鸟,学习的内容来自于 中国大学MOOC 中南大学 《科学计算与MATLAB语言》,欢迎各位大佬或新手在这里和平讨论,如果我有错误请各位不吝赐教,提前感谢各位捧场!
什么是循环结构?
循环结构又称为重复结构。顾名思义,循环结构是利用计算机计算速度快的特点让计算机反复执行某一部分操作的结构。
循环结构的实现
- for语句(本节内容)
- while语句
for语句实现循环结构
for 循环变量=表达式1:表达式2:表达式3
循环体语句
end
%表达式1为初值;表达式2为步长(若为1可省略);表达式3为终值
说明:
- for语句针对向量的每一个元素执行一次循环体(生成的行向量中有多少元素即执行多少次)
- 退出循环之后,循环变量的值是循环变量向量最后一个元素的值;
- 当向量为空时,一次循环也不执行。
例题:计算圆周率
三种方法:
- 利用无穷级数计算;
- 利用定积分计算;
- 利用蒙特卡洛方法计算。
思路1:
对于方法1:看做n个数字累加和问题,用以下递推式描述:
累加项的符号用一下赋值语句实现:g=-g
f=g*1/(2*i-1)
程序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;
n=input('n=?');
x=1:2:2*n-1;
y=(-1).^(2:n+1)./x;
pai=sum(y)*4;
%较为MATLAB的程序——利用矩阵处理
思路2:
定积分的计算有多种方法:矩形法、梯形法和辛普森法等,这里采用梯形法。
梯形法计算定积分:将积分区间等分位n份,每一份都看作细长的梯形,分别计算每个梯形面积并求和即可。
程序2
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
思路3:蒙特卡洛方法
只看第一象限,在正方形的第一象限内的部分生成随机点,随机点在圆内的概率为,因此可以计算。
程序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
还记得在上面说明那一行我专门标注了循环次数是生成的行向量的元素的个数吗?如果生成列向量运行几次呢?答案是一次。
for 循环变量=矩阵表达式
循环体语句
end
循环会一次将矩阵的各列元素赋给循环变量然后执行。
例题:a=[1,2,3,4]和a=[1;2;3;4]分别执行几次?
答案:前者4次,后者1次。
以上就是今天分享的全部内容了,再次感谢各位耐心看到这里!