Skip to content

Instantly share code, notes, and snippets.

@carbolymer
Created November 10, 2011 19:39
Show Gist options
  • Save carbolymer/1355925 to your computer and use it in GitHub Desktop.
Save carbolymer/1355925 to your computer and use it in GitHub Desktop.
% operacja dominujaca: + - * /
% rekurencja 1-go rodzaju - bez rozgalezien w drzewie, bledy i zlozonosci identyczne
% x - punkt poczatkowy
% n - maksymalna liczba iteracji
% i - poczatkowa zlozonosc obliczeniowa, przy wywolaniu zewnetrznym i = 0
function [x,i] = rec(x,n,i)
if(n == 0)
x = x;
else
% algorytm newtona do szukania miejsc zerowych
x = x - (x^3-9*x^2+23*x-15)/(3*x^2-18*x+23);
i = i + 15; % 15 operacji dominujacych
n = n - 1; % maksymalna ilosc wywolan
[x,i] = rec(x,n,i);
end
end
% algorytm zakodowany iteracyjnie
function [x,i] = it(x,n,i)
while (n ~= 0)
x = x - (x^3-9*x^2+23*x-15)/(3*x^2-18*x+23);
i = i + 15; % 15 operacji
n = n - 1;
end
end
% zlozonosc w funkcji iteracji z okazji ze algorytm jest 1-go rodzaju jest taka sama,
% tzn jest dana zaleznoscia liniowa
range = 1:15;
for k = range;
% 7 jest przykladowa dana, mamy szukac zera w x=5
% 0 - licznik iteracji na poczatku
[wartosc_rec(k) , zlozonosc_rec(k)] = rec(20,k,0);
[wartosc_it(k) , zlozonosc_it(k)] = it(20,k,0);
end
%wykres wartosci X w zaleznosci od iteracji
plot(
% dziedzina, przeciwdziedzina, parametry (typ znacznika: o, kolor: 1, nazwa: Rekurencja),
% dalej wielkosc markera - opcjonalna
range, wartosc_rec, "o1;Rekurencja;", "markersize", 12,
range, wartosc_it, "x3;Iteracja;", "markersize", 12
) % bez srednika
ylabel("Wartosc X"); % etykieta X
xlabel("Numer iteracji"); % etykieta Y
title("Wykres zbieznosci rozwiazania do x = 5"); % tytul wykresu
sleep(5); % tylko do octava, w matlabie wywalic
% wykres zlozonosci od iteracji
% jakbys nie widzial pierwszego wykresu, wykomentuj drugi
plot(
range, zlozonosc_rec, "o1;Rekurencja;", "markersize", 12,
range, zlozonosc_it, "x3;Iteracja;", "markersize", 12
)
ylabel("Ilosc operacji - zlozonosc");
xlabel("Numer iteracji")
title("Wykres zlozonosci algorytmow");
sleep(5); % tylko do octava, w matlabie wywalic
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment