首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gem NMatrix的求解功能

gem NMatrix的求解功能
EN

Stack Overflow用户
提问于 2017-09-26 15:42:19
回答 1查看 156关注 0票数 1

当我尝试在gem NMatrix中使用“求解”函数时,我发现错误的结果.

我试图求解线性系统a*x = b,其中

代码语言:javascript
复制
a = [[1,  0, 0], 
     [4, -5, 1],
     [0,  0, 1]]

代码语言:javascript
复制
b = [0, 0, 729]

哪个应该给出答案

代码语言:javascript
复制
x = [0, 145.8, 729]

我调用执行a.solve(b)的解决方案函数(如在方法中解释的那样),但它返回

代码语言:javascript
复制
x = [0, 1.013500790889141e-30, 1.013500790889141e-30]

因此,我有两个问题:

  1. 我做错了什么吗?
  2. 如果不是,用红宝石解决矩阵系统的另一个解决方案(不包括GSL)是什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-26 20:11:13

要回答问题的第2部分,可以使用Ruby的内置矩阵类。

代码语言:javascript
复制
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)]

如果一个人更喜欢浮动(而不是有理数),

代码语言:javascript
复制
a.map(&:to_f)
  #=> [0.0, 145.8, 729.0]

参见Matrix#lupMatrix::LUPDecomposition#solve,它们使用LU分解来求解线性系统。

如果线性方程组没有解(例如[[0,0], [0,0]]*x = b)或无穷多个解(即m是奇异的),则Ruby将引发异常。例如,

代码语言:javascript
复制
Matrix[[0,0],[0,0]].lup.solve [1, 1]
  #=> ExceptionForMatrix::ErrNotRegular: Not Regular Matrix

require matrix使矩阵向量类(和子类)都可以使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46430721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档