2016-07-20 24 views
1

Ich habe eine 3x3 Matrix Omega, deren Elemente unbekannt sind, und einen definierten 3x1 Parameter Vektor alpha. Ich möchte ein 3x1-Vektor-Delta, deren Elemente definieren, nach wie vor unbekannt sind, aber hängen von Alpha und Omega, wie in diesem Bild gezeigt:System von Gleichungen mit Unbekannten in R

Formula

Der Begriff in den Klammern auf die Potenz von 2 vereinfacht sich zu einer Reihe K, so habe ich diese Funktion:

Alpha=c(-0.248,1.092,-0.518) 
K=function(gamma1,gamma2,gamma3,gamma12,gamma23,gamma13){ 
    (1+Alpha[1]*(Alpha[1]+Alpha[2]*gamma12/(gamma1*gamma2)+Alpha[3]*gamma13/(gamma1*gamma3)))^(-1/2) 
    } 

gamma1, gamma2, gamma3 sind die Elemente in der Diagonale der 3x3-Matrix Omega, während gamma12, gamma13, gamma23 die Nichtdiagonalelemente (jeweils Elemente wiederholt sich zweimal, zB gamma12=gamma21). Also, indem ich 6 beliebige Werte in setze, bekomme ich den Skalar. So weit, so klar.

Der Rest bin ich mir nicht sicher. Ich möchte, dass R mir ein wie oben gezeigtes Vektor-Delta zurückgibt. Wie kann ich eine Funktion schreiben, die diese algebraische Berechnung durchführt und ein 3x1-Vektor-Delta zurückgibt, dessen Elemente die gleichen Unbekannten wie in Omega sind, aber verschoben/multipliziert mit den Zahlen in Alpha?

+0

die Gleichung im Klartext schreiben möchten, gibt es ein Problem mit der gemeinsamen Nutzung ist, nach Benutzer und Passwort fragen. – Robert

+0

Hallo @Robert, habe ich die Formel in Text direkt unter dem Link hinzugefügt. Ich hoffe du verstehst, was ich mit der Formel meine, sonst lass es mich wissen! – Kondo

+0

Versuchen Sie, symbolische Algebra durchzuführen? (Das heißt, Sie wollen die Antwort in Bezug auf nicht bewertete Variablen?) – Gregor

Antwort

1

Ist das, was Sie aus ?: wollen

#generate the triangular matrix 
set.seed(234) 
og<-matrix(runif(9,1,2),3) 
og[lower.tri(og)] = t(og)[lower.tri(og)] 
#K(og[1,1],og[2,2],og[3,3],og[1,2],og[2,3],og[1,3]) 

#delta = (1 + alpha' * Omega * alpha)^(-1/2) * Omega * alpha 
as.numeric((1+Alpha%*%og%*%Alpha)^(-1/2))*og%*%Alpha 

> as.numeric((1+Alpha%*%og%*%Alpha)^(-1/2))*og%*%Alpha 
      [,1] 
[1,] 0.7264204 
[2,] -0.2365427 
[3,] 0.5709528 

bearbeiten

Wenn Sie eine Funktion

Kf=function(gamma1,gamma2,gamma3,gamma12,gamma23,gamma13,Alphav=Alpha){ 
    ogm<-matrix(c(gamma1,gamma12,gamma13,gamma12,gamma2,gamma23, 
       gamma13,gamma23,gamma3),3) 
    KF<-as.numeric((1+t(Alphav)%*%ogm%*%Alphav)^(-1/2)) 
    Delt<-KF*ogm%*%Alphav 
    list(Delta=Delt,K=KF,Om=ogm) 
} 

#taking the same random values for consistency 
gamma1=og[1,1]; gamma2=og[2,2]; gamma3=og[3,3]; 
gamma12=og[1,2]; gamma23=og[2,3]; gamma13=og[1,3] 

Kf(gamma1,gamma2,gamma3,gamma12,gamma23,gamma13)$Delta 

> Kf(gamma1,gamma2,gamma3,gamma12,gamma23,gamma13)$Delta 
      [,1] 
[1,] 0.7264204 
[2,] -0.2365427 
[3,] 0.5709528 
+0

Danke für die Antwort, aber ich meinte etwas ein bisschen anders. Wenn Omega bekannt ist, dann ja, das würde ich gerne machen. Die Sache ist, Omega ist unbekannt. In der Matrix Omega habe ich 6 Unbekannte (da sich einige selbst wiederholen), in Vektor Alpha 3 bekannte Zahlen. Ich brauche einen Ausdruck von Delta als Funktion von (og [1,1], ..., og [1,3]), den ich später in einer zweiten Gleichung verwenden kann, die Omega und eine Transformation von Delta zu a gleichsetzt Matrix weiß ich voll und ganz. Hoffe, das ist klarer. – Kondo

+0

Sehen Sie, wenn die Bearbeitung funktioniert – Robert

+0

Dies ist nicht genau das, was ich gesucht habe (siehe Gregors Kommentar), aber ich danke Ihnen für Ihre Bemühungen und Antworten. Eigentlich hast du mir ein paar Eingaben für etwas gegeben, das ich später in meinem Code brauche. Danke :) (Entschuldigung, ich kann deine Antwort nicht auffrischen, ich habe versucht, aber anscheinend brauche ich einen Ruf von 15 zu upvote) – Kondo

Verwandte Themen