[MatLab] Metoda siecznych

wlodariusz
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 15 gru 2015, o 12:35
Płeć: Mężczyzna
Lokalizacja: Polska

[MatLab] Metoda siecznych

Post 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ć.
miodzio1988

[MatLab] Metoda siecznych

Post autor: miodzio1988 »

No skąd program ma wiedzieć, że f jest funkcją? Musisz napisać podprogram, który definiuje Ci f
wlodariusz
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 15 gru 2015, o 12:35
Płeć: Mężczyzna
Lokalizacja: Polska

[MatLab] Metoda siecznych

Post autor: wlodariusz »

Za każdym razem muszę mu podać inną funkcję z innymi przedziałami.
miodzio1988

[MatLab] Metoda siecznych

Post 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)
Awatar użytkownika
jarzabek89
Użytkownik
Użytkownik
Posty: 1337
Rejestracja: 11 lis 2007, o 21:36
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 4 razy
Pomógł: 181 razy

[MatLab] Metoda siecznych

Post 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.
ODPOWIEDZ