Ich versuche, meinen Code zu beschleunigen, weil es sehr lange läuft. Ich habe bereits herausgefunden, wo das Problem liegt. Man betrachte das folgende Beispiel:Vectorize Funktion zur Vermeidung von Schleife
x<-c((2+2i),(3+1i),(4+1i),(5+3i),(6+2i),(7+2i))
P<-matrix(c(2,0,0,3),nrow=2)
out<-sum(c(0.5,0.5)%*%mtx.exp(P%*%(matrix(c(x,0,0,x),nrow=2)),5))
Ich habe einen Vektor x mit komplexen Werten, hat der Vektor 12^11 Einträge und dann möchte ich die Summe in der dritten Reihe berechnen. (Ich brauche die Funktion mtx.exp, weil es eine komplexe Matrixleistung ist (die Funktion ist im Paket Biodem). Ich fand heraus, dass die% ^% Funktion komplexe Argumente nicht unterstützt.)
Also mein Problem ist, dass wenn ich versuche
sum(c(0.5,0.5)%*%mtx.exp(P%*%(matrix(c(x,0,0,x),nrow=2)),5))
ich einen Fehler: "Fehler im Topf% *% Topf. nicht-anpassungs Argumente" Also meine Lösung war eine Schleife zu verwenden:
Aber wie gesagt, das dauert sehr lange. Haben Sie Ideen, wie Sie den Code beschleunigen können? Ich habe auch versucht, sapply, aber das dauert genauso lange wie die Schleife.
Ich hoffe, Sie können mir helfen, weil ich diese Funktion etwa 500 Mal ausführen muss und dies dauerte in ersten Versuch mehr als 3 Stunden. Welche ist nicht sehr befriedigend ..
sehr viel Thank u
Sorry, vielleicht habe ich das Problem nicht richtig erklären: So habe ich diese Matrix P (das ist normalerweise nicht eine Diagonale Matrix) betrachten P <-Matrix, nrow = 2) diese Matrix durch eine andere multipliziert wird (diagonal, diesmal) Matrix nennen wir es C C <(c (2.1,20, 0.3,3.2.) - Matrix (c (x [i], 0,0, x [i]), nrow = 2) (für jedes i in (1: leng th (x)) Dann mag ich die n-te Potenz in diesem Fall zu übernehmen n = 5 (P * C)^5 Dies wiederum durch einen Vektor und die Elemente Sumed bis multipliziert wird. Mein Problem ist, dass ich es nicht mit einer Schleife machen möchte (also für jede Eingabe in x muss diese Summe berechnet werden) – rainer
Wenn die Matrix 'C' ist skalar (dh diagonal, mit dem gleichen Element überall auf der Diagonalen), kann dies noch geschrieben werden 'sum (mtx.exp (P, 5)/2) * x^5'. –
Okey danke, das hilft ein bisschen. Das nächste Problem, dem ich gegenüberstehe, ist, dass meine Einträge in der Matrix C nicht dieselben sind, sondern zum Beispiel von einer Funktion abhängen: C <-Matrix (dnorm (x [i], 0,1), 0,0, dnorm (x [ i], 1,3)) – rainer