0

指定主题:我正在尝试创建一个程序,该程序可以在特定点评估至少多项式和有理函数(三角/等函数也很有趣)的导数。答案应该是该特定点的切线方程。除了使用导数的定义之外,我想不出任何方法来做到这一点。

我是 Ruby 的初学者,我正在尝试制作一个简洁的小程序来计算一些导数。你们中有人知道如何做这样的事情吗?我真正想做的就是评估多项式和有理函数的导数。我感谢任何和所有的帮助。

好像我说的太模糊了。我真的不知道从哪里开始,也没有代码可以显示。如果这是一个问题(怀疑作弊等),那么我将继续练习 Ruby 并最终解决它。这更像是一个接收新代码的帖子,而不是接收编辑过的代码。

4

2 回答 2

1

这是基于Wikipedia 上描述的两点公式的数值评估。请注意,评论中的测试值是理论答案。这对于平方和立方函数似乎非常有效,对于平方根来说,它是 9 位小数。

# First argument is the function to be evaluated, as a Ruby lambda.
# Second argument is the value at which to evaluate the derivative.
# Returns a numeric approximation to f'(x), using machine epsilon
# scaling to avoid numerical instability issues that would occur if
# the h (delta-x) value is too close to zero.
def derivative(f = lambda {|value| value}, x)   # default f(x) = x
  h = x * Math.sqrt(Float::EPSILON)
  lower = x - h
  upper = x + h
  (f[upper] - f[lower]) / (upper - lower)
end

square = lambda {|value| value * value}    # or value**2 if you prefer
p derivative(square, 1.0)   # 2 * x = 2.0
p derivative(square, 2.0)   # 2 * x = 4.0
p derivative(square, 3.0)   # 2 * x = 6.0
square_root = lambda {|value| Math.sqrt(value)}
p derivative(square_root, 1.0)   # 1 / (2*sqrt(x)) = 0.5
p derivative(square_root, 2.0)   # 1 / (2*sqrt(x)) = 0.35355339059327373
p derivative(square_root, 3.0)   # 1 / (2*sqrt(x)) = 0.2886751345948129
cube = lambda {|value| value * value * value}   # or value**3 if you prefer
p derivative(cube, 1.0)   # 3 * x**2 = 3.0
p derivative(cube, 2.0)   # 3 * x**2 = 12.0
p derivative(cube, 3.0)   # 3 * x**2 = 27.0
于 2014-04-25T01:17:05.350 回答
0

首先,您需要为您的函数找到一些机器可读的表示。只要您只想为多项式和有理函数编写此代码,这是可行且非常简单的(具有两个子类的函数类,第一个存储系数,第二个存储两个多项式)。

完成此操作后,您需要derivative在多项式上定义一个方法。这非常容易,因为它将返回另一个多项式。

第三步是使用两个函数的商的导数公式。由于这两个函数都是多项式(并且您已经对它们进行了导数定义),因此您完成了。

请尝试执行此操作并在遇到任何问题时发布问题。

于 2014-04-24T23:33:16.400 回答