武神裝攻 发表于 2010-4-14 16:38:05

[已解決 感谢feynmand 版主教导]请问一个矩阵分多个3*1后相乘的程序 PART2

本帖最后由 武神裝攻 于 2010-4-15 07:59 编辑

再次恳请板上英雄出动谢谢
最下面有写程序但是目前遇到其妙的事

例有个矩阵
A=;

B=[ 0.00031001
      0.00021002
      0.00011003
      0.00042001
      0.00052003
      0.00063003]
求C

步骤
看B第二列千位数值皆为相同数字表示为同一个3*1的矩阵
                个位数值表示B的第一列该放入为3*1的哪个位置
EXE
先看B第二列千位数=1 找到第一列
放入3*1的记忆体中 X=
A*X放入C 此时 C=

再看B第二列千位数=2 找到第一列
但是不满3*1所以便看个位数值缺2所以補0 X=
A*X放入C 此时 C=0.0009;0.0019;0.0014]

再看B第二列千位数=3 找到第一列
但是不满3*1所以便看个位数值缺1.2所以補0 X=
A*X放入C 此时 C=0.0006;0.0018;0.0012]

PS:千位数后面也可能是9999 也就是9999001
   且千位数不一定是连续
   例題目改為
   B=[ 31001
         21002
         11003
         42001
         52003
         64003]
   題目千位数雖然少3但结果C是一样
   的也就是千位数整个缺少是不补0

小弟程序:
A=;
K=[ 0.00031001
   0.00021002
   0.00011003
   0.00042001
   0.00052003];
B(:,1) = K(:,1)*100000;
B(:,2) = K(:,2);
B=int32(B);
D=;
E=sub2ind(,D(:,1),D(:,2));
F=zeros(D(end,1),3);
F(E)=B(:,1);
F2=(A*F')/100000;
F3 = size(F2);
rowindex = sum(F2==0,2)==size(F2,2);
colindex = sum(F2==0,1)==size(F2,1);
F2(rowindex,:) = [];
F2(:,colindex) = [];
F3 = F2;
F6=F3(:);
C=F6
小弟因为要算小数点后但因为要整数才能用idivide所以int所以放大值再缩小值所以用
*/100000;
但是这缺点
1.是要先知道DATA是小数后几位如只*/100答案却会错误
2.*/100000要是多加00变10000000或许可以但是改为很多位数例如100000000000000000000时答案却会错误

恳请高手有更好的程序解也恳请版主大力帮忙

feynmand 发表于 2010-4-14 21:28:14

怎么就那么死板呢?

B=int32(B);
D=;

这两句的作用是什么?主要返回B第一列怎么分配给F的原始坐标的。 如果你确定B的第二列为整数
那么这两句改为下面语句就可以了啊:
G=int32(B(:,2))
D=;
页: [1]
查看完整版本: [已解決 感谢feynmand 版主教导]请问一个矩阵分多个3*1后相乘的程序 PART2