2017-11-16 2 views
-1

Ich habe ein Programm in Matlab, das ich in ein R-Programm übersetzen soll.Was ist der äquivalente Operator in R für Matlab/

Matlab-Programm ist:

function R = cprob(N,A,B) 
    R = ((A.*B)*N)/(B*N) 
end 

In R "*" wird "% *%" und "*" wird "*". Und "/"?

+0

Nicht jeder kennt Matlab. Aus diesem Grund werden reproduzierbare Beispiele empfohlen. Was macht '/' in Matlab? [editiert] –

+0

Die Division von Matrizen ist nicht eindeutig definiert und kann entweder 'Ginv (B)% *% A' oder 'A% *% Ginv (B)' sein, wobei 'Ginv' eine verallgemeinerte R-Funktion zum Lösen der Inverse der Matrix ist . – dww

+0

[This] (https://stackoverflow.com/questions/20116607/r-right-matrix-division) kann helfen – ANG

Antwort

0

Ich verstehe, dass durch "/" Sie eine Matrix richtige Division meinen.

Sie können mrdivide frim das pracma Paket verwenden. Bitte sehen Sie sich das an.

https://www.rdocumentation.org/packages/pracma/versions/1.9.9/topics/mldivide

Dies würde Ihr Code sein:

library("pracma") 

    a1 = matrix(c(1,2,0,2,5,-1,4,10,-1),nrow=3,ncol=3) 
    a2 = matrix(c(1,2,4,2,5,10,0,-1,-1),nrow=3,ncol=3) 
    a3= matrix(c(1,0,0,0,1,0,0,0,1),nrow=3,ncol=3) 


    myfunction<-function (N,A,B) { 
     return(round(mrdivide((A*B)%*%N,B %*% N))) 
    } 

    result_matrix<-myfunction(a1,a2,a3) 

dem Sie das Ergebnis, das Sie in den Kommentaren angegeben gibt.

+0

für Matrizen: a1 = [1 2 0; 2 5 -1; 4 10 -1] a2 = [1 2 4; 2 5 10; 0 -1-1] a3 = [1 0 0; 0 1 0; 0 0 1] in Matlab cprob (a1, a2, a3): 1 -0 -0 0 5 -0 0 -0 -1 In R mit der Funktion cprob <- Funktion (N , A, B) { return (mrdivide ((A * B)% *% N, B% *% N)) } I ein anderes Ergebnis haben: 13,8 32 -2.4 -6.4 -15 1.2 -4.8 -12 1.4 –

+0

Hallo Isac. Ich bekomme das gleiche Ergebnis. Bitte überprüfe meinen Code! – Neoromanzer

+0

Sie haben Recht! :). Aber ich folgte der von @ANG vorgeschlagenen Lösung und schrieb: cprob <- Funktion (N, A, B) { Rückkehr (((A * B)% *% N)% *% Lösung (B% *% N)) } Danke euch beiden für die Hilfe. :) –

Verwandte Themen