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

Mit numerischem Wert aus symbolischer Rechnung weiterrechnen

 

Anfänger2017

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2017, 14:42     Titel: Mit numerischem Wert aus symbolischer Rechnung weiterrechnen
  Antworten mit Zitat      
Hallo zusammen,

ich bin Anfänger in Sachen matlab und komme bei einem Punkt nicht weiter, obwohl ich schon überall nach einer Lösung gesucht habe.

Ich habe drei Gleichungssysteme (GS) mit Variablen berechnet (symbolisch).
(Die Werte stimmen auch.)

Im nächsten Schritt will ich einen berechneten Wert (symbolisch berechnet) aus GS1 in GS2 einsetzen.

Jetzt kommt das Problem:
Matlab übernimmt nicht den Wert sondern die Variable.
Ich kann diese zwar mit double(...) in eine numerische Zahl ändern (und bekomme sie auch als solche angezeigt), aber dennoch übernimmt mir matlab für die folgende Berechnung die Variable und nicht den Wert der Variable.

Ich hoffe ihr könnt mir bei meinem Problem helfen. Smile

Vielen Dank im Voraus.


Harald
Forum-Meister

Forum-Meister


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

poste doch bitte Code dafür, damit man das Problem besser nachvollziehen kann.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfänger2017
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2017, 15:44     Titel:
  Antworten mit Zitat      
Hallo nochmal,

hier noch der Code

Code:


clear all;
clc;

syms A B C D E F G H;

H = 35;


Z =          [1         0         0         0         0        -1         0         0
              0       1/2         0         0         0      -1/2         0         0
              0         0    59/120      -1/6      -1/8         0      -1/5         0
              0         0      -1/6     13/42      -1/7         0         0         0
              0         0      -1/8      -1/7     15/56         0         0         0
             -1      -1/2         0         0         0      11/6      -1/3         0
              0         0      -1/5         0         0      -1/3     47/60      -1/4
              0         0         0         0         0         0      -1/4       1/4]
     
 

X =[  100.0000
      200.0000
         2.000
         3.000
         4.000
             0
             0
     -309.0000]
 


T     = [A
         B
         C
         D
         E
         F
         G
         H]


V = Z*T;

gl1 = V(1)-X(1);
gl2 = V(2)-X(2);
gl3 = V(3)-X(3);
gl4 = V(4)-X(4);
gl5 = V(5)-X(5);
gl6 = V(6)-X(6);
gl7 = V(7)-X(7);
gl8 = V(8)-X(8);


G = double(vpa(solve(gl8==0, [G])))

     %hier soll G als Wert eingesetzt werden, allerdings rechnet matlab mit der Variable G

LGS1 = solve(gl1,gl2,gl6, [A, B, F]);
LGS2 = solve(gl3,gl4,gl5, [D, E, C]);


A = vpa(LGS1.A)
B = vpa(LGS1.B)
C = vpa(LGS2.C)
D = vpa(LGS2.D)
E = vpa(LGS2.E)
F = vpa(LGS1.F)


      %auch in T wird nicht der Wert von G geschrieben sondern die Variable


T
 



Mit dem double gibt mir matlab einen numerischen Wert für G aus.
Dieser wird benötigt um A bis F auszurechnen, allerdings setzt es hier G ein, statt dessen Wert.

Vielen Dank vorab. Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du müsstest G explizit durch den Wert von G ersetzen:
Code:
Gspec = double(vpa(solve(gl8==0, [G])))

gl1 = subs(gl1, G, Gspec);
gl2 = subs(gl2, G, Gspec);
gl3 = subs(gl3, G, Gspec);
gl4 = subs(gl4, G, Gspec);
gl5 = subs(gl5, G, Gspec);
gl6 = subs(gl6, G, Gspec);


Wenn du statt verschiedener Variablen ein Array von Gleichungen erstellst, kannst du das bequem in einer for-Schleife machen.

Da du aber ohnehin an numerischen Lösungen interessiert bist, würde ich das gleich als lineares Gleichungssystem in MATLAB hinschreiben und dann A*x = b nach x auflösen mit
x = A \ b

Für nichtlineare Probleme gibt es dann noch fsolve .

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfänger2017
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2017, 00:29     Titel:
  Antworten mit Zitat      
Hey, vielen, vielen Dank für die rasche Antwort! Very Happy
Echt klasse.


Das mit der rein numerischen Berechnung war auch mein erster Gedanke. Aber ich wusste nicht wie ich bei "x = A \ b" alle Einträge des Vektors x berechne, ausgehend von einem vorgegebenen Wert in x...
In meinem Fall ist der letzte Eintrag in x ja gegeben, von dem ausgehend das LGS gelöst werden soll. Hinzu kommt, dass das System ja überbestimmt ist.
Geht das dennoch?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wenn du einen Wert vorgegeben hast, dann kannst du diesen Anteil des Gleichungssystems auf die rechte Seite schieben.

Code:
X2 = X - Z(:, 8) * 35;
 sol = Z(:, 1:end-1) \ X2
 norm(Z * [sol; 35] - X)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfänger2017
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2017, 10:49     Titel:
  Antworten mit Zitat      
Super, vielen Dank das hat mir wirklich sehr weitergeholfen!!! Smile

Darf ich noch fragen, warum du anschließend noch die norm berechnest?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

um sicherzustellen, dass ich keinen Mist gebaut habe und der zusammengebastelte Vektor wirklich das Gleichungssystem löst.

Grüße,
Harald
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.