Sekantenverfahren Matlab < Interpol.+Approx. < Numerik < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 19:24 Mo 20.12.2010 | Autor: | Marius6d |
Aufgabe | Formulieren und benutzen Sie das Sekantenverfahren zur Lösung von lnx = 2-x mit einer Genauigkeit von [mm] 10^{-10}. [/mm] |
Also ich soll das Ganze in Matlab machen und mir ein Skript basteln, dasselbe habe ich für Newtonverfahren und für die Fixpunktgleichung gemacht, dort hatte ich auch keine Probleme, aber wie mache ich das für das Sekantenverfahren, hier brauche ich ja 2 Startwerte. Im Anhang habe ich mein M-File. Wie muss ich das Script für 2 Startwerte ändern?
Datei-Anhang
Datei-Anhang
Dateianhänge: Anhang Nr. 1 (Typ: m) [nicht öffentlich] Anhang Nr. 2 (Typ: m) [nicht öffentlich]
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:48 Mo 20.12.2010 | Autor: | leduart |
Hallo
auch matlab versteht 2 werte, x1 und x2.
schreib einfach die ersten 3 Schritte auf, wie du es selbst ohne Programm lösen würdest. erst dann fang an!
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 19:56 Mo 20.12.2010 | Autor: | Marius6d |
Hmm, das habe ich auch probiert mit x1 und x2, im Anhang nochmal das neue File, Matlab meldet aber immer "??? Attempted to access x(0); index must be a positive integer or logical.
Error in ==> Sekantenverfahren1 at 1
x(0) = 2"
Was mache ich falsch?
Dateianhänge: Anhang Nr. 1 (Typ: m) [nicht öffentlich]
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 21:55 Mo 20.12.2010 | Autor: | max3000 |
Matlab fängt beim Zählen eines Indexes von einem Vektor bei 1 an.
Nicht verwechseln mit Arrays bei anderen Programmiersprachen wie C/C++, Java oder C#. Da gehts natürlich bei 0 los.
Ich hab mir dein m-File zwar nicht angeschaut, aber schreibe überall, wo du auf ein Vektorelement x(i) zugreifst, einfach x(i+1).
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 22:05 Mo 20.12.2010 | Autor: | Marius6d |
Hmm, vielen Dank für deine Antwort, aber ich weiss nicht genau wie ich das dnen amchen soll, es kommen schon x(i) und x(i+1) vor, jetzt kann ich ja nicht noch alle x(i) durch x(i+1) ersetzen oder?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 23:34 Mo 20.12.2010 | Autor: | leduart |
Hallo
1. du brauchst immer nur 2, zwischenzeitlich 3 Punkte, warum bewahrst du alle erledigten Punkte in nem endlosen array deinen x(i)?
wenn das funktioniert ist es auf jeden fall langsam und füllt unnötig Speicher.
2. in matlab sollte man nie i als laufvariable nehmen, i ist von alleine die imaginäre Einheit. die kann man zwar umdefinieren, wenn man aber später ne DSammlung von m- files hat und auch mal was komplexes will führt das zum chaos
3. alle arrays fangen bei 1 an, nicht bei 0.
4. k=1:inf
inf mit kleinem i
5. eigentlich muss man beim Sekantenverfahren doch immer entscheiden,mit welchem der alten Werte man weiter macht. du willst doch immer ein x mit f(x)>0 und eines mit f(x)<0
also Struktue
a=1
e=2
toi=1
while toi>...
Sekante durch a,f(a)<0 und e,f(e)>0
Schnitt mit x Achse ergibt c,
Entscheidung f(c)>0 dann e=c sonsta=c
toi=abs(a-e)
k=k+1
end
Ausgabe k Zahl der Schritte
e Nullstelle
jetz noch was schöner schreiben.
Gruss leduart
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 23:37 Mo 20.12.2010 | Autor: | leduart |
Hallo
statt x(0) schreibx(1) statt x(1) x(2) am Anfang.
Dann fang mit k=2 an
lies auch den anderen beitrag von mir
Gruss leduart
|
|
|
|