对于我正在从事的项目,我正在创建一类可以执行的多项式。多项式类可以执行加,减,乘,合成除法等操作。它也可以正确地表示它。
对于该项目,我们需要为牛顿方法创建一个类。我能够为f创建一个可调用的函数类,这样
>f=polynomial(2,3,4)
>f
2+3x+4x^2
>f(3)
47
我有一个派生函数polynomial.derivative(f)
输出3+8x
。
我想定义一个标记为Df
的函数,以便在我的牛顿方法代码中可以说Df(x)
。如果x = 2:
>Df(2)
19
答案 0 :(得分:1)
多项式的导数仍然是多项式。因此,您的3+8x
函数应该返回一个新的polynomial.derivative
,而不是返回字符串polynomial
。
class polynomial:
def __init__(c, b, a):
self.coefs = [c, b, a]
[...]
def derivative(self):
return polynomial(*[i*c for i,c in enumerate(self.coefs) if i > 0], 0)
因此,您可以按以下方式使用它:
> f = polynomial(2, 3, 4)
> Df = f.derivative()
> f
2+3x+4x^2
> Df
3+8x+0x^2
> f(3)
47
> Df(2)
19
当然是enumerate
,而不是enumerates
。同样,__init__
错过了self
参数。我直接在SO上编写了代码,而没有任何语法检查。
您当然可以在.py
文件中编写。这是一个完整的工作示例:
class Polynomial:
def __init__(self, c, b, a):
self.coefs = [c, b, a]
self._derivative = None
@property
def derivative(self):
if self._derivative is None:
self._derivative = Polynomial(*[i*c for i,c in enumerate(self.coefs) if i > 0], 0)
return self._derivative
def __str__(self):
return "+".join([
str(c) + ("x" if i > 0 else "") + (f"^{i}" if i > 1 else "")
for i, c in enumerate(self.coefs)
if c != 0
])
def __call__(self, x):
return sum([c * (x**i) for i, c in enumerate(self.coefs)])
if __name__ == '__main__':
f = Polynomial(2, 3, 4)
print(f"f: y={f}")
print(f"f(3) = {f(3)}")
print(f"f': y={f.derivative}")
print(f"f'(2) = {f.derivative(2)}")
f: y=2+3x+4x^2
f(3) = 47
f': y=3+8x
f'(2) = 19
您可以使用自己喜欢的名称重命名该属性:derivative
,Df
,prime
等。