的功能,當我試圖使用功能「解決」,在寶石NMatrix,我找到錯誤的結果...解決寶石NMatrix
我試圖求解線性系統a*x = b
其中
a = [[1, 0, 0],
[4, -5, 1],
[0, 0, 1]]
和
b = [0, 0, 729]
應該給答案
x = [0, 145.8, 729]
我所說的解決功能做a.solve(b)
(截至http://www.rubydoc.info/gems/nmatrix/0.2.1/NMatrix#solve-instance_method解釋),但它返回
x = [0, 1.013500790889141e-30, 1.013500790889141e-30]
因此,我有兩個問題:
- 我是不是做錯了什麼?
- 如果不是,用ruby解決矩陣系統的另一種解決方案(不包括GSL)是什麼?
謝謝!
對於'A'的定義是什麼意思?A = NMatrix.new([1,0,0],[0,-5,1],[0,0,1],dtype ::: float64)'?請發佈您正在運行的實際代碼,因爲詢問您是否做錯了不能根據現有信息回答 – engineersmnky
實際代碼是: 'a_mat = NMatrix.eye(n)*( - (c + 1)) a_mat [0,0] = 1 a_mat [n-1,n-1] = 1 (1..n-2).each do | i | a_mat [I,I-1] = C a_mat [I,I + 1] = 1 end' 採用c = 4 和 'B = NMatrix.new([N,1],陣列。 new(n-1,0)+ [nb_days-1],dtype :: float32)' and n = 3 and nb_days = 730 –
給出一個例子通常很有幫助,但是當你做所有的輸入對象應該是有效的Ruby對象。此外,爲每個這樣的對象分配一個變量也很有幫助,這樣讀者就可以在答案和註釋中剪切並粘貼這些對象並按名稱引用(而不必定義它們)。您已將它們分配給常量(名稱以首字母開頭)。如果你的意思是他們是變量,用小寫字母開始每個名字。我編輯了你的答案來做出這些改變。 –