matlab条件循环问题,程序如图,S(1,1)/S(i,i)>X,X的数值不管为多少,S1的行列数都一样,什么问题呢?

如题所述

直接看你程序的话,每循环一次,都对S1进行重新的赋值,最后S1的行列大小肯定是满足条件最大的 i-1。没看懂你flag=1的条件是?

你是要找到能满足你循环条件的行/列数,然后再对这些行列数赋值吗? 你可以用find函数查找位置,然后再赋值。具体用法help find

调试程序,可以通过Debug,在U1= 。。。。语句之前设置断点,看看S1有没有变化追问

S矩阵是奇异值矩阵,我想通过消去最小奇异值来完成计算,最终得到F1=U1*S1*V1.'。

追答

[row,col] = find(diag(S)/S(1,1)>0.01), 获取前面较大的奇异值得位置,S是只有对角线上有元素吧?那diag函数就去掉
S1 = S(row,col),将此位置的值付给S1,如果直接赋值不行,就用循环试试

追问

我试了一下你所说的方法,挺有用的,但是如果我就得用我图中所示的条件循环,那该怎么改呢?

追答

根据先验信息,S上对角线元素,S(i,i)是随i减小的,你的目的是找到满足S(1,1)/S(i,i)>100的最小i,所以在循环内部可以,第一层pos = i,break;第二层循环 break;也就是跳出循环。然后呢,就用S1 = S(1:pos-1,1:pos-1);U1 = U(:,1:pos-1) ;V1 = 。。。。。,你分析一下对否?

PS:不要把i作为循环的变量,i 在Matlab中用作复数。虽然也能实现循环,但是以若是你循环体内有复数,那就乱套了

温馨提示:答案为网友推荐,仅供参考
相似回答