关于matlab中的循环语句while和for的提问:我想写出6*6的Hilber矩阵g,自己的编程如下:

g=zeros(6);i=1;j=1;
while i<7
for j=1:6
g(i,j)=1/(i+j-1); end
i=i+1;
end;
format rat
g
结果显示没问题。若我用另一种方法写如下:
g=zeros(6);i=1;j=1;
while i<7
while j<7
g(i,j)=1/(i+j-1); j=j+1;end

i=i+1;
end;
format rat
g

结果显示为
g =

1 1/2 1/3 1/4 1/5 1/6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
不知到是什么原因?另外请问matlab中可以用大括号吗?如何依次识别并且结束多个循环体?

说明白的话可以额外加分奥。

1.显然你的第二个while有问题。当j=7之后,第二个while退出循环,此时i=2开始第二次计算,但是j始终是等于7的,所以从第二次的循环开始,后面的while j<7都不成立。所以你最好在 i=i+1;旁边给一个初始化j=1;即可。
2.matlab不是C语言,不能用大括号表明程序段。识别循环开始结束都是通过while——end或者for——end所以在编程的时候,最好用退格的方法,这样看起来方便些。比如
while i<7
for j=1:6
g(i,j)=1/(i+j-1);
end
i=i+1;
end;追问

那么在matlab中的{ }是什么用呢?谢谢

追答

在matlab里面,大括号用得不多,很多人甚至从来没用过,我也绝少使用,所以你大可不必为此烦恼。等到要用的时候再看不迟。
我个人用得最多的地方还是把一个矩阵分成几块cell,然后调用,如:a = cell(m, n) ; a{1} = a(1,1);
但实际上,大括号用处很多。具体的你可以搜索一下“matlab 大括号”,如末尾的参考资料就是我找到的一个相关介绍的网页。

参考资料:http://group.sciencenet.cn/home.php?mod=space&uid=436588&do=blog&id=316907

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-09
第一轮循环完成后 j=7 后面i=2 3 4 5 6 7 时j总是等于7
不执行while j<7
g(i,j)=1/(i+j-1); j=j+1;end

可改为
>> g=zeros(6);i=1;j=1;
while i<7
j=1;
while j<7
g(i,j)=1/(i+j-1); j=j+1;
end
i=i+1;
end;
format rat
g追问

请问在matlab中prod函数是干什么的呢?比如 while prod(1:n)<=1e100是什么意思?希望您尽量说得详细一些,谢谢。除此之外我们知道prod可以用来求矩阵的每一行的积prod(A,1)或者每一列的积prod(A,2).

追答

prod 是连乘
prod(1:n)<=1e100
相当于n!即n的阶乘小于10的100次方
X = [0 1 2
3 4 5]

prod(X,1) is [0 4 10] ==[ 0*3 1*4 2*5]
prod(X,2) is [ 0 =0*1*2
60] =3*4*5

本回答被提问者采纳
第2个回答  2011-09-09
在i=1第一轮循环后j=7,while语句不会将j重设为1,因此从i=2开始j一直是7,也就没有执行中间嵌套的循环程序。修改程序如下
另外,MATLAB中的大括号表示数组

g=zeros(6);i=1;j=1;
while i<7
while j<7
g(i,j)=1/(i+j-1);
j=j+1;
end
j=1;
i=i+1;
end
format rat
g
相似回答