Matlab基础之矩阵循环纯⼩⽩零基础,⾮⼩⽩绕道,⽂档写的⽐较乱,将就着看吧。
⼀、for循环
for循环和c++的for循环还是有区别的,⽤起来简化很多。格式:for 。。。end
example1;
创建⼀个10阶的:
s = 10;
H = zeros(s);
for c = 1:s
for r = 1:s
H(r,c) = 1/(r+c-1);
end
end
数字求和:
sum=0;
for i=1:1:100
sum=sum+i;fprintf格式
end
fprintf('sum =%d',sum);
矩阵运算:
a=[1 2 3;4 5 6;7 8 9];
for i=1:size(a,1)//矩阵a的⾏
for j=1:size(a,2)//矩阵a的列
if a(i,j)>5
a(i,j)=sqrt(a(i,j));
end
end
end
for i=1:size(a,1)
for j=1:size(a,2)
if(j>2)
fprintf('%f\n',a(i,j));
else
fprintf('%f\t\t',a(i,j));
end
end
end
result:
1.000000
2.000000
3.000000
4.000000
5.000000 2.449490
2.645751 2.828427
3.000000
⼆、while循环
1.⽤while循环计算10的阶乘:
n = 10;
f = n;
while n > 1//判断条件不带括号也⾏啊
n = n-1;
f = f*n;
end
disp(['n! = ' num2str(f)])
2.计算输⼊数(正数)的平均数:
%变量如下:
%x
%sum_x,n,average
x=input('input one number please !\n');
sum_x=0;
n=0;
while(x>0)
n=n+1;
sum_x=sum_x+x;
x=input('input one number please !\n');
if (x<0)
break;
end;
end;
if(n==0)
fprintf('input a positive number please !\n');
else
fprintf('Only input a number so only the average !\n')
average=sum_x/n;
fprintf('average is :%f\n',average);
end
三、逻辑数组
就是给⼀个数组进⾏逻辑运算,它和数组⽤循环的⽅式计算效果⼀样,但效率⽐较⾼。
1.⽐如⼀个数组a=[1 2 3;4 5 6;7 8 9],对它执⾏命令c=a>3时,此时逻辑矩阵c=[0 0 0;1 1 1;1 1 1]; 再执⾏a(c)时,就是取a矩阵⾥对应逻辑矩阵c为真时的值:4 5 6 7 8 9;
若执⾏a(c)=sqrt(a(c))时,
a =
1.0000
2.0000
3.0000
2.0000 2.2361 2.4495
2.6458 2.8284
3.0000
我们可以把for循环⾥第三个代码⽤逻辑数组(矩阵)来实现:
a=[1 2 3;4 5 6;7 8 9];
c=a>5;
a(c)=sqrt(a(c));
i=0;
j=0;
for i=1:3
for j=1:3
if j>2
fprintf('%f\n',a(i,j));
else
fprintf('%f\t',a(i,j));
end
end;
end;
那么两种⽅法那种效率更好呢?下⾯就来对⽐看看for Loop:
a=1:10000;
b=reshape(a,100,100);%Devide a into 100*100 tstart=tic;%Time is strat
for i=1:100
for j=1:100
if b(i,j)>3000
b(i,j)=sqrt(b(i,j));
end
end
end
time_end=toc(tstart);%Time is over
fprintf('the use of time is :%f',time_end); %%%%%
result:
the use of time is :0.003353>>;
logical:
a=1:10000;
b=reshape(a,100,100);
tstart=tic;%Time is strat
c=b>3000;
b(c)=sqrt(b(c));
time_end=toc(tstart);%Time is over
fprintf('the use of time is :%f',time_end); %%%%%%
result:
the use of time is :0.002274>>
逻辑运算 要快些。
四、选择排序和冒泡排序
%1.选择排序
a=[1 2 -1 3 2 6 8 8 2 3 2 10];
n=length(a);
for i=1:length(a)-1
for j=i+1:length(a)
if(a(i)>a(j))
t=a(i);
a(i)=a(j);
a(j)=t;
end
end
end
disp('排序后:')
a
%2.冒泡排序
a=[1 2 -1 3 2 6 8 8 2 3 2 10];
n=length(a);
for i=1:n-1
for j=1:n-i
if a(j+1)<a(j)
temp=a(j);
a(j)=a(j+1);
a(j+1)=temp;
end
end
end
disp('')
a
%3.matlab⾃带排序函数sort();
a=[1 2 -1 3 2 6 8 8 2 3 2 10];
b=sort(a,'descend');%升序排列
c=sort(a,'ascend');%降序排列
disp('')
b
c
%result:
排序后:
a =
-
1 1 2 2 2 2 3 3 6 8 8 10对于sort()函数想了解更多,参考matlab⽂档。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论