作者w0005151 (小科)
看板MATLAB
標題[問題]關於矩陣計算精確度
時間Fri Oct 18 02:12:18 2013
最近遇到一種問題是這樣
A,B,C是三個矩陣
A*(B+C)=A*B+A*C
這在數學上是成立的
但在matlab裡面有時卻會遇到兩種計算方法得到不同的結果
而且誤差大到不能忽略
將運算的矩陣乘上適當的factor做scaling之後有時可以解決問題
但這樣就變得很麻煩
因為在計算物理問題時對某個量做這種scaling代表其他參數也要跟著修正
而這可能又會衍生出新的誤差
而且在一個龐大的程式之中如果出現這種錯誤真的是很難抓出來
兩種算法也不一定哪個一定是對的哪個一定是錯的
簡單的例子之中我們或許可以用手算或物理直覺來知道哪一種算法是正確的
但問題變得複雜之後就會變得很麻煩 沒辦法知道哪時該用哪一種寫法
例如我現在碰到一個問題是解這種eigenvalue problem
[V,D]=eig(A*(B+C)-D)
這在數學上等價於 [V,D]=eig(A*B+A*C-D)
但這兩種寫法算出來的eigenvalue卻可以差到數十倍以上
導致我現在十分困擾
這除了慢慢try之外有什麼辦法可以解決嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.32.221
→ infernodimon:把digits調多一點試試看呢? 10/19 00:07
推 alamabarry:矩陣的數字因次最大最小差多少 10/19 17:27
→ w0005151:差三個因次而已 應該不算多吧 10/19 22:51
推 alamabarry:這樣很少~~應該不至於差異太大 10/20 00:36