[已解決 感谢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时答案却会错误
恳请高手有更好的程序解也恳请版主大力帮忙
怎么就那么死板呢?
B=int32(B);
D=;
这两句的作用是什么?主要返回B第一列怎么分配给F的原始坐标的。 如果你确定B的第二列为整数
那么这两句改为下面语句就可以了啊:
G=int32(B(:,2))
D=;
页:
[1]