これが C/C++ で解決されたことは理解していますが、それらの言語を Python に変換できるほど十分に慣れていません。これをPythonで作成しようとしています。私が来ることができた最も近いものはこれでした:
#This is meant to work for functions of the form x^a + b = 0
def secant(base, exp=2, it=20):
def f(x):
return x**exp - base
x1 = base / float(exp**2)
xnm1 = x1 - 5
xnm2 = x1 + 5
xn = 0
for n in range(it):
q = (xnm1-xnm2)/float(f(xnm1)-f(xnm2))
xn = xnm1 - (f(xnm1)*q)
xnm1, xnm2 = xn, xnm1
return xn
print secant(2, 2)
これはエラーを返します:
Traceback (most recent call last):
File "/Users/Joe/Desktop/secant.py", line 16, in <module>
print secant(2, 2)
File "/Users/Joe/Desktop/secant.py", line 11, in secant
q = (xnm1-xnm2)/float(f(xnm1)-f(xnm2))
ZeroDivisionError: float division by zero
しかし、このコードの基になった Newton メソッドをプログラムすることができました。それが役立つ場合は、次のとおりです。
def newton(base, exp=2, it=20):
def f(x):
return x**exp - base
def df(x):
return exp*(x**(exp-1))
x1 = base / float(exp**2)
xnp = x1
xn = 0
for n in range(it):
xn = xnp - ((f(xnp)/df(xnp)))
xnp = xn
return xn
次の方法では、20 回の反復後に 12 桁の精度で答えが得られます。どんな助けでも大歓迎です。