WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

nichtlineares Gleichungssystem mit fsolve

 

HasanK
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 23.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2009, 18:51     Titel: nichtlineares Gleichungssystem mit fsolve
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 11:12     Titel:
  Antworten mit Zitat      
Hallo,

wo ist denn die zweite Gleichung? Ich sehe nur eine. Übersichtlicher wird es, wenn Du statt einer inline- eine normale Funktion nimmst.

Beispiel:
Code:
x(i,1:2)=fsolve(@LGS,x0);

function F = LGS(x)
F(1) =
F(2) =
end


Geht aber auch mit anonymen Funktionen

Gruß vom Gast
 
HasanK
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 23.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 11:59     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 14:31     Titel:
  Antworten mit Zitat      
Komisch, bei mir funktionierts:

Code:
clear all
t = [5.5056 5.3034 5.0000 4.7472 4.4944];
x0 = [2 -0.5];

x = zeros(5,2);

for ind = 1:5
    c = t(ind);
    fun = @(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)];

    x(ind,:) = fsolve(fun,x0);
end

x


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

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 23.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2009, 08:52     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
HasanK
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 23.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2009, 15:14     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
HasanK
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 23.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2010, 14:09     Titel:
  Antworten mit Zitat      
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,Smile-h(2:size(h,1),Smile;
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

Problemstellung.ppt
 Beschreibung:

Download
 Dateiname:  Problemstellung.ppt
 Dateigröße:  122 KB
 Heruntergeladen:  441 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.