如何解决MATLAB中矩阵处理所带来的数值误差?
怎么解决MATLAB中由于矩阵运算所带来的数值误差,例如:A1=rand(100)*10^9; A2=rand(100)*10^8; A3=rand(100)*10^6; A4=rand(100)*10^5; A5=rand(100)*10^3; % 生成5个不同量级的矩阵,维度一致
T=rand(100,32); % 生成一个T矩阵
B0=T'*(A1+A2+A3+A4+A5)*T;% 先做加法,在做乘法
B1=zeros(32);
for k=1:5
B1=T'*A1*T+B1; % 先做乘法,再做加法
end
Err=B1-B0; % 求解两种运算带来的绝对误差
如上面的例子,一般情况下,误差随着数量级的增大,而特别大。
所以,对于矩阵拆分后,不同的运算顺序所带来的误差,应该怎么消除???
万分感谢!!! 【更正问题】怎么解决MATLAB中由于矩阵运算所带来的数值误差,例如:
A1=rand(100)*10^9; A2=rand(100)*10^8; A3=rand(100)*10^6; A4=rand(100)*10^5; A5=rand(100)*10^3; % 生成5个不同量级的矩阵,维度一致
A=A{A1,A2,A3,A4,A5};
T=rand(100,32); % 生成一个T矩阵
B0=T'*(A1+A2+A3+A4+A5)*T;% 先做加法,在做乘法
B1=zeros(32);
for k=1:5
B1=T'*A{k}*T+B1; % 先做乘法,再做加法
end
Err=B1-B0; % 求解两种运算带来的绝对误差 谭四爷 发表于 2016-2-29 10:51
【更正问题】怎么解决MATLAB中由于矩阵运算所带来的数值误差,例如:
A1=rand(100)*10^9; A2=rand(100)*10 ...
可否好奇问下,LZ为何需準到15次方的order ChaChing 发表于 2016-3-8 21:34
可否好奇问下,LZ为何需準到15次方的order
比如,对于结构分析,其中的物理参数矩阵的数值量级就很大啊 谭四爷 发表于 2016-3-9 12:46
比如,对于结构分析,其中的物理参数矩阵的数值量级就很大啊
估计是矩阵病态造成的,可以考虑变换一下消除矩阵的病态问题,或者采用正则化方法进行求解 MVH 发表于 2016-3-9 13:34
估计是矩阵病态造成的,可以考虑变换一下消除矩阵的病态问题,或者采用正则化方法进行求解
谢谢,对于您说的“变换”和“正则化方法”能够详细点吗?我不是很清楚,不知道怎么处理。 http://wenku.baidu.com/view/e525c153ed630b1c58eeb548.html?from=search 本帖最后由 mxlzhenzhu 于 2016-3-11 23:28 编辑
谭四爷 发表于 2016-3-9 15:34
谢谢,对于您说的“变换”和“正则化方法”能够详细点吗?我不是很清楚,不知道怎么处理。
数值分析经典结论还记得那么几个:
1,大数和小数相加,小数被误差吃掉;
2,大数除以小数,结果不确定,损害有效数字位数;
3,数值算法更喜欢数值积分,而不喜欢数值微分,用数值微分常常不稳定,尽量避免;
4,尽量避免直接求逆,通常用解线性代数方程组,解决求逆问题,为了加速收敛,算法一大堆;
和矩阵是否病态没关系,求逆的时候,病态问题才突出;这是要在计算中尽量避免的;
所以编程和理论还是有些区别的;
楼主有兴趣可以了解一下经典Lanczos算法在Gram-Schmidt正交化过程中,精度丢失的原因,也许对于你现在的兴趣点可能有一些裨益;
mxlzhenzhu 发表于 2016-3-11 23:25
数值分析经典结论还记得那么几个:
1,大数和小数相加,小数被误差吃掉;
2,大数除以小数,结果不确定 ...
{:{51}:}非常感谢您的指导,{:{39}:} vibration 发表于 2016-3-10 11:52
http://wenku.baidu.com/view/e525c153ed630b1c58eeb548.html?from=search
谢谢,{:{51}:}
页:
[1]