数学建模社区-数学中国

标题: 循环求指导 [打印本页]

作者: 爱的侍者    时间: 2012-8-13 10:13
标题: 循环求指导
>> for i=1:5,
for j=1,5,
a(i,j)=1/(i+j-1)
end
end

ans =

     5


a =

    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111


ans =

     5


a =

    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111


ans =

     5


a =

    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111


ans =

     5


a =

    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111


ans =

     5


a =

    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111

为什么a(i,j)=1/(i+j-1)后面不加分号,就会产生这样的结果???
i=1 运行五次 i=2 运行五次 。。。。
之后它输出怎么控制的,怎么重复了5次相同的,这里的ans 默认为什么?
作者: gaoxian    时间: 2012-8-13 10:26
你这里的j=1:5还是j=1和5?
j=1,5,这行导致了i每循环一次就会出现一个ans=5
如果这样写
for i=1:5
for j=1:5
a(i,j)=1/(i+j-1)
end
end那么每循环一次就会出现一次a=
如果加了分号,那么在最后再输出一遍a就可以得到最后结果
a =

    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111
作者: 爱的侍者    时间: 2012-8-13 17:19
gaoxian 发表于 2012-8-13 10:26
你这里的j=1:5还是j=1和5?
j=1,5,这行导致了i每循环一次就会出现一个ans=5
如果这样写

谢谢您的回复,我这里可能抄错了,j=1:5。
但是我这里没有搞懂的是2个问题:假设这里的j=1,5的时候

第一个:
这里的ans 应该是默认变量名,最近一次操作运算结果。那么最后一次运算的结果应该是a(i,j)啊,怎么是j=5吗???这里ans不应该选取a(i,j)的最后值嘛(当i=5,j=5的时候)

第二个:这里为什么会出现5个 ans ,不是应该出现2*5 个ans吗?

期待回复!
作者: gaoxian    时间: 2012-8-13 18:24
爱的侍者 发表于 2012-8-13 17:19
谢谢您的回复,我这里可能抄错了,j=1:5。
但是我这里没有搞懂的是2个问题:假设这里的j=1,5的时候

第一个问题:你这里j=1,5,并不是j=1和j=5其实你这样写的作用是这个意思
for i=1:5
for j=1
5
a(i,j)=1/(i+j-1)
end
end
也就是说其实j是一个确定的值为1,然而i每循环一次都会输出一次ans=5,这个5并不是j=5
ans是matlab中默认的结果变量. 每次matlab进行运算后, 结果都要储存在指定的变量中. 如果你只是输入表 达式, 却不指定把表达式的运算结果储存在那个变量里面, 那么matlab就自 动地将结果储存在ans变量中. 直到下一次不带指定存储变量的运算结束前, ans中 所储存的值不变.
意思就是你现在程序中有两个表达式5和1/(i+j-1),但是第一个表达式5你没有存储到变量里,那么就直接存在ans中,第二个表达式你将结果存在了a里,所以循环结束时候ans=5而不是你说的a的最后值。
第二个问题:你这里的j=1,5,应该你运行的程序就是这样写的,也许你的本意是j=1:5,让j循环的,但是由于疏忽把冒号写成了逗号,这样就只循环i=1:5循环五次,其实j这时候根本就不循环,所以就会出现5个ans,还是那个理由就是j=1,5,不是j=1和j=5,可能我一楼的疑问让你误解了。
这样回复应该能明白了吧。。。
作者: 爱的侍者    时间: 2012-8-14 10:57
gaoxian 发表于 2012-8-13 18:24
第一个问题:你这里j=1,5,并不是j=1和j=5其实你这样写的作用是这个意思
for i=1:5
for j=1

感谢您的如此详细的回复~ 完全明白啦 谢谢~!~
作者: gaoxian    时间: 2012-8-14 11:42
爱的侍者 发表于 2012-8-14 10:57
感谢您的如此详细的回复~ 完全明白啦 谢谢~!~

互相学习~~~




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5