当我尝试在gem 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)的解决方案函数(如在方法中解释的那样),但它返回
x = [0, 1.013500790889141e-30, 1.013500790889141e-30]因此,我有两个问题:
谢谢!
发布于 2017-09-26 20:11:13
要回答问题的第2部分,可以使用Ruby的内置矩阵类。
require 'matrix'
m = Matrix[[1, 0, 0], [4, -5, 1], [0, 0, 1]]
#=> Matrix[[1, 0, 0], [4, -5, 1], [0, 0, 1]]
b = Vector[0, 0, 729]
#=> Vector[0, 0, 729]
a = m.lup.solve(b).to_a
#=> [(0/1), (729/5), (729/1)]如果一个人更喜欢浮动(而不是有理数),
a.map(&:to_f)
#=> [0.0, 145.8, 729.0]参见Matrix#lup和Matrix::LUPDecomposition#solve,它们使用LU分解来求解线性系统。
如果线性方程组没有解(例如[[0,0], [0,0]]*x = b)或无穷多个解(即m是奇异的),则Ruby将引发异常。例如,
Matrix[[0,0],[0,0]].lup.solve [1, 1]
#=> ExceptionForMatrix::ErrNotRegular: Not Regular Matrixrequire matrix使矩阵和向量类(和子类)都可以使用。
https://stackoverflow.com/questions/46430721
复制相似问题