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

 

cubalibre
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 05.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 12:51     Titel: Nichtlineares Gleichungssystem
  Antworten mit Zitat      
Hallo miteinander,

ich habe folgendes Probem: ich habe drei Unbekannte und drei Gleichungen von denen zwei jedoch nicht linear sind.

Gegeben sind folgende Variablen:

A_1=2.0*10^-3
A_2=2.86*10^-4
A_3=1.23*10^-3
A_M_1=7.74*10^-4
A_M_2=A_2
p_1=20000
p_2=0
ro=860

Die Gleichungen lauten:

I) p_1 +ro/2+v_1^2=p_2+ro/2*v_2^2+p_3+ro/2*v_3^2
II) A_1*v_1=A_2*v_2+A_3*v_3
III) A_3*v_3^2=(A_1-A_M_1)*v_1^2

Wie kann ich die Unbekannten v_2; v_3 und p_3 am besten mit Matlab berechen lassen? Rolling Eyes Mit einer normalen Matrix funktioniert es gaube ich ja nicht mehr da nicht linear oder? Das Problem ist dies ist eine vereinfachte Darstellung meines Problems. Normalerweise sind es 12 Gleichungen mit zwölf Unbekannten Sad
Kann mir jemand helfen? ich bin echt langsam am verzweifeln...
Private Nachricht senden Benutzer-Profile anzeigen


Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 21:49     Titel:
  Antworten mit Zitat      
Hallo,

ich weis nicht ob man das mit
Code:
lösen kann. Du hast für v_3 keinen Wert angegeben...das ist mind. eine Unbekannte zuviel oder du musst auf
Code:
verwenden, wobei hierfür die Anpassung an Messdaten erfolgen kann.

Gruß Coja
Private Nachricht senden Benutzer-Profile anzeigen
 
cubalibre
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 05.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2011, 11:26     Titel:
  Antworten mit Zitat      
aber ich habe doch drei Gleichungen mit drei Unbekannten (wo v_3 auch mit dabei ist) also sollte es doch zu lösen sein oder versteh ich da grad was falsch? Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 07.07.2011, 10:59     Titel:
  Antworten mit Zitat      
Hallo,

im Prinzip musst Du "nur" das Gleichungssystem umstellen in die Form F(X)=0.
Code:

function mysolve
A_1=2.0*10^-3
A_2=2.86*10^-4
A_3=1.23*10^-3
A_M_1=7.74*10^-4
A_M_2=A_2
p_1=20000
p_2=0
ro=860

x = fsolve(@myf, [0;0;0]);

    function y = myf(x)
        v_2 = x(1);
        v_3 = x(2);
        p_3 = x(3);
        y = zeros(3,1);
        y(1) = p_1 + ro/2 + v_1^2 - (p_2+ro/2*v_2^2+p_3+ro/2*v_3^2);
        y(2) = A_1*v_1 - (A_2*v_2+A_3*v_3);
        y(3) = A_3*v_3^2 - ((A_1-A_M_1)*v_1^2);
    end

end
 


Allerdings wird das hier nicht so funktionieren, da v_1 fehlt. Ich hoffe aber, die Idee ist klar (aus Gleichung I wird einfach
p_1 +ro/2+v_1^2 - (p_2+ro/2*v_2^2+p_3+ro/2*v_3^2) = 0
usw.
Und: wichtig ist natürlich ein vernünftigerer Startwert als [0;0;0] ...

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Schwabe12345
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2014, 10:25     Titel:
  Antworten mit Zitat      
Hallo zusammen,

ich habe das Beispiel aus diesem Threat auf meine Anwendung zugeschnitten. Folgender Code liegt meinem Problem zu grunde:

Code:

function mysolve
x1 = 0
y1 = 0
x2 = 150
y2 = 100
x3 = 300
r = 100
ri= 800

x = fsolve(@myf,[0;0;0]);

    function y = myf(x)
        x = x(1);
        z = x(2);
        g = x(3);
        y = zeros(3,1);
        y(1) = (x-x1)^2+(z-y1)^2-(ri+r)^2;
        y(2) = (x-x2)^2+(z-y2)^2-(ri-r)^2;
        y(3) = (x-x3)^2+(z-g)^2-(ri+r)^2;
    end
end
 


Als Fehler erhalte ich (auch nach clear) folgenden Text:

Attempted to access x(2); index out of bounds because numel(x)=1.

Error in Loesung/myf (line 14)
z = x(2);

Error in fsolve (line 218)
fuser = feval(funfcn{3},x,varargin{:});

Error in Loesung (line 10)
x = fsolve(@myf,[0;0;0]);

Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.


Was mache ich falsch?

Vielen Dank im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2014, 11:30     Titel:
  Antworten mit Zitat      
Code:

function mysolve
x1 = 0
y1 = 0
x2 = 150
y2 = 100
x3 = 300
r = 100
ri= 800

x = fsolve(@myf,[0;0;0]);

    function y = myf(xs)
        x = xs(1);
        z = xs(2);
        g = xs(3);
        y = zeros(3,1);
        y(1) = (x-x1)^2+(z-y1)^2-(ri+r)^2;
        y(2) = (x-x2)^2+(z-y2)^2-(ri-r)^2;
        y(3) = (x-x3)^2+(z-g)^2-(ri+r)^2;
    end
end
 
 



Innerhalb der Funktion myf wird x überschrieben. Ich denke das ist so nicht beabsichtigt.

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Schwabe12345
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2014, 12:21     Titel:
  Antworten mit Zitat      
Hallo und danke!

Ich habe zusätzlich vor dem fsolve Befehl das x in xs getauscht.
Folgender Code liegt nun vor:

Code:

function mysolve
x1 = 0
y1 = 0
x2 = 150
y2 = 100
x3 = 300
r = 50
ri= 400

xs = fsolve(@myf,[0;0;0]);

    function y = myf(xs)
        x = xs(1);
        z = xs(2);
        g = xs(3);
        y = zeros(3,1);
        y(1) = (x-x1)^2+(z-y1)^2-(ri+r)^2;
        y(2) = (x-x2)^2+(z-y2)^2-(ri-r)^2;
        y(3) = (x-x3)^2+(z-g)^2-(ri+r)^2;
    end
end
 


Läuft komischerweise trotzdem nicht. Auch wenn ich die Änderung rückgängig mache, also x = fsolve (@myf,[0;0;0]) stehen lasse.

Für eure Hilfe jetzt schon besten Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2014, 13:57     Titel:
  Antworten mit Zitat      
bei mir läufts. Welche Fehlermeldung/Problem kommt denn bei dir?

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Schwabe12345
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2014, 14:06     Titel:
  Antworten mit Zitat      
Hallo Thomas,

Fehlermeldung kommt direkt keine, aber mein Workspace bleibt leer und ich kann auch die Ergebnisse nicht abrufen.
Wenn ich z. B. xs(1) eingebe kommt

"Undefined function 'xs' for input arguments of type 'double'."

Wie rufe ich die Ergebnisse ab?

Vielen Dank und schöne Grüße!

P.S. Soll ich eigentlich x vor fsolve oder xs vor fsolve verwenden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2014, 07:34     Titel:
  Antworten mit Zitat      
Code:

function x = mysolve
x1 = 0
y1 = 0
x2 = 150
y2 = 100
x3 = 300
r = 100
ri= 800

x = fsolve(@myf,[0;0;0]);

    function y = myf(xs)
        x = xs(1);
        z = xs(2);
        g = xs(3);
        y = zeros(3,1);
        y(1) = (x-x1)^2+(z-y1)^2-(ri+r)^2;
        y(2) = (x-x2)^2+(z-y2)^2-(ri-r)^2;
        y(3) = (x-x3)^2+(z-g)^2-(ri+r)^2;
    end
end
 

 


Wenn du eine Funktion mit function definierst musst du die Rückgabewerte mit angeben. In diesem Fall x. Aufrufen tust du die Funktion dann mit "x = mysolve". Lies dir am besten nochmal ein Tutorial dazu durch.

viele Grüße
Thomas
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 - 2024 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.