作业帮 > 综合 > 作业

matlab 矩阵第一列与第二列想比较

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/13 17:59:50
matlab 矩阵第一列与第二列想比较
t=[1;2;0;4;0;1];
b=[1 2 18 1 1 0 1
2 1 20 1 1 1 1
3 2 35 1 0 0 1
4 2 20 1 1 0 0
5 1 15 1 0 0 0
6 2 15 1 1 1 1];
[tm,tn]=size(t);
[bm,bn]=size(b);
ntable=zeros(size(b));%产生0矩阵用来存执行结果
i=1;
for j=1:bm
rul=t(j,i); %取出t矩阵第j列i行的值
cna=cname_d(j,i);%取出b矩阵第j列i行的值
if rul > 0 %如果t矩阵第j列i行的值大於0
if rul==cna %如果t矩阵与b矩阵第j列i行的值相同
ntable(j)=cname_d(i,:);%把b矩阵第j列i行存在ntable
end
end
i=i+1
end
小弟想要比较两个矩阵第n列第n行(n是相同的值)的值是否相等,如果相等就把b矩阵和t矩阵相等的那一行记录到ntable里面.
更详细说明:
想要比较两个矩阵的第一列中的数值,如果t矩阵的第一列第一行与b矩阵中的第一列第一行的值相等,就把b矩阵的第一列第一行记录到ntable里面,如果t矩阵的第二列第二行与b矩阵中的第二列第二行的值相等,就把b矩阵的第二列第二行记录到ntable里面.
程式码:
t=[1;2;0;4;0;1];
b=[1 2 18 1 1 0 1
2 1 20 1 1 1 1
3 2 35 1 0 0 1
4 2 20 1 1 0 0
5 1 15 1 0 0 0
6 2 15 1 1 1 1];
[bm,bn]=size(b);
ntable=zeros(size(b));%产生0矩阵用来存执行结果
i=1;
for j=1:bm
rul=t(j,i); %取出t矩阵第j列i行的值
cna=cname_d(j,i);%取出b矩阵第j列i行的值
if rul > 0 %如果t矩阵第j列i行的值大於0
if rul==cna %如果t矩阵与b矩阵第j列i行的值相同
ntable(j)=cname_d(i,:);%把b矩阵第j列i行存在ntable
end
end
i=i+1
end
执行后显示错误
In an assignment A(I) = B,the number of elements in B and I must be the same.
这该如何解决呢?
我将你的代码复制到我的matlab里面不识别cname_d(i,j)这个矩阵,就用下面的替换.
你原代码有以下错误:t是6*1的矩阵,而b是6*7的矩阵,在进行元素比较时会出错,也就是上面显示的那个意思.另外ntable(j)=cname_d(i,:);%把b矩阵第j列i行存在ntable 我在运行时也提示出错;还有,
i=1;
for j=1:bm
按你这样每循环一次j 和i都加1,这样下来只能比较对角线的元素了,应该用两个for循环.
下面我改了下,可以运行:
t=[ 1 0 0 0 0 0 0;
2 0 0 0 0 0 0;
0 0 0 0 0 0 0;
4 0 0 0 0 0 0;
0 0 0 0 0 0 0;
1 0 0 0 0 0 0];
b=[1 2 18 1 1 0 1
2 1 20 1 1 1 1
3 2 35 1 0 0 1
4 2 20 1 1 0 0
5 1 15 1 0 0 0
6 2 15 1 1 1 1];
[tm,tn]=size(t);
[bm,bn]=size(b);
ntable=zeros(size(b));%产生0矩阵用来存执行结果
for i=1:bn
for j=1:bm
rul=t(j,i); %取出t矩阵第j列i行的值
cna=b(j,i);%取出b矩阵第j列i行的值
if rul > 0 %如果t矩阵第j列i行的值大於0
if rul==cna; %如果t矩阵与b矩阵第j列i行的值相同
ntable(j,i)=b(j,i);%把b矩阵第j列i行存在ntable
end
end
end
end
ntable