Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as Matlab by oko ( 15 years ago )
clear all % czysci wszystkie inne zmienne
format long e % postac wyswietlania liczb
p = [ 2 3 0 -1 ]; % definicja funkcji p = 2x^3 + 3x^2 + 0x^2 - 1 = 0
dp = polyder ( p ); % pochodna wielomianu p
x = [ -10 : 0.1 : 10 ]; % x - wektor od -10 do 10 z krokiem 0.1
y = polyval ( p, x ); % wartosc funkcji p dla x = [-10 : 0.1 : 10]
dy = polyval ( dp, x ); % wartosc pochodnej dla x
guess = 100; % zgadujemy polozenie miejsca zerowego
newy = polyval ( p, guess ); % nowe y = wartosc funkcji p dla x = guess (100)
steps = 0; % zmienna liczaca ilosc krokow (iteracji)
iterations = zeros ( 1, 10 ); % tworzymy macierz w ktorej bedziemy trzymac ilosc iteracji dla danej dokladnosci
for accuracy = [ 1 : 10 ] % petla zlozona z 10 krokow, przy kazdym bierzemy zmienna \'accuracy\' wieksza o 1
while abs ( newy ) > ( 10 ^ ( - accuracy ) ) % powtarzamy ponizsze instrukcje tak dlugo, jak blad jest wiekszy od danej dokladnosci ( np. 10 ^ -4 = 0.001 )
guess = guess - ( newy / polyval ( dp, guess ) ) % metoda Eulera
newy = polyval ( p, guess ); % nowe y = wartosc funkcji p dla x = guess
steps = steps + 1; % zwiekszamy ilosc krokow o 1
end % znalezlismy miejsce zerowe z dana dokladnoscia, wiec teraz...
iterations ( 1, accuracy ) = steps; % ...zapisujemy ilosc krokow do macierzy w danym jej miejscu
accuracies ( 1, accuracy ) = 10 ^ ( - accuracy ); % to samo robimy z dokladnoscia jakiej chcielismy. w sumie niepotrzebne
end
semilogy ( iterations, accuracies, '--o' ) % wykres o logarytmicznej skali osi OY
xlabel ( 'liczba iteracji' ); % podpis osi X
ylabel ( 'dokladnosc' ); % podpis osi Y
Revise this Paste
Parent: 23874