Finden Sie die numerische Lösung der folgenden nichtlinearen Gleichung unter Verwendung der Dichotomie und der Newtonschen Methode.
sin(x)=0
Wenn $ f (x) $ stetig ist und $ f (a) f (b) <0 $ im Intervall $ x = [a, b] $ ist, ist die Lösung, dass $ f (x) = 0 $ im Intervall Wie man einen findet.
Der Algorithmus ist
Um die Lösung von $ x = π $ zu finden, wurden die Anfangswerte auf $ a_0 = 3.0 $ und $ b_0 = 3.5 $ gesetzt.
import math
def f(x):
return math.sin(x)
EPS1 = 0.00001
EPS2 = 0.00001
a = 3.0
b = 3.5
while True:
c = (a + b)/2
if f(a)*f(c) < 0:
b = c
else:
a = c
if abs(f(c)) < EPS1 or abs(a - b) < EPS2:
break
print("x = %f" % c)
>>> print("x = %f" % c)
x = 3.141602
Eine Methode zum Ermitteln der Tangente von $ f (x) $ in $ x_i $, zum Aktualisieren des Schnittpunkts der Tangente und der $ x $ -Achse als nächste $ x_ {i + 1} $ und zum Durchführen sequentieller Berechnungen.
Die Tangente $ g (x) $ von $ f (x) $ in $ x_i $ ist
g(x)-f(x_i)=f^{'}(x_i)(x-x_i)
Setzen Sie $ g (x) = 0 $, um den Schnittpunkt der Tangente und der $ x $ -Achse als nächstes $ x_ {i + 1} $ zu aktualisieren
0-f(x_i) = f^{'}(x_i)(x_{i+1}-x_i)\\
x_{i+1} = x_i-\frac{f(x_i)}{f^{'}(x_i)} ... ①
Der Algorithmus ist
Diesmal wurde die analytische Lösung ($ cos (x) $) als Differenzwert verwendet.
import math
def f(x):
return math.sin(x)
def df(x):
return math.cos(x)
EPS1 = 0.0001
x = 3.5
while True:
x -= f(x)/df(x)
if abs(f(x)) < EPS1:
break
print("x = %f" % x)
>>> print("x = %f" % x)
x = 3.141594