gpt4 book ai didi

Ruby Newton 方法给出了错误的结果?

转载 作者:数据小太阳 更新时间:2023-10-29 08:46:29 25 4
gpt4 key购买 nike

我有以下代码将尝试求解多项式系统:

require "bigdecimal"
require "bigdecimal/newton"
include Newton

class Function
attr_reader :zero, :one, :two, :ten, :eps
def initialize()
@zero = BigDecimal::new("0.0")
@one = BigDecimal::new("1.0")
@two = BigDecimal::new("2.0")
@ten = BigDecimal::new("10.0")
@eps = BigDecimal::new("1.0e-16")
end

def values(x) # <= defines functions solved
f = []
f1 = x[0] + x[1] - 7
f2 = x[0]*x[0] + x[1]*x[1] - 29
f <<= f1
f <<= f2
f
end
end
f = Function.new
x = [f.zero,f.zero]
nlsolve(f,x)
puts x.map(&:to_i)

这输出 [1,5]。显然应该是 [2,5] 因为这是系统的正确解决方案:

x + y = 7
x*x + y*y = 29

也许罪魁祸首是我对 BigDecimalto_i 调用,但这不应该像数学那样远。

有什么想法吗?

奖励问题

ruby stdlib 说你可以在没有 BigDecimal 的情况下使用它,但是将 float 传递给 initialize 中的所有变量会给我这个错误:

ruby/2.1.0/bigdecimal/ludcmp.rb:23:in 'div': 参数数量错误(2 为 1)(ArgumentError)

这是为什么?

最佳答案

关于奖金问题:

我认为问题出在 bigdecimal/ludcmp.rb 中:

https://github.com/lian/ruby-bigdecimal-backport/blob/master/lib/bigdecimal/ludcmp.rb

在第 23 行,它正在调用 'one' 上的 div 方法

scales <<= one.div(nrmrow,prec)

您将其作为 float 传递,但是 float 的 div 方法需要一个参数,而 bigdecimals 需要两个参数。如果您将初始化中的所有变量更改为 float 但保留

@one  = BigDecimal::new("1.0")

它将超过 ludcmp.rb 的第 23 行(尽管稍后在代码中仍会因相同原因出错)。

关于Ruby Newton 方法给出了错误的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26930120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com