例如将列表words中每个项目加上"!"打印出来:
words = ["hello", "world", "spam", "eggs"];
counter = 1;
max_index = length(words);
while counter <= max_index
word=words(counter);
disp(word + "!")
counter = counter + 1;
end
%结果:
hello!
world!
spam!
eggs!
4.2?for循环?
将上述while循环语句更改为for循环语句:
words = ["hello", "world", "spam", "eggs"];
for i=1:length(words)
word=words(i);
disp(word + "!")
end
4.3 拓展?
sum从0,1,...,n累加,直到sum>20时终止循环并打印sum
sum=0;
n=0;
while sum<=20
sum = sum+n;
n = n+1;
end
disp(sum)
或?
sum = 0;
n = 0;
for i=1:10
sum = sum+n;
n=n+1;
if sum>20
break;
end
end
disp(sum)
%结果:
21
5?parfor循环并行计算
5.1 简介
parfor循环是Matlab并行计算工具箱(Parallel Computing Toolboxl)用于并行计算单循环的工具,并行度与CPU核心数有关
软件界面左下角start开启,启动约十几秒
出现这个图标就表示已经开启并行池
开启前可以先对Parallel Preference预设pool数量,电脑多少核心这里就填多少,填多了也没用,下面是并行工具运行时间,默认30分钟
可以多设置一些时长,不需要并行计算时可以点击关闭
5.2 何时使用parfor
1、如果您有一个慢for循环,parfor循环可能很有用。如果您有以下情况,请考虑parfor:
-
一些循环需要很长时间。在这种情况下,worker可以同时执行循环内的计算。确保循环次数超过工作进程数,否则,不会调用所有的核进行运算。
- 简单计算的许多循环,如蒙特卡罗模拟或参数扫描。parfor将循环划分为多个组,以便每个worker执行循环总次数的一部分。
2、如果您有以下情况,parfor循环可能没有用处:
-
运行矢量化的代码,例如x=0? ? ?for i=100? ? ?x=x+1 ?? ?end,执行并行计算时,work1负责第1、5、11次循环,work2执行2、6、12次循环,由于各works同时开始工作,work2开始计算时,第1次迭代也就是work1还未执行完第一个计算,work同样的基于x=0开始进行x=x+1,因此将导致结果x(1)=x(2)。
- 执行所需时间较短的循环,由于需要时间将计算同步给其他workers,因此采用并行计算反而程序运行时间更多。
3、当循环中的迭代依赖于其他迭代的结果时,不能使用parfor循环。每个迭代必须独立于所有其他迭代。
举几个案例解释上述条件:
(1)普通单核计算
ticn = 20;
A = 500;
a = zeros(n);
for i = 1:n
a(i) = max(abs(eig(rand(A))));
endtoc
历时18. 765742秒.?
(2)并行四核计算
ticn = 200;
A = 500;
a = zeros(n);
for i = 1:n
a(i) = max(abs(eig(rand(A))));
endtoc
历时6. 358251秒
那么针对于仿真模拟或者是优化算法中的循环该怎么用,上文也说到了不能对循环中有矢量计算的采用并行方式
(1)单核计算
ticn = 20;
A = 500;
a = zeros(n);
for i = 1:n
b=0;
for j = 1:n
b=b+1;
a(i,j) = max(abs(eig(rand(A))))+1;
end
end
toc
历时39. 582394秒
(2)并行四核计算
可见内循环有一个矢量代码b=b+1,但对于外循环是不受影响的,因此可以将外循环改为parfor,反之如果外循环有矢量代码,内循环没有,就把内循环改为parfor,但不能在parfor循环内使用parfor循环。
ticn = 20;
A = 500;
a = zeros(n);
parfor i = 1:n
b=0;
for j = 1:n
b=b+1;
a(i,j) = max(abs(eig(rand(A))))+1;
end
end
toc
6?if条件语句
Matlab中的if需要加end结束语,if表达式后不需要加":",matlab打印函数disp比较常用,该函数打印字符时加单引号或者双引号都可以
(1)如果某个条件成立,可以用if语句
if 表达式
语句
end
(2)if语句里面部分应当缩进
%实例:
if 10>5
disp(‘正确’)
end
disp(‘程序结束’)
%运行结果:
正确
程序结束
(3)一般实际问题编程中会遇到嵌套if语句,例如:
num=10
if num>5
disp("大于5")
if num<20
disp("数值大于5,小于20")
end
end
%运行结果:
大于5
数值大于5,小于20
(4)当不满足该条件,则输出另一结果,例如?
x=4
if x==5
disp("Yes")
else
disp("No")
end
%运行结果: