Metoda Newtona

Pytania o rozwiązania zadań.
Otrzymałeś(aś) rozwiązanie do zamieszczonego zadania? - podziękuj autorowi rozwiązania! Kliknij
hutsaloviaheslav1998
Czasem tu bywam
Czasem tu bywam
Posty: 142
Rejestracja: 26 lut 2022, 14:16
Podziękowania: 95 razy

Metoda Newtona

Post autor: hutsaloviaheslav1998 »

Mam takie równanie: \(f(x) = x^{3}-x^{2}+3\). Rozwiązuje to metodą Newtona. Chciałbym wiedzieć jak wyliczyć z tego \(x\). Potrzebne jest mi to do narysowania wykresu na który naniose dwie funkcje, odczytam miejsce zerowe i będę mógł skorzystać ze wzoru Newtona (iteracyjnego) do wyliczenia kolejnych wartości. Potrzebuje dwóch wartości \(y\): \(y_{1}=?\) i \(y_{2}=?\). Te wartości musze wyliczyć z tego równania \(f(x) = x^{3}-x^{2}+3\) by potem nanieść na wykres funkcje, znaleźć punkt przecięcia na tym wykresie i odczytać miejsce zerowe. Jak to policzyć, bo już troche nad tym siedze i wciąż nie mam rozwiązania
Ostatnio zmieniony 30 kwie 2024, 21:08 przez Tulio, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości
Tulio
Stały bywalec
Stały bywalec
Posty: 304
Rejestracja: 29 paź 2010, 12:44
Podziękowania: 21 razy
Otrzymane podziękowania: 80 razy
Płeć:

Re: Metoda Newtona

Post autor: Tulio »

Rozumiem, że masz \(y=f \left( x\right) \), a chcesz obliczyć \(x = g \left( y\right) \). Funkcja \(f\) nie jest różnowartościowa więc nie da się mieć na to jakiegoś jednego ładnego wzoru (analogicznie jak dla \(y=x^2-1\) otrzymasz \(x= \sqrt{y+1}, x \ge 0\) i \(x=-\sqrt{y+1}, x<0\)).
Funkcja ma ekstrema w argumentach \(x=0, x=\frac{2}{3}\) i przyjmując:
\(x\in \left( -\infty;0\right] \)
\(x\in \left( 0;\frac{2}{3}\right] \)
\(x\in \left( \frac{2}{3};\infty\right] \)
możemy (prawdopodobnie - twierdzenie o funkcji uwikłanej) otrzymać trzy wzory funkcji \(x=g \left( y\right) \) (rozwikłać \(y-x^3+x^2-3=0\) dla \(x=g \left( y\right) \))

Wedle wolframa to są wzory o które pytasz:
wzorek.png
Myślę, że możesz lepiej przedstawić co chcesz osiągnać i może pomożemy bez obliczania funkcji \(x=g \left( y\right) \). W szczególności dosyć dokładny wykres możesz narysować bez tego (ekstrema, miejsce zerowe).
PS. Jeśli naprawdę chcesz tego dokonać i dojść do wzorów z obrazka, to są na to gotowe wzory - wzory Cardano.
janusz55
Fachowiec
Fachowiec
Posty: 1937
Rejestracja: 01 sty 2021, 09:38
Podziękowania: 4 razy
Otrzymane podziękowania: 460 razy

Re: Metoda Newtona

Post autor: janusz55 »

\( f(x) = x^{3} -x^2 +3, \ \ x\in \rr. \)

Wartość \( x \) - wartość pierwiastka tego równania otrzymamy kolejnymi przybliżeniami (iteracjami) Metodą Newtona (Metodą Stycznych).

Nie Woframem, nie wzorami Cardano.
Tulio
Stały bywalec
Stały bywalec
Posty: 304
Rejestracja: 29 paź 2010, 12:44
Podziękowania: 21 razy
Otrzymane podziękowania: 80 razy
Płeć:

Re: Metoda Newtona

Post autor: Tulio »

Wydaje mi się, że kolega nie pytał o pierwiastki tego równania.
janusz55
Fachowiec
Fachowiec
Posty: 1937
Rejestracja: 01 sty 2021, 09:38
Podziękowania: 4 razy
Otrzymane podziękowania: 460 razy

Re: Metoda Newtona

Post autor: janusz55 »

Treścią zadania jest Metoda Newtona obliczania miejsc zerowych równań nieliniowych.

Powstaje pytanie jak obliczyć miejsce zerowe funkcji wielomianowej \( f(x) = x^3 -x^2 +3 \) tą metodą ?

Możemy posłużyć się kartką papieru i ołówkiem, możemy zaangażować program komputerowy na przykład OCTAVE lub MATLAB.

Metoda ręczna

\( x_{n+1} = x_{n} - \frac{f(x_{n})}{f'(x_{n})},\ \ n = 0,1,2,..,N. \)

\( x_{n+1} = x_{n} - \frac{x^3_{n}-x^2_{n} +3}{3x^2_{n} -2x_{n}}, \ \ n=0,1,2, ..., N.\)

Przyjmujemy punkt początkowy \( x_{0} = -1.\)

..........................................................

Najlepiej napisać program. który oblicza miejsca zerowe funkcji nieliniowych.

Program w OCTAVE 7.1.0

Kod: Zaznacz cały

function newton(f,df,x0,tol,n)
% Metoda Newtona rozwiązywania równań nieliniowych f(x)=0.
iter = 0;
u = feval(f, x0);
v = feval(df,x0);
err=abs(u/v);
disp('______________________________________________________')
disp('iteracja    x         f(x)         df(x)     |xn+1-xn|  ')
disp('_______________________________________________________')
fprintf('%2.0f %12.6f %12.6f 12.6f\n', iter, x0, u, v)
while(err>tol)
    (iter <= n)
    (v ~= 0)
    x1 = x0-u/v;
    err = abs(x1-x0);
    x0=x1;
    u =feval(f,x0);
    v = feval(df,x0);
    iter = iter+1;
    fprintf('%2.0f %12.6f %12.6f %12.6f %12.6f\n',iter,x0, u, v, err)
end
if (v==0)
    disp('dzielenie przez zero')
end
if(iter>n)
    disp('Metoda Newtona nie jest zbieżna')
end

function f = f1(x)
  f= x.^3 -x.^2 +3;

 function f = df1(x)
   f= 3*x.^2 -2*x;

>> newton('f1','df1',-1,10^(-4),40)
_____________________________________________
iteracja    x         f(x)             df(x)            |xn+1-xn|
_____________________________________________
 0       -1.000000                   1.000000 
ans = 1
 1    -1.200000    -0.168000     6.720000     0.200000
ans = 1
ans = 1
 2    -1.175000    -0.002859     6.491875     0.025000
ans = 1
ans = 1
 3    -1.174560    -0.000001     6.487889     0.000440
ans = 1
 4    -1.174559    -0.000000     6.487888     0.000000
Już w czwartej iteracji otrzymaliśmy przybliżoną wartość miejsca zerowego funkcji wielomianowej \( -1,174559 \) z dokładnością \( 10*(-4).\)
hutsaloviaheslav1998
Czasem tu bywam
Czasem tu bywam
Posty: 142
Rejestracja: 26 lut 2022, 14:16
Podziękowania: 95 razy

Re: Metoda Newtona

Post autor: hutsaloviaheslav1998 »

dobra, to może podam inny przykład żeby nieco bardziej rozjaśnić sytuacje. Po prostu pokaże jak robiliśmy to na zajęciach. Mam taki przykład:
\(e^{x} + x = 0\)
to jest funkcja pierwotna. Teraz pisaliśmy miejsce zerowe:
f(x)=0 , następnie liczyliśmy pochodną , w tym przypadku będzie to f(x)=\(e^{x} + 1\). Następnie braliśmy i lczyliśmy x:
\(e^{x} + x = 0\)
-x=\(e^{x}\) / (-1)
x=\(e^{x}\)
i zapis był taki:
y=x i y = \(e^{x}\)
y=x i y = \(e^{x}\)
i na podstawie tego rysowaliśmy wykresy:
newton.png
dalej to już było iteracyjne liczenie kolejnych wartości, to to wiem jak policzyć tylko chodzi mi o wyliczenie tego:
y=x i y = \(e^{x}\)
y=x i y = \(e^{x}\)
dla tego równania \(x^{3} - x^{2} + 3\) . Więc to co na razie wyliczyłem to jest to:
f(x)= \(x^{3} - x^{2} + 3\)
f(x)=0
f(x)=\(3x^{2}-2x=0\)
teraz wzór newtona:
x_k+1 = x_k - \( \frac{x^{3}-x^{2}+3}{3x^{2}-2x} \)
no i teraz podstawowe pytanie. Jak zapisze te funkcje:
f(x) = \(x^{3}-x^{2}+3= 0\) to jak wyliczyć te dwa y dla tej funkcji, tak jak miało to miejsce wyżej?
janusz55
Fachowiec
Fachowiec
Posty: 1937
Rejestracja: 01 sty 2021, 09:38
Podziękowania: 4 razy
Otrzymane podziękowania: 460 razy

Re: Metoda Newtona

Post autor: janusz55 »

Jeśli równanie

\( -x = e^{x} \) mnożymy stronami przez \( -1 \)

\( -x = e^{x} \ \ | \cdot (-1)\)

to mamy

\( x = -e^{x},\)

a nie

\( x = e^{x}.\)

Rozumiem, że ten wspólny wykres prostej \( y = x \) i funkcji \( f(x) = e^{x} \) ma pomóc w ustaleniu punktu początkowego (startu) metody Newtona.

Wykresy funkcji \( y=x \) i \( y = e^{x} \) nie mają punktów wspólnych.

W przedstawionym załączniku mamy wykresy funkcji \( y = x, \) i \( y = -e^{x}, \) a nie \( y=x \) i \( y = e^{x}.\)

Wzór Newtona dla funkcji \( g(x) = e^{x} + x \) powinien mieć postać:

\( x_{k+1} = \frac{e^{x_{k}} +x_{k}}{ e^{x_{k}} +1}, \ \ k= 0,1,2,...,N \)

Wzór Newtona dla wielomianu \( f(x) = x^{3} - x^2 + 3 \) (podałem wyżej)

\( x_{n+1} = x_{n} - \frac{x^3_{n}-x^2_{n} +3}{3x^2_{n} -2x_{n}}, \ \ n=0,1,2, ..., N \) z punktem startowym \( x_{0} = -1.\)

Jakie dwa \( y \) dla tej funkcji wielomianowej?
janusz55
Fachowiec
Fachowiec
Posty: 1937
Rejestracja: 01 sty 2021, 09:38
Podziękowania: 4 razy
Otrzymane podziękowania: 460 razy

Re: Metoda Newtona

Post autor: janusz55 »

OCTAVE 7.1.0.

Kod: Zaznacz cały

% Metoda Newtona rozwiązywania równań nieliniowych f(x)=0.
iter = 0;
u = feval(f, x0);
v = feval(df,x0);
err=abs(u/v);
disp('______________________________________________________')
disp('iteracja    x         f(x)         df(x)     |xn+1-xn|  ')
disp('_______________________________________________________')
fprintf('%2.0f %12.6f %12.6f 12.6f\n', iter, x0, u, v)
while(err>tol)
    (iter <= n)
    (v ~= 0)
    x1 = x0-u/v;
    err = abs(x1-x0);
    x0=x1;
    u =feval(f,x0);
    v = feval(df,x0);
    iter = iter+1;
    fprintf('%2.0f %12.6f %12.6f %12.6f %12.6f\n',iter,x0, u, v, err)
end
if (v==0)
    disp('dzielenie przez zero')
end
if(iter>n)
    disp('Metoda Newtona nie jest zbieżna')
end

function f = f1(x)
  f= e.^(x)+x;

 function f = df1(x)
   f= e.^(x)+1;
  

Wyniki

Kod: Zaznacz cały

                                                                                                                             
>> newton1('f1','df1',0,10^(-4),40)

______________________________________________________________
iteracja    x           f(x)            df(x)      |xn+1-xn|
______________________________________________________________
 0      0.000000     1.000000    1.000000
 
 1    -0.500000     0.106531     1.606531         0.500000

 2    -0.566311     0.001305     1.567616          0.066311

 3    -0.567143     0.000000     1.567143          0.000832

 4    -0.567143     0.000000     1.567143          0.000000
W czwartej iteracji otrzymujemy wynik \( x^{* } = -0,567143 \) z dokładnością \( \varepsilon = 10^{-4}.\)
ODPOWIEDZ