Strona 1 z 1

[MatLab] Metoda siecznych

: 15 gru 2015, o 14:06
autor: wlodariusz
Witam.
Moim zadaniem jest napisać funkcję znajdującą pierwiastki równań liniowych np:\(\displaystyle{ sin(x)}\) z przedziału \(\displaystyle{ <-1,2>}\) używając metody siecznych czyli Eulera z dokładnością \(\displaystyle{ e=1e-4}\) i maksymalną ilością iteracji 100. Efektem ma być wykres funkcji w podanym przedziale wraz z zaznaczonym miejscem zerowym, znalezionym pierwiastkiem oraz liczbą iteracji, jaka była potrzebna do znalezienia.

Tak oto wygląda mój kod:

Problem polega na tym, iż przy próbach uruchomienia, pojawiają mi się błędy odnośnie np linii 4, 10 itp. Niestety nie mam pojęcia co dalej zrobić.

[MatLab] Metoda siecznych

: 15 gru 2015, o 14:14
autor: miodzio1988
No skąd program ma wiedzieć, że f jest funkcją? Musisz napisać podprogram, który definiuje Ci f

[MatLab] Metoda siecznych

: 15 gru 2015, o 14:47
autor: wlodariusz
Za każdym razem muszę mu podać inną funkcję z innymi przedziałami.

[MatLab] Metoda siecznych

: 15 gru 2015, o 14:52
autor: miodzio1988
No to też bez problemu powinieneś umieć napisać taki skrypt , który ciąg znaków Ci zamienia na funkcję (interpretuje jako funkcję zmiennej x)

[MatLab] Metoda siecznych

: 15 gru 2015, o 21:42
autor: jarzabek89
Nie patrząc na to jak wywołasz funkcję, to algorytm jest nie do końca poprawny.
Po pierwsze:

Kod: Zaznacz cały

 t = 0;
   t=t+1;
To nie ma najmniejszego sensu.
Nie tutaj powinieneś zerować, ale rozumiem idee, ale to i tak powoduje inny błąd

Kod: Zaznacz cały

x(i+1)=x(i)-((f(i)/f(i)-f(i-1))*(f(i)-f(i-1)));
if (abs(f(i)) < eps) || (i == 100)
Program będzie "krążył" wokół jednego miejsca zerowego, a Ty potraktujesz to jako kilka miejsc zerowych.

Powinno się raczej przed odpaleniem metody siecznych sprawdzić ile jest miejsc zerowych. Zrobić malutki kroczek i sprawdzać znak iloczynu.