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

Wie löse ich zwei abhängige LGs in Matlab?

 

fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2016, 23:47     Titel: Wie löse ich zwei abhängige LGs in Matlab?
  Antworten mit Zitat      
Hallo Allerseits!

Ich habe hier drei lineare Gleichungssysteme in Matrix-Form die meine Lagerreaktionen für einen Balken beschreiben. Es existieren so viele Unbekannte wie Gleichungen.

Ich würde das Problem gerne in Matlab lösen, weil ich glaube, dass es dort schneller und einfacher geht, wenn man die nötigen Befehle kennt. Ich bitte euch, mir mit den Befehlen zu helfen. Wie legt man die Matrizen und Vektoren mit den Variablen am besten an? Welchen Befehl nutze ich, um anschließen das komplette System aufzulösen?

Bitte entnehmt dieLGS der *.txt Datei im Anhang.

Danke schonmal vorab! Ich freue mich auf eure Beiträge!

LGS.txt
 Beschreibung:

Download
 Dateiname:  LGS.txt
 Dateigröße:  665 Bytes
 Heruntergeladen:  471 mal
LGS.txt
 Beschreibung:

Download
 Dateiname:  LGS.txt
 Dateigröße:  665 Bytes
 Heruntergeladen:  519 mal


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.04.2016, 08:40     Titel:
  Antworten mit Zitat      
Hallo,

das sollte mit syms und solve gehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2016, 13:08     Titel:
  Antworten mit Zitat      
Hallo Harald,

damit hab ich es bereits versucht, leider ohne Erfolg.

# Variablen anlegen
syms Cx Cy Ax Ay Ma By
# Lineares Gleichungssystem 1 anlegen
Matrix
Mat_A=[1,0,0;0,-1,0;1,1,1]
Vaktoren
vek_b=[Cx;Cy;0]
vek_c=[Ax;Ay;Ma]
# LGS 2 anlegen
Matrix
Mat_B=[1,0,0,cos(30);0,1,3/2,-sin(30);0,-3,-1,sin(30)]
Vektoren
vek_e=[Cx;Cy,10,10]
vek_f=[0;By;0]

Wie gehe ich nun weiter vor um die beiden LGS zu lösen?
 
fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2016, 13:11     Titel:
  Antworten mit Zitat      
korrektur:
vek_e=[Cx;Cy;10;10]
 
fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2016, 13:26     Titel:
  Antworten mit Zitat      
>> Variablen anlegen:
syms Ax Ay Ma Cx Cy By

>> dann mit dem Solve befehl:
[solAx,solAy,solMa,solCx,solCy,solBy]=solve([Mat_A*vek_b==vek_c, Mat_B*vek_e==vek_f],[Ax,Ay,Ma,Cx,Cy,By])

>> bringt mir:
??? Error using ==> char
Conversion to char from logical is not possible.

Error in ==> solve>getEqns at 169
vc = char(v);

Error in ==> solve at 67
[eqns,vars] = getEqns(varargin{:});

Könnt ihr einen Fehler ausmachen in meiner "Solve" Gleichung?
 
fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2016, 13:41     Titel:
  Antworten mit Zitat      
meine Variablen im Workspace sind als class:"sym" eingetragen. Meine angelegten Matrizen hingegen als double. könnte hier der Fehler liegen?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.04.2016, 15:34     Titel:
  Antworten mit Zitat      
Hallo,

poste deinen Code bitte zusammenhängend und nutze die Code Tags.

Wenn ich folgenden Code in MATLAB R2015b laufen lasse, bekomme ich Lösungen:
% Variablen anlegen
Code:
syms Cx Cy Ax Ay Ma By
% Lineares Gleichungssystem 1 anlegen
Mat_A=[1,0,0;0,-1,0;1,1,1]
vek_b=[Cx;Cy;0]
vek_c=[Ax;Ay;Ma]
% LGS 2 anlegen
Mat_B=[1,0,0,cosd(30);0,1,3/2,-sind(30);0,-3,-1,sind(30)]
vek_e=[Cx;Cy;10;10]
vek_f=[0;By;0]

[solAx,solAy,solMa,solCx,solCy,solBy]=solve([Mat_A*vek_b==vek_c, Mat_B*vek_e==vek_f],[Ax,Ay,Ma,Cx,Cy,By])


Da sin und cos in Radian rechnen und du wohl Grad haben möchtest, habe ich das angepasst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2016, 18:55     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort. Der Code stimmt mit dem überein was ich bereits in Matlab eingegeben (und oben gepostet) habe. Ausgenommen die Änderungen mit den Grad natürlich! Das ist ein guter Hinweis, danke! Leider bringt mir Matlab die selbe Fehlermeldung: Conversion to char from logical is not possible.

Ich benütze eine ältere Version von Matlab. R2010b. Ich vermute es hängt damit zusammen. Welche Änderungen sind notwendig, damit ich es mit dieser Version lösen kann? Bzw. wie könnte ich vorab die Umwandlung von Logical in Char vornehmen?

Ich danke dir und wünsche einen schönen Abend!
Friedrich
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.04.2016, 19:50     Titel:
  Antworten mit Zitat      
Hallo,

es ist wichtig, dass du die Dokumentation liest - und zwar von dem Release, mit dem du arbeitest. Also
Code:

oder
http://de.mathworks.com/help/releas.....olbox/symbolic/solve.html

Wenn du dich an die Beispiele hältst, sollte das kein Problem sein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2016, 19:56     Titel:
  Antworten mit Zitat      
Hallo Harald,

es hat geklappt! Vielen Dank nochmal für deine Unterstützung.

Hier zur Dokumentation nochmal meine Eingabe die zur Lösung führt in Matlab R2010b:

Meine beiden abhängigen LGS in Matrix-Form:
Code:

%Variablen erstellen:
syms Ax Ay Ma By Cx Cy

%Zwei Matrizen und vier Vektoren anlegen mit den sechs Variablen:
MatA=[1,0,0;0,-1,3;3,3,-4.5]
vekB=[Cx;Cy;2,4]
vekC=[Ax;Ay;Ma]

MatB=[1,0,0,0;0,1,1,0;1,-2,3,1]
vekE=[Cx;Cy;9;10]
vekF=[0;By;0]

eq1=MatA*vekB-vekC
%ergibt:
eq1 =
                 Cx - Ax
          36/5 - Cy - Ay
 3*Cx + 3*Cy - Ma - 54/5

eq2=MatB*vekE-vekF
%ergibt:
eq2 =
             Cx
    Cy - By + 9
 Cx - 2*Cy + 37

S=solve(eq1,eq2)
%ergibt
S =
    Ax: [1x1 sym]
    Ay: [1x1 sym]
    By: [1x1 sym]
    Cx: [1x1 sym]
    Cy: [1x1 sym]
    Ma: [1x1 sym]

%Ergebniss mittels folgendem Code in einen Vektor überführen:
S=[S.Ax,S.Ay,S.Ma,S.By,S.Cx,S.Cy]
 


Interessant für mich wäre nun noch folgendes:
Ich möchte in einem Vektor die Konstante Gewichtskraft G verwenden, die keinen bestimmten Wert hat. Errechnet mir Matlab auch damit eine Lösung? (In etwa in der Form: Ax = 3*G/2 oder so ähnlich)

Viele Grüße
 
fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2016, 20:03     Titel:
  Antworten mit Zitat      
Neuer Versuch es korrekt Abzubilden Smile
Code:

%Variablen erstellen:
syms Ax Ay Ma By Cx Cy;
%Zwei Matrizen und vier Vektoren anlegen mit den sechs Variablen:
MatA=[1,0,0;0,-1,3;3,3,-4.5];
vekB=[Cx;Cy;2,4];
vekC=[Ax;Ay;Ma];
MatB=[1,0,0,0;0,1,1,0;1,-2,3,1];
vekE=[Cx;Cy;9;10];
vekF=[0;By;0];
%Gleichung 1
eq1=MatA*vekB-vekC;
%ergibt:
eq1 =
Cx - Ax
36/5 - Cy - Ay
3*Cx + 3*Cy - Ma - 54/5
% Gleichung 2
eq2=MatB*vekE-vekF;
%ergibt:
eq2 =
Cx
Cy - By + 9
Cx - 2*Cy + 37
% Solver Starten
S=solve(eq1,eq2);
%ergibt
S =
Ax: [1x1 sym]
Ay: [1x1 sym]
By: [1x1 sym]
Cx: [1x1 sym]
Cy: [1x1 sym]
Ma: [1x1 sym]
%Ergebniss mittels folgendem Code in einen Vektor überführen:
S=[S.Ax,S.Ay,S.Ma,S.By,S.Cx,S.Cy];
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2016, 22:03     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich möchte in einem Vektor die Konstante Gewichtskraft G verwenden, die keinen bestimmten Wert hat. Errechnet mir Matlab auch damit eine Lösung? (In etwa in der Form: Ax = 3*G/2 oder so ähnlich)

Probier's aus.

Wenn ich das richtig verstehe:
Code:
syms G
Ax = 3*G/2;

und ansonsten wie gehabt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2016, 17:01     Titel:
  Antworten mit Zitat      
Hallo nochmal!

Leider bin ich nicht weitergekommen.

Wenn ich mir eine Variable G erstelle (
Code:
), dann bringt mir Solve stets ein Ergebnis für G das abhängig ist von Ay und nicht umgekehrt. Ich möchte G lediglich als Variable nutzen, um damit meine Lagerreaktionen (Ax,Ay,Ma,By,Cx,Cy) zu berechnen. Als Ergebnis ist G daher unbrauchbar für mich.

Dabei verstehe ich nicht, weshalb G stets im Ergebnis aufgeführt wird. Die Variablen lege ich an:
Code:

syms Ax Ay Ma By Cx Cy G
 

Warum wählt Matlab trotzdem G anstatt Ay als Ergebnisvariable?
Wie kann ich dies ändern, sodass Ay (und auch die anderen Variablen) in Abhängigkeit von G berechnet werden?

Der Versuch mit Solve die richtigen Variablen für die Ausgabe zu definieren funktioniert leider nicht.
(Code wie im vorigen Post,aber...)
Code:

syms G
vb1=[Cx;Cy;G;G]
% eq1 und eq2 wie im vorigen Post
S=solve(eq1,eq2,Ax,Ay,By,Ma,Cx,Cy) % die angegebenen Variablen möchte ich als Ergebnis haben
% Bringt folgende Fehlermeldung
Warning: Explicit solution could not be found.
> In solve at 81
S =
[ empty sym ]
 

Dafür findet Solve keine Variablen. Was genau der Fehler in Solve ist, weis ich nicht. Ich vermute: sieben Variablen wurden definiert die alle in den sechs Gleichungen vorkommen > Unbestimmtes Gleichungssystem.
Daher ging meine Überlegung in die Richtung G als Konstante zu definieren. Da bin ich noch dran. Haltet ihr die Vorgehensweise für Sinnvoll?

Wie gesagt, mein Ziel ist es die Lagerreaktionen als Funktion von G zu erhalten.

Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.04.2016, 19:10     Titel:
  Antworten mit Zitat      
Hallo,

bitte poste den Code zusammenhängend. Es ist sehr mühsam, sich die Schnipsel zusammensuchen zu müssen.

Danke und Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
fritzmeister

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2016, 19:50     Titel:
  Antworten mit Zitat      
Hallo Harald!

Hier der Code:
Code:

%Variablen erstellen:
syms Ax Ay Ma By Cx Cy G;
%Zwei Matrizen und vier Vektoren anlegen mit den sechs Variablen:
MatA=[1,0,0;0,-1,3;3,3,-4.5];
vekB=[Cx;Cy;2.4];
vekC=[Ax;Ay;Ma];
MatB=[1,0,0,0;0,1,1,0;1,-2,3,1];
vekE=[Cx;Cy;G;G];
vekF=[0;By;0];
%Gleichung 1
eq1=MatA*vekB-vekC;
eq2=MatB*vekE-vekF;
S=solve(eq1,eq2,Ax,Ay,By,Ma,Cx,Cy)
 
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.