急! matlab 条件求和

来源:百度知道 编辑:UC知道 时间:2024/07/07 06:20:39
原问题简化如下(实际中A有50列)
A=[1 8 4 5 2;
3 7 5 6 1;
6 4 3 7 8]
B=[3 7 9 2 6] (B的列数与A相同)
求向量C(C的列数与A的行数相同)
首先求A的每一列的最小值得到[1 4 3 5 1],然后根据最小值将所在的列数对应将B中的元素相加得C,具体方法为:
A的第一行有2个最小值分别为1,5,分别为第1,4列中的数,于是将B的第1,4个数相加为C的第一个元素;
A的第二行有1个最小值1,为第5列的数,于是将B的第5个数(只有一个数,无法相加)作为C的第二个元素;
A的第三行有2个最小值分别为4,3,分别为第2,3列中的数,于是将A的第2,3列数相加作为C的第三个元素。
如何编程自动解决上述问题?
跪求! 高手进! 不好意思,上面的问题有一个地方打错了,倒数第三行“于是将A的第2,3列”改为“于是将B的第2,3列”

clear;clc;
A=[1 8 4 5 2;
3 7 5 6 1;
6 4 3 7 8]
B=[3 7 9 2 6]
C=zeros(1,size(A,1));
[mval,idx]=min(A);
for i=1:size(A,1)
C(i)=sum(B(idx==i));
end
C

%不管效率,先个你一个样板
%另外,你的题目叙述有点问题

[m, n] = size(A);
x = min(A);
k = length(x);
j = 2;
while j <= k
t = find(x(1 : j-1) == x(j));
if length(t) > 0
x(j) = [];
k = k - 1;
end
j = j + 1;
end

C = zeros(1, m);
for i = 1 : m
for j = 1 : k
t = find(A(i, :) == x(j));
if length(t) > 0
C(i) = C(i) + sum(B(t));
end
end
end

disp(C)