Regula Falsi MATLAB < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 14:31 Fr 11.11.2011 | Autor: | stffn |
Aufgabe | Die Funktion 'regulafalsi(f,a,b,tol)', welche die kleinste positive Nullstelle der Funktion $f(x)=cosh(x)*cos(x)+1$ berechnet soll geschrieben werden.
Die Iteration soll dann abbrechen, wenn die NS x die Bedingung [mm] $abs(f(x))\le [/mm] tol$ erfüllt. Die Nullstelle soll auf zehn Stellen genau berechnet werden. |
Hallo zusammen.
Ich muss vorweg sagen, dass ich bei Matlab ins kalte Wasser geworfen wurde, und keinerlei Erfahrung mit dem Programmieren damit habe. Nur ein bisschen c-Kenntnisse.
Es fängt bei mir also schon in der ersten Zeile mit dem ersten Problem an.
Ich möchte zunächst die Funktion f(x) definieren:
function y=cosh(x)*cos(x)+1;
%Funktionsdeklaration
Wenn ich das Ausführe, zeigt er mir immer folgende Meldung an:
"??? Error: File: y.m Line: 1 Column: 19
Unexpected MATLAB operator.
??? Error: File: y.m Line: 1 Column: 12
Unbalanced or unexpected parenthesis or bracket".
Vorher hatte ich es so probiert:
function y=f(x);
y=cosh(x)*cos(x)+1;
%Funktionsdeklaration .
Dann hat er mir gesagt, dass x undefiniert ist.
Wie ihr seht, scheitere ich bereits an den Grundlagen.
Ich hoffe das ist kein Grund für euch, mir nicht zu helfen. Auch wenn es bestimmt eine schwere Geburt wird:)
Ich bedanke mich, und wünsche ein schönes Wochenende!
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:45 Fr 11.11.2011 | Autor: | Valerie20 |
>
> Ich möchte zunächst die Funktion f(x) definieren:
> Vorher hatte ich es so probiert:
> function y=f(x);
> y=cosh(x)*cos(x)+1;
> %Funktionsdeklaration .
so müsstest du eigentlich ein Ergebnis bekommen.
Hast du die Funkton gespeichert?
Wenn nein Speichere sie mal unter f.m
dann gib in dein Terminal k=f(5) oder sonst irgendwas ein.
|
|
|
|
|
Hallo stffn,
> Die Funktion 'regulafalsi(f,a,b,tol)', welche die kleinste
> positive Nullstelle der Funktion [mm]f(x)=cosh(x)*cos(x)+1[/mm]
> berechnet soll geschrieben werden.
> Die Iteration soll dann abbrechen, wenn die NS x die
> Bedingung [mm]abs(f(x))\le tol[/mm] erfüllt. Die Nullstelle soll
> auf zehn Stellen genau berechnet werden.
> Hallo zusammen.
> Ich muss vorweg sagen, dass ich bei Matlab ins kalte
> Wasser geworfen wurde, und keinerlei Erfahrung mit dem
> Programmieren damit habe. Nur ein bisschen c-Kenntnisse.
>
> Es fängt bei mir also schon in der ersten Zeile mit dem
> ersten Problem an.
>
> Ich möchte zunächst die Funktion f(x) definieren:
>
> function y=cosh(x)*cos(x)+1;
> %Funktionsdeklaration
>
> Wenn ich das Ausführe, zeigt er mir immer folgende Meldung
> an:
>
> "??? Error: File: y.m Line: 1 Column: 19
> Unexpected MATLAB operator.
>
> ??? Error: File: y.m Line: 1 Column: 12
> Unbalanced or unexpected parenthesis or bracket".
>
> Vorher hatte ich es so probiert:
> function y=f(x);
> y=cosh(x)*cos(x)+1;
> %Funktionsdeklaration .
>
> Dann hat er mir gesagt, dass x undefiniert ist.
>
> Wie ihr seht, scheitere ich bereits an den Grundlagen.
> Ich hoffe das ist kein Grund für euch, mir nicht zu
> helfen. Auch wenn es bestimmt eine schwere Geburt wird:)
>
Die Funktionsdeklaration geht so:
function [y]=f(x)
y=cosh(x)*cos(x)+1;
Siehe auch: Funktionsdeklaration
> Ich bedanke mich, und wünsche ein schönes Wochenende!
>
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:12 Fr 11.11.2011 | Autor: | stffn |
Ok, danke nochmal für dei schnellen Antworten.
Also wenn ich mir f(2) z.B. ausrechnen lasse macht er das auch.
Der Fehler, dass x undefiniert ist, wird mir trotzdem angezeigt.
Naja, ich gehe mal davon aus, dass ich trotzdem auf dem richtigen Weg bin.
Jetzt muss ich mir ja mein Intervall definieren.
Ich habe mir die Funktion mal plotten lassen und weiß, dass die kleinste positive NS irgendwo zwischen 1 und 2 liegt.
Also möchte ich mir als Intervallgrenzen a=1 und b=2 wählen.
Aber wie muss ich meine Toleranz bestimmen?
Da die genauigkeit 10 Stellen betragen soll (gehe ich mal von 9 nachkommastellen aus), ist meine toleranz 0.000000001?
Ich versuche einfach mal irgendwie weiter zu machne, bin aber für jeden weiteren Tip, der mir das leben leichter machen würde, sehr dankbar.
|
|
|
|
|
Hallo stffn,
> Ok, danke nochmal für dei schnellen Antworten.
>
> Also wenn ich mir f(2) z.B. ausrechnen lasse macht er das
> auch.
>
> Der Fehler, dass x undefiniert ist, wird mir trotzdem
> angezeigt.
>
> Naja, ich gehe mal davon aus, dass ich trotzdem auf dem
> richtigen Weg bin.
> Jetzt muss ich mir ja mein Intervall definieren.
> Ich habe mir die Funktion mal plotten lassen und weiß,
> dass die kleinste positive NS irgendwo zwischen 1 und 2
> liegt.
> Also möchte ich mir als Intervallgrenzen a=1 und b=2
> wählen.
>
Ich denke, das Intervall, in dem die
kleinste positivste Nullstelle liegt, soll herausgefunden werden.
Prüfe z.B ob f(n)*f(n+1)<0 ist. Ist so ein n gefunden,
dann sind das Deine Startwerte für die Regula falsi.
> Aber wie muss ich meine Toleranz bestimmen?
> Da die genauigkeit 10 Stellen betragen soll (gehe ich mal
> von 9 nachkommastellen aus), ist meine toleranz
> 0.000000001?
Die Toleranz ist doch vorgegeben.
> Ich versuche einfach mal irgendwie weiter zu machne, bin
> aber für jeden weiteren Tip, der mir das leben leichter
> machen würde, sehr dankbar.
>
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:44 Fr 11.11.2011 | Autor: | stffn |
Also wir hatten als Hinweis bekommen, dass wir die Funktion einfach plotten sollen, um geeignete Startwerte zu finden.
Also nehme ich als Toleranz 0.01.
Ich habe folgendes zusammengebracht. Bitte sei gnädig mit mir, das ist das erste mal das ich was von der Regula Falsi gehört habe und zudem das erste mal das ich mit Matlab arbeite:):
function [y]=f(x)
y=cosh(x)*cos(x)+1;
%Funktionsdeklaration
a=1;
b=2;
tol=0.01;
%Definition der Intervallgrenzen und der Toleranz
c=abs(f(1))
%Festlegung eines Startwertes
for c=abs(f(1)):(c<=tol)
regulafalsi(@f,a,b,tol);
c=abs(f(x))
end
%Anwendung der Rregula Falsi
Abgesehen, dass es wahrscheinlich sowieso komplett falsch ist, zeigt er mir folgende Fehlermeldung an:
??? Input argument "x" is undefined.
Error in ==> f at 2
y=cosh(x)*cos(x)+1;.
Äußerst merkwürdig
|
|
|
|
|
Hallo stffn,
> Also wir hatten als Hinweis bekommen, dass wir die Funktion
> einfach plotten sollen, um geeignete Startwerte zu finden.
>
Ok.
> Also nehme ich als Toleranz 0.01.
> Ich habe folgendes zusammengebracht. Bitte sei gnädig mit
> mir, das ist das erste mal das ich was von der Regula Falsi
> gehört habe und zudem das erste mal das ich mit Matlab
> arbeite:):
>
> function [y]=f(x)
> y=cosh(x)*cos(x)+1;
> %Funktionsdeklaration
>
> a=1;
> b=2;
> tol=0.01;
> %Definition der Intervallgrenzen und der Toleranz
> c=abs(f(1))
> %Festlegung eines Startwertes
>
> for c=abs(f(1)):(c<=tol)
> regulafalsi(@f,a,b,tol);
> c=abs(f(x))
> end
Die Scheife ist hier fehl am Platz.
In der Funkion regulafalsi ist die Toleranzgrenze tol abzufragen.
> %Anwendung der Rregula Falsi
>
> Abgesehen, dass es wahrscheinlich sowieso komplett falsch
> ist, zeigt er mir folgende Fehlermeldung an:
>
> ??? Input argument "x" is undefined.
>
> Error in ==> f at 2
> y=cosh(x)*cos(x)+1;.
>
> Äußerst merkwürdig
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:18 Fr 11.11.2011 | Autor: | stffn |
Ok. Aber muss ich die Grenzen nach jedem Iterationsschritt neu definieren oder macht Matlab das mit der Funktion 'regulafalsi(...)' selbst?
In der Hilfe steht irgendwie nichts zu regulafalsi.
Nämlich wenn er das selbst macht, brauch ich ja so wie so überhaupt keine Schleife.
function y=f(x)
y=cosh(x)*cos(x)+1;
%Funktionsdeklaration
a=1;
b=2;
tol=0.01;
%Definition der Intervallgrenzen und der Toleranz
regulafalsi(@f,a,b,tol);
Auch wenn mein neuer Vorschlag bestimmt nicht richtig ist, würde das ja dann ziemlich einfach gehalten werden können.
Ich hab auch immernoch das Problem mit der Definition von x. Er zeigt mir immer diese Meldung an:
??? Input argument "x" is undefined.
Error in ==> f at 2
y=cosh(x)*cos(x)+1
Was kann man dagegen machen?
|
|
|
|
|
Hallo stffn,
> Ok. Aber muss ich die Grenzen nach jedem Iterationsschritt
> neu definieren oder macht Matlab das mit der Funktion
> 'regulafalsi(...)' selbst?
> In der Hilfe steht irgendwie nichts zu regulafalsi.
> Nämlich wenn er das selbst macht, brauch ich ja so wie so
> überhaupt keine Schleife.
>
> function y=f(x)
> y=cosh(x)*cos(x)+1;
> %Funktionsdeklaration
>
> a=1;
> b=2;
> tol=0.01;
> %Definition der Intervallgrenzen und der Toleranz
>
> regulafalsi(@f,a,b,tol);
>
>
> Auch wenn mein neuer Vorschlag bestimmt nicht richtig ist,
> würde das ja dann ziemlich einfach gehalten werden
> können.
> Ich hab auch immernoch das Problem mit der Definition von
> x. Er zeigt mir immer diese Meldung an:
>
> ??? Input argument "x" is undefined.
>
> Error in ==> f at 2
> y=cosh(x)*cos(x)+1
>
> Was kann man dagegen machen?
>
Lies Dir dazu diesen Artikel durch.
Falls die Matlab Version < 7 ist, siehe: Matlab-Funktionen
Auf Seite 55 und 56 steht alles, was Du dazu wissen musst.
Gruss
MathePower
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:49 Fr 11.11.2011 | Autor: | stffn |
Ok. Ist Version 7.12.
Ich les mir das mal durch, schaffs aber heute nicht mehr. Falls ich nochmal ne frage habe, meld ich mich.
Danke nochmal an MathePower. Einen sschönen Abend noch!
|
|
|
|