|
|
nichtlineares Gleichungssystem mit fsolve |
|
HasanK |

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 23.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.07.2009, 18:51
Titel: nichtlineares Gleichungssystem mit fsolve
|
 |
Hallo zusammen,
habe folgendes Problem und würde mich freuen wenn mir jmd. helfen könnte.
habe eigentlich stets 2 Gleichungen und 2 Unbekannte die eigentlich lösbar sein sollte.
Problem ist hierbei: dass die Anfangsbedingungen stets ändern und diese ich mit einer for-schleife jeweils berechnen will, was leider nicht so ganz funktioniert.
das m-file sieht wie folgt aus:
clear all
t = [5.5056 5.3034 5.0000 4.7472 4.4944];
x0=[2 -0.5];
for i=1:1:5;
c=t(i)
x(i,1:2) = fsolve(@(x) x(1).^2+x(1).^(2*x(2))+x(1).^(-2-2*x(2))-c +x(1).^(-2)+x(1).^(-2*x(2))+x(1).^(2+2*x(2))-(10-c),x0);
end;
=> ich bekomme jedesmal dasselbe Ergebnis, was natürlich nicht sein darf.
PS: mit dem Excel-Solver bekomme ich die gewünschten Ergebnisse heraus, also sollte das doch in Matlab gar kein problem sein oder???
Vielen Dank im voraus.
Hasan
|
|
|
|
|
Gast |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.07.2009, 11:12
Titel:
|
 |
Hallo,
wo ist denn die zweite Gleichung? Ich sehe nur eine. Übersichtlicher wird es, wenn Du statt einer inline- eine normale Funktion nimmst.
Beispiel:
Geht aber auch mit anonymen Funktionen
Gruß vom Gast
|
|
|
HasanK |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 23.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.07.2009, 11:59
Titel:
|
 |
Hallo,
sorry war etwas unübersichtlich
die Funktion heißt:
x(i,1:2)= fsolve(@(x) x(1).^2+x(1).^(2*x(2))+x(1).^(-2-2*x(2))-c, x(1).^(-2)+x(1).^(-2*x(2))+x(1).^(2+2*x(2))-(10-c),x0)
Dein Vorschlag funktioniert leider auch nicht, (oder ich stelle mich ziemlich blöd an)
ich bekomme die Fehlermeldung:
??? Error: File: Test1.m Line: 8 Column: 3
Function definitions are not permitted at the prompt or in scripts.
Danke und Gruß,
Hasan
|
|
|
Gast |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.07.2009, 14:31
Titel:
|
 |
Komisch, bei mir funktionierts:
Ob die Ergebnisse gut sind, weiß ich zwar nicht, aber sie sind verschieden.
Die Formulierung ohne "[]" von Dir geht gar nicht. Die Sache mit der extra Funktion ist dagegen ein ganz klein wenig kompliziert. Schau mal nach "nested finctions".
Gruß vom Gast
|
|
|
HasanK |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 23.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.07.2009, 08:52
Titel:
|
 |
Hallo Gast,
vielen Dank für dein Vorschlag. Es funktioniert auch wie du gesagt hast.
jedoch stimmen die Ergebnisse hinten und vorne nicht.
Wenn ich z.B. zu deinem Vorschlag
for i=1:1:5;
w(i,1)= x(i,1).^2 +x(i,1).^ (2*x(i,2))+x(i,1).^(-2-2*x(i,2));
w(i,2)=x(i,1).^(-2)+x(i,1).^(-2*x(i,2))+x(i,1).^ (2+2*x(i,2));
end;
einfüge, sollte die erste Spalte von w dem Vektor t entsprechen.
=> stimmt leider nicht.
Ist der fsolve Befehl so ungenau??
Oder kann man das genauer einstellen??
Vielen Dank im Voraus.
HasanK
|
|
|
HasanK |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 23.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.07.2009, 15:14
Titel:
|
 |
Hallo Gast,
danke für deine Hilfe habe das Problem gelöst.
Wenn ich die Gleichungen quadriere (Minimierung der Fehlerquadratsumme)
klappt das einwandfrei.
Danke dir
Hasan
|
|
|
HasanK |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 23.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.06.2010, 14:09
Titel:
|
 |
|
 |
|
Hallo zusammen,
habe wieder ein Optimeriungsproblem, und ich hoffe mir kann wieder jmd. behilflich sein:
Problemstellung:
ich habe Messdaten, an die ich ein Modell/Funktion anpassen möchte,d.h. die Koeffizienten koeff_i der Funktion so anpassen möchte, dass sie die Messdaten beschreiben. Die Funktion sieht wie folgt aus:
y= koeff1*f1(x)+koeff2*f2(x)+koeff3*f3(x)....usw.
(siehe Anhang Seite 1)
Dies geschieht jedoch unter Nebenbedingungen, die ich bisher wie folgt berücksichtige:
A1=h(1:size(h,1)-1, -h(2:size(h,1), ;
b=zeros(size(h,1)-1,1);
[x,resnorm] = lsqlin(C,d, A1, b)
Nun möchte ich noch eine 2. Nebenbedingung einbauen, also mein Optimierung erweiteren (siehe Anhang Seite 2):
Ich weiß leider nicht genau wie ich damit weiter arbeite, da jetzt meine Inputmatrix h 3-Dimensional ist:
Ich müsste quasi mit einer for-Schleife die 3.Dimension abarbeiten und variabel als Nebenbedingung in die lsqlin einbauen.
Ich wäre euch Forum-User überaus dankbar wenn Ihr mir helfen könntet.
PS: das Problem bekomme ich übrigens in MS-Excel mit dem Add-Ins Befehl "Solver" übrigens in Begriff, (zwar sehr umständlich, aber es klappt). Ich denke dann müsste Matlab dieses Problem locker können oder??
Mit freundlichen grüßen
Hasan
Beschreibung: |
|
 Download |
Dateiname: |
Problemstellung.ppt |
Dateigröße: |
122 KB |
Heruntergeladen: |
441 mal |
|
|
|
|
|
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.
|
|