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

Inverses einer Matrix mit Parameter

 

Lenard
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 06.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2014, 14:25     Titel: Inverses einer Matrix mit Parameter
  Antworten mit Zitat      
Hallo zusammen,

ich möchte das Inversen einer allgemeinen Matrix mit Matlab bestimmen. Ich kenne den Befehl inv(), doch er funktioniert hier nicht. Hat jemand eine Idee wie ich das Inverse von A=[1,2,t;2*t,4,6;t^2,3*t,7]; bestimmen kann?

Vielen Dank im Voraus.
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.04.2014, 14:40     Titel:
  Antworten mit Zitat      
hallo.
Zitat:
Ich kenne den Befehl inv(), doch er funktioniert hier nicht.

warum nicht? was klappt nicht?
codebeispiele sind dort immer hilfreich. wie weicht das gewünschte ergebniss vom erzielten ab?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 06.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2014, 14:46     Titel:
  Antworten mit Zitat      
Also ich bekomme direkt eine Fehlermeldung, wobei es egal ist, ob ich es in ein m.file schreibe oder direkt ins Kommandofenster.
Hier ein Beispeil fürs Kommandofenster:
Code:
>> A=[1,2,t;2*t,4,6;t^2,3*t,7];
Undefined function or variable 't'.
 
>> inv(A)
Undefined function or variable 'A'.


Ich habe online nichts gefunden, wie ich die Variable definieren könnte ohne ihr einen Wert zu geben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.04.2014, 14:50     Titel:
  Antworten mit Zitat      
dafür brauchst du die symbol processing toolbox.
dein fehler hat nichts mit inv zu tun sonder damit das du t nicht definierst. deswegen ist es wichtig code mit anzugeben.
Code:
syms t;
 A=[1,2,t;2*t,4,6;t^2,3*t,7];
inv(A)
 

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 06.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2014, 14:56     Titel:
  Antworten mit Zitat      
Okay, danke. Doch leider funktioniert das bei mir auch nicht...Ich bekomme die folgende Fehlermeldung:

Code:

>>syms t;
Undefined function 'syms' for input arguments of type 'char'.
 
Did you mean:
>> sum t;


Ich hab gerade gesehen, dass ich die Toolbox nicht installiert habe. Gibt es noch eine andere Möglichkeit? Ich arbeite nämlich an einem Computer an der Uni

Zuletzt bearbeitet von Lenard am 10.04.2014, 15:00, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.04.2014, 14:59     Titel:
  Antworten mit Zitat      
dann hast du wohl die symbol math toolbox nicht die ich erwähnte.
das kannst du mit
Code:
nachgucken.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 06.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2014, 15:01     Titel:
  Antworten mit Zitat      
Hab ich gemacht, danke. Ich hab sie leider nicht installiert, sitze aber an einem Computer der Uni. Gibt es noch eine weitere Möglichkeit?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.04.2014, 15:06     Titel:
  Antworten mit Zitat      
das ist sehr komisch. die uni hat normalerweise alle toolboxen ^^ vieleicht mal mit dem admin reden. sonst ist mir keine lösung bekannt das ganze ohne einen speziellen wert für t zu lösen ist es den für dein problem nötig eine symbolische lösung zu haben ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 06.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2014, 15:19     Titel:
  Antworten mit Zitat      
Also mein eigentlich Problem ist komplizierter. Eigentlich möchte ich eine Funktion plotten, die wie folgt aussieht:

C = 3*normcdf(D,0,1)+2*a*normpdf(D,0,1), wobei D=3/(2*a) und
a= min d unter einer Nebenbedingung und d=...inv(Varianz-Kovarianz-Matrix)... ist.

Beim Plotten sollen die sigmas in der Varianz-Kovarianz-Matrix die Achsen und somit ja variabel sein.

Meine Idee war, die Funktion komplett zu programmieren und sie dann plotten zu lassen. Aber das funktioniert leider gar nicht
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.04.2014, 15:28     Titel:
  Antworten mit Zitat      
Zitat:
Aber das funktioniert leider gar nicht

ich kann mich da nur wiederholen ^^ ohne den code kann ich keine verbesseungs vorschläge machen Smile
wenn du etwas plotten willst musst du ja dann sowieso werte einsetzen. anonyme funktionen oder function scripte bieten sich hier an.
um mal das beispiel von oben aufzugreifen:
Code:

 A=@(t) [1,2,t;2*t,4,6;t^2,3*t,7];
B=@(t) inv(A(t));
A(1)% matrix für t=1
B(1)% inverse für t=1
 

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 10.04.2014, 15:30     Titel:
  Antworten mit Zitat      
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 10.04.2014, 15:32     Titel:
  Antworten mit Zitat      
Hallo,

ohne symbolic Toolbox für Matlab wirst du da mit Matlab nicht weiterkommen. Glücklicherweise gibt es aber ja noch andere Anbieter. Es ist manchmal einfacher, dann auf soetwas zurückzugreifen, wenn das nicht automatisiert ablaufen muss (beispielsweise für 100 verschiedne Matrizen).

Dies hier kannst du bei wolframalpha eintippen und erhältst eine Lösung:
inv{{1, 2, t},{2*t, 4, 6},{t^2, 3*t, 7}}
Das müsstest du dann eben wohl per Hand rausschreiben. Geht aber immer noch schneller, als die Inverse direkt per Hand zu berechnen Wink

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 06.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2014, 15:38     Titel:
  Antworten mit Zitat      
Okay, also ich hab gar keine Ahnung, ob das auch nur im Ansatz richtig ist, da ich noch nie mit Matlab etwas geplottet hab.
Aber ich habe bis jetzt folgendes:

Code:
%m.file, welches ich im Kommandofenster aufrufe
x0 = [60;60;2];
X = [0:0.1:1];
Y = [0:0.1:1];
Z = [0:0.1:1];


[x,fval] = fmincon(@fun3,x0,[],[],[],[],[],[],'restriction');
sigma = Berechne_sigmaB(fval);
C = Berechne_CB(sigma);

scatter3(X,Y,Z,C)
axis equal,
grid on,
whitebg('w')


Berechne_sigmaB bzw Brechne_CB sind m.files, welche nur etwas berechnen. Hier noch fun3.m, in welcher unter anderem die Matrix invertiert werden soll:
Code:

function f = fun3(x)
X = [0:0.1:1];
Y = [0:0.1:1];
Z = [0:0.1:1];


rho12 = 0.95;
rho13 = 0.80;
rho23 = 0.70;

Sigma = [X.^2,X.*Y.*rho12,X.*Z.*rho13;X.*Y.*rho12,Y.^2,Y.*Z.*rho23;X.*Z.*rho13,Y.*Z.*rho23,Z.^2];
A = inv(Sigma);
y = log(x) - log([60;60;2]);
f = transpose(y)*A*y;
 



Als Fehlermeldung bekomme ich:

Warning: The default trust-region-reflective algorithm does not solve problems with the
constraints you have specified. FMINCON will use the active-set algorithm instead. For
information on applicable algorithms, see Choosing the Algorithm in the documentation.
> In fmincon at 501
In bspBild at 8
Warning: Your current settings will run a different algorithm (interior-point) in a
future release.
> In fmincon at 506
In bspBild at 8
Error using inv
Matrix must be square.

Error in fun3 (line 12)
A = inv(Sigma);

Error in fmincon (line 640)
initVals.f = feval(funfcn{3},X,varargin{:});

Error in bspBild (line 8 )
[x,fval] = fmincon(@fun3,x0,[],[],[],[],[],[],'restriction');

Caused by:
Failure in initial user-supplied objective function evaluation. FMINCON cannot
continue.[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 06.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2014, 15:48     Titel:
  Antworten mit Zitat      
Das Inverse der Matrix mit WolframAlpha klappt super, aber wie verbinde ich nun die Parameter der Matrix mit den Achsen? Wenn ich es so mache, wie angegeben (also zum Beispiel X = [0:0.1:1]Wink stimmen die Dimensionen nicht überein, da X dann ein zu großer Vektor wird. Außerdem klappt es auch mit der Minimumsbestimmung nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 06.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2014, 16:33     Titel:
  Antworten mit Zitat      
So, ich habe den Code jetzt wie folgt umgeändert:

m.file fun3:
Code:

function f = fun3(x)
X = [0:0.1:1];
Y = [0:0.1:1];
Z = [0:0.1:1];


a = 0.95*ones(1,11);
b = 0.80*ones(1,11);
c = 0.70*ones(1,11);


A = 1*ones(1,11)/(a.^2-2*ones(1,11).*a.*b.*c+b.^2+c.^2-1*ones(1,11))*[-((1*ones(1,11)-c.^2)/(X.^2)),(a-b.*c)/(X.*Z),(b-a.*c)/(X.*Z);(a-b.*c)/(X.*Y),-((1*ones(1,11)-b.^2)/(Y.^2)),-((a.*b-c)/(Y.*Z));(b-a.*c)/(X.*Z),-((a.*b-c)/(Y.*Z)),-((1*ones(1,11)-a.^2)/(Z.^2))];
y = log(x) - log([60;60;2]);
f = transpose(y)*A*y;
 


m.file bspBild:
Code:

x0 = [60;60;2];
X = [0:0.1:1];
Y = [0:0.1:1];
Z = [0:0.1:1];


[x,fval] = fmincon(@fun3,x0,[],[],[],[],[],[],'restriction');


sigma = Berechne_sigmaB(fval);
C = Berechne_CB(sigma);

scatter3(X,Y,Z,C)
axis equal,
grid on,
whitebg('w')
 


Mein Problem ist nun, dass ich eigentlich ein Bild haben möchte, welches wie bei dem Befehl "surf" aussieht. Dieser Befehl klappt hier aber nicht. Gibt es eine Möglichkeit scatter3(X,Y,Z,C) so zu ersetzen, das ich das gewünschte Bild bekomme?
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 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.