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

Frage zu Matrixgleichungen

 

Cingolani

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 11:09     Titel: Frage zu Matrixgleichungen
  Antworten mit Zitat      
Liebe Mathematiker,

Ich muss mit Matrixgleichungen arbeiten und schaffe es (noch) nicht, in Matlab eine Lösung zu finden. Zum Beispiel folgende Gleichung:
v inv(W) (I-rZ) = v
v, I, r, Z sind die Daten, W ist die Unbekannte, die ich bestimmen will.
v ist ein Zeilenvektor :
v = [2 1 4]
I ist die Einheitsmatrix.
r ist ein Skalar:
r = 0.5208
Z ist eine quadratische Matrix:
1 0.66667 3
Z = 0 0 0
0.125 0.0625 0.25
Die gesuchte Matrix W ist eine Diagonalmatrix:
w11 0 0
W = 0 w22 0
0 0 w33

Wie lautet das Kommando zur Lösung? Ich habe alles Mögliche probiert, bekomme aber nur Fehlermeldungen. Wichtig ist mir, dass ich die Gleichungen als Matrixgleichungen lösen will.
Vielen Dank für eure Hilfe.


Harald
Forum-Meister

Forum-Meister


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

bitte die Daten als MATLAB-Code angeben.
Bitte auch angeben, was du versucht hast und welche Fehlermeldungen dabei aufgetreten sind.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 12:00     Titel:
  Antworten mit Zitat      
Ich habe r, Z und v definiert (numerisch).
Dann habe ich die Matrix W symbolisch definiert:
Code:

>> syms 'w11'
>> syms 'w22'
>> syms 'w33'
>> wklein = [w11 w22 w33]
 
wklein =
 
[ w11, w22, w33]

>> W = diag(wklein)
 
W =
 
[ w11,   0,   0]
[   0, w22,   0]
[   0,   0, w33]  


Dann:
Code:
>> fsolve(v*inv(W)*(I-r*Z) == v,W)
Error using fsolve (line 148)
FSOLVE requires the following inputs to be of data type double: 'X0'.
 
Cingolani

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 12:04     Titel:
  Antworten mit Zitat      
Hier die Daten als Code:
Code:

>> r = 0.5208

r =

    0.5208

Trial>> Z=[1 0.66667 3; 0 0 0; 0.125 0.0625 0.25]

Z =

    1.0000    0.6667    3.0000
         0         0         0
    0.1250    0.0625    0.2500

Trial>> v = [2 1 4]

v =

     2     1     4
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.09.2015, 12:56     Titel:
  Antworten mit Zitat      
Hallo,

du vermischt hier numerisches und symbolisches Arbeiten.

Numerisch ginge so:
Code:
r = 0.5208;
Z=[1 0.66667 3; 0 0 0; 0.125 0.0625 0.25]
v = [2 1 4];
I = eye(3);
[wOpt, res] = fsolve(@(w) v*inv(diag(w))*(I-r*Z) - v, [1; 1; 1])


Bei einem symbolischen Ansatz müsstest du mit solve statt fsolve arbeiten.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 14:53     Titel:
  Antworten mit Zitat      
Hallo Harald.
Besten Dank für Deine hilfreiche Antwort. Nun kommt mein eigentliches Problem, und auch hier komme ich nicht weiter. Ich will nun das Skalar r in der obigen Gleichung ersetzen durch:
sum(v inv(W) (I-W))/sum(v inv(W) (H+W))
Dabei ist H:
Code:
H = [1 0.6666 3; 0 0 0; 0 0 0]

H =

    1.0000    0.6666    3.0000
         0         0         0
         0         0         0

Es muss genau dasselbe Ergebnis für w herauskommen, aber wenn ich im Lösungsbefehl "r" durch den obigen Ausdruck ersetze, komme ich nicht auf das Ergebnis:
Code:

>> [wOpt, res] = fsolve(@(w) v*inv(diag(w))*(I-((sum(v*inv(diag(w))*(I-diag(w))))/(sum(v*inv(diag(w))*(H+diag(w)))))*Z) - v, [1; 1; 1])

Equation solved at initial point.

fsolve completed because the vector of function values at the initial point
is near zero as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.

<stopping criteria details>


wOpt =

     1
     1
     1


res =

     0     0     0
 


Warum? Wo liegt das Problem? (Ich weiß nur, dass das System jetzt nicht mehr linear ist; das lineare System ist ein Subsystem von dem jetzigen).
Besten Dank für die Hilfe!!!
 
Harald
Forum-Meister

Forum-Meister


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

es scheint mehrere Lösungen zu geben. Die Gleichungen sind ja mit [1;1;1] erfüllt. Wenn du als Startwert [0.2; 0.2; 0.2] angibst, bekommst du die vorherige Lösung.

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 - 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.