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中用作复数。虽然也能实现循环,但是以若是你循环体内有复数,那就乱套了