PDA

查看完整版本 : matlab code 问题


kampww
2008-12-17, 07:24
我有一段matlab code如下
clear;
X=[1 2 3 4; 5 6 7 8 ;9 10 11 12];
N=[1 2 3 4; 5 6 7 8 ;9 10 11 12];
N=kron(N,ones(size(X,1),1));
w =[1 1 1 1;1 1 1 1;1 1 1 1];
for i=1:3
for j=1:4
b(i,j)=sqrt(w(i,j)*(N(i,j)-X(i,j))^2);
end
end
c=sum(b,2);
[val ind]=min(c)
result
val =0
ind =1
程序中w及X值是固定的,但是N值会变第一次N=[1 2 3 4]去跟X中的每一个对应位置相减,接下来依序为[5 6 7 8]、[9 10 11 12]我目前仅能算第一次N=[1 2 3 4]跑出一次结果显示值及其索引值,但是后面必须用手动方式修正,想请问有办法让他自动跑出三个答案吗? 如果可以储存每一次的数值(val)及索引(ind)值更好。非常感谢!!

remnant
2008-12-18, 12:06
我有一段matlab code如下
clear;
X=[1 2 3 4; 5 6 7 8 ;9 10 11 12];
N=[1 2 3 4; 5 6 7 8 ;9 10 11 12];
N=kron(N,ones(size(X,1),1));
w =[1 1 1 1;1 1 1 1;1 1...

不懂Kronecker张量,所以,把每个已知量看做blackbox yy一下:
clear;
clc;

X=[1 2 3 4; 5 6 7 8 ;9 10 11 12];
W =[1 1 1 1;1 1 1 1;1 1 1 1];
N=[1 2 3 4; 5 6 7 8 ;9 10 11 12];
N=kron(N,ones(size(X,1),1));

[ X_row, tmp_col ] = size( X ); %% tmp_col临时量,没用
[ N_row, tmp_col ] = size( N );

result_num = N_row / X_row; %% 确定要做几次结果出来

for i = 1 : result_num
%% X大小是一定的,因此这里要做的其实就是正确的分离出大小合适的N来
%% X, N列总是一致的,因此只需要在行上做文章,
%% 第一次,需要取出N的1->X_row行,
%% 第二次,取出N的X_row+1 -> 2*X_row
%% 第三次,取出N的2*X_row+1 -> 3*X_row
%% .....一次类推,得到下面:
N_sub = N( (i-1)*X_row+1 : i*X_row, : );
B = sqrt( W .* ( N_sub - X ) .^ 2 );
[ Val(i), Indx(i) ] = min( sum( B, 2 ) );
end

kampww
2008-12-26, 23:02
可以再请问一下我如果要取出排名前3个4个…到n个最小值及索引可以吗?我有试过sort指令,去sort B矩阵然后用val(1:3),Indx(1:3)取出排名前三的值及索引,但是好像还是不行,可以在请问一下吗?真的非常感谢您!!