|
|
Lösung nichtlinearer Gleichungssysteme durch Newton-Verfahr |
|
Zuckerstange |

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 15.02.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 14:21
Titel: Lösung nichtlinearer Gleichungssysteme durch Newton-Verfahr
|
 |
Hallo,
ich bin ein Matlab Neuling und habe folgende Aufgabe:
Gesucht ist die Nullstelle des nichtlinearen Gleichungssystems
f(x,y)= x²+y²+0,6y-0,16=0
g(x,y)= x²-y²+x-1,6y-0,14=0
Die Iteration soll mit einer while-Schleife realisiert werden und abgebrochen werden wenn die euklidische Norm des Residuums kleiner als die vorgegebene Toleranz ist oder die maximale Anzahl der zulässigen Iterationen NMax erreich ist.
Toleranz: 10^-6
NMax = 20
Startnäherung: x0=0,6 ; y0=0,25
Hier ist meine Funktion:
Ich führe die Funktion mit folgendem Befehl aus:
Ich bekomme die Fehlermeldung "Zu wenige Input Argumente". Ich wäre wirklich sehr dankbar wenn mir jemand sagen könnte wo mein Fehler liegt.
Vielen Dank
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 14:29
Titel:
|
 |
funktionen haben ihreren eigenen variablen raum. wenn du variablen nicht übergiebst sind sie da auch nicht bekannt. die anonymen funktionen fun und dfun sollten also in der funktion newton unbekannt sein. außerdem glaube ich nicht das "Zu wenige Input Argumente" die vollständige fehlermeldung ist.
grüße
_________________
richtig Fragen
|
|
|
Zuckerstange |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 15.02.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 14:36
Titel:
|
 |
Könntest du das noch etwas genauer erläutern?
Ich programmiere zum Ersten Mal
Die genaue Fehlermeldung ist:
Error using newton ( line 18 )
Not enough input arguments.
Danke
|
|
|
Martin91 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 19:41
Titel:
|
 |
Moin,
der Fehler kommt, weil du schreibst
Den 2. Term soll doch an 2. Stelle des Vektors fun sein, so wie du das schreibst machst du dafür einen neuen "Vektor". (Und vor dem 2. ungewollten Vektor ist kein @(x,y) davor, deshalb spuckt er die Fehlermeldung "kenne Variable x im 2. Vektor nicht" aus.)
Desweiteren muss man ein Malzeichen zwischen Variable und Faktor setzen bei Matlab.
[/code]0.6*y
In der newton() Funktion sind nämlich auch Fehler. Da hat das mit x,xo,y oder Rechenoperationen wie ob man einen Vektor^-1 rechnen kann usw. Und die Zeile
. Da soll es doch bestimmt so heißen wie die Variable, die die Funktion newton() ausgeben soll.
Einerseits kommentierst du gut und schreibst relativ "komplizierte" Sachen wie Funktionen vom Ansatz gut usw aber andererseits machst du dann so billige Fehler bei Rechenoperationen und Bezeichnungen usw Das wundert mich nur etwas.
|
|
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 19:44
Titel:
|
 |
Ups sorry sehe gerade Das mein Satz
"der Fehler kommt, weil du schreibst
Code: fun=@ (x) [x^2+y^2+0.6*y-0.16];[x^2-y^2+x-1.6*y-0.14]; %Funktionen gemäss Aufgabe "
falsch ist. Der Fehler kommt wegen Fehlern in der Newton Funktion.
|
|
|
Martin91 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 19:58
Titel:
|
 |
|
 |
|
Moin,
Den 2. Term soll doch an 2. Stelle des Vektors fun sein, so wie du das schreibst machst du dafür einen neuen "Vektor". (Und vor dem 2. ungewollten Vektor ist kein @(x,y) davor, deshalb spuckt er die Fehlermeldung "kenne Variable x im 2. Vektor nicht" aus.)
Desweiteren muss man ein Malzeichen zwischen Variable und Faktor setzen bei Matlab.
Bei Mathematica muss man das ja nicht, aber hier wohl.
Wo auch noch ein Fehler ist in der Zeile ist, dass "fun" von x und y abhängt, hier aber nur x deklariert wird.
In der newton() Funktion sind auch Fehler. Da hat das mit x,xo,y oder Rechenoperationen wie ob man einen Vektor^-1 rechnen kann usw.
Da soll fx doch bestimmt so heißen wie die Variable, die die Funktion newton() ausgeben soll.
Wäre schön wenn ein Moderator meine ersten beiden Beiträge löschen könnte, weil ich die als Gast nicht ändern oder löschen kann hab ich das jetzt noch mal richtig geschrieben. Ansonsten die beiden Posts einfach nicht beachten. Danke.
|
|
|
Martin91 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 20:20
Titel:
|
 |
Was Winkow schreibt ist, dass anonyme Funktionen
Nicht in der Funktion newton() bekannt sind. Newton() sind nur Variablen/Funktionen bekannt die ihr übergeben werden (hier=x0,y0,TOL,NMax) oder die in der Funktion selbst (als im m-File der Funktion) definiert werden. Aber wenn du eine die Funktion so ins Command Window schreibst ist sie newton() nicht bekannt, da sie nicht übergeben wird.
|
|
|
Zuckerstange |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 15.02.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 22:50
Titel:
|
 |
Hi,
ich habe meinen Code jetzt nochmal etwas überarbeitet.
Mit der while Schleife habe ich leider Probleme. Habe sie selbst nur aus einer Vorlage und versuche sie jetzt an meine Aufgabe anzupassen. Ich bin mir nicht sicher ob man ytemp analog zu xtemp definieren kann. Die Variablen, die mir die Funktion ausgeben soll, sind ja die Nullstellen. Funktioniert das mit fx=fun(x,y) nicht?
Ich habe fun und dfun entsprechend abgeändert. Allerdings bekomme ich für dfun folgende Fehlermeldung:
Undefined function 'dfun' for input arguments of type 'double'.
Was habe ich da übersehen?
Danke schon mal für die Geduld mit mir
|
|
|
Martin91 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 23:17
Titel:
|
 |
Tja, das ist genau das Problem, was Winkow und ich im letzten Beitrag um 19:20Uhr geschrieben haben...
Weiter:
So ist das noch nicht richtig. fun soll doch ein Vektor mit 2 Einträgen sein der Form fun=@(x,y)[a;b] oder?
Wenn das so sein muss, müsstest du was bei den Rechenoperationen ändern.
Außerdem schreibst du a=....; und in der nächsten Zeile wieder a="was anderes"; das macht auch keinen Sinn.
Die letzte Zeile
ist auch immer noch falsch.
|
|
|
Zuckerstange |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 15.02.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2015, 23:54
Titel:
|
 |
Hi Martin91,
danke für deine Antwort.
In der Form fun=@(x,y)[a;b] muss es so jetzt richtig sein oder?
Trotzdem bekomme ich gleiche Fehlermeldung
Ich habe anstatt dem fx=fun(x,y) etwas anderes versucht.
Aber an der Zeile "x=x0; " hat er iwas zu meckern. Fehlt da noch was?
|
|
|
Martin91 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.02.2015, 00:18
Titel:
|
 |
Ja es kommt die gleiche Fehlermeldung, weil die anonymen Funktionen fun/dfun nicht innerhalb der newton() funktion bekannt sind. Sie müssen, weil sie anonyme Funktionen sind, erst übergeben weden.
Also
Die Form ist jetzt richtig bei fun, aber es muss
in fun heißen oder?
Jetzt soll der PC in der Rechnung
einen Vektor^-1 und mit einen anderen Vektor multiplizieren rechnen. Da musst du herrausfinden, wie man das alles punktweise/elementweise berechnen kann. Also jedes Element des Vektors^-1 rechnen und dann mit dem entsprechenden Element des andern Vektors multplizieren. Dann ist das ytemp jeweils der 2. Eintrag im Vektor und xtemp der erste Eintrag.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|