Verfasst am: 10.04.2014, 14:25
Titel: Inverses einer Matrix mit Parameter
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?
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'.
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.
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
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 ?
_________________
ich kann mich da nur wiederholen ^^ ohne den code kann ich keine verbesseungs vorschläge machen
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
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
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);
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;
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]
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] stimmen die Dimensionen nicht überein, da X dann ein zu großer Vektor wird. Außerdem klappt es auch mit der Minimumsbestimmung nicht.
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;
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?
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
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.