Metoda siecznych.

0

Witam mam problem z implementacją metody siecznych dla mojej funkcji.

Wygląda to tak:

import math

EPS0 = 0.01 # dokladnosc porownywania z zerem
EPSX = 0.01 # dokladnosc wyznaczenia pierwiastka

# Funkcja
# f(x) = x^3*(x+sin(x^2-1)-1)-1

def f(x):
   return x * x * x * (x + math.sin(x * x - 1) - 1) - 1
   #math.pow(0.5,x) +1 =(x-2)**


x1 = 1
x2 = 2
print
print "WYNIK:"
print

f1 = f(x1); 
f2 = f(x2); 
i = 4 #liczba obiegow(iteracji)

while (i > 0) and (abs(x1 - x2) > EPSX):
  if abs(f1 - f2) < EPS0:
    print "Zle punkty startowe"
    i = 0 
    break
  x0 = x1 - f1 * (x1 - x2) / (f1 - f2)
  f0 = f(x0)
  if abs(f0) < EPS0: break
  x2, f2 = x1, f1
  x1, f1 = x0, f0
  i -= 1
  if i == 0: print "Przekroczony limit obiegow"
if i > 0: print "x0 = %15.8f" % x0

dla funkcji:

# Funkcja
# f(x) = x^3*(x+sin(x^2-1)-1)-1

działa

ale dostałem do rozwiazania taka funkcję:

0,5x + 1 = (x-2)2

i nie wiem jak sobie z nią poradzić.

Próbowałem w ten sposób:

return (x** - 4*x) - (math.pow(0.5,x)) + 3

oraz

return math.pow(0.5,x) + 1 = (x-2)** 

ale kończy się błędem @msm spojrzysz ?

0

Tak to wygląda:
user image

1
balu napisał(a):

dla funkcji: f(x) = x^3*(x+sin(x^2-1)-1)-1 działa:

def f(x):
   return x * x * x * (x + math.sin(x * x - 1) - 1) - 1

bo ta funkcja jest względnie normalnie zapisana, a Ty zapisujesz takie cudo:

return (x** - 4*x) - (math.pow(0.5,x)) + 3

oraz

return math.pow(0.5,x) + 1 = (x-2)** 

Nie wnikam w jakieś rozwinięcie tego, ale zakładając, że pierwsze jest względnie poprawne (nie sprawdzałem, nie mam się zamiaru bawić w liczenie) to zacznij w końcu pisać tak jak trzeba pisać potęgi, bo tu mieszasz:

albo pow(x, 2) albo x**2 czy też używając math.pow(x, 2) - ale zdecyduj się... musi być podstawa i potęga... samo ** nic nie oznacza chyba ;)

Przecież ten zapis jest po prostu niekompletny

return (x** - 4*x) - (math.pow(0.5,x)) + 3

a wystarczy go uzupełnić

return (x**2 - 4 * x) - (math.pow(0.5, x)) + 3

albo wzorując się na pierwszej zapisać

return (x * x - 4 * x) - (math.pow(0.5, x)) + 3

I tak jak pisałem, nie wiem czy to jest poprawne wyrażenie, tak samo jak nie wiem po co tam są te nawiasy ;)

0

Działa dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1