コードの実行時間が非常に長いため、コードを高速化しようとしています。問題がどこにあるかはすでにわかりました。次の例を検討してください。
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))
複雑な値を持つベクトル x があり、ベクトルには 12^11 のエントリがあり、3 行目の合計を計算したいと考えています。(関数 mtx.exp が必要なのは、これが複素行列ベキだからです (関数はパッケージ Biodem にあります)。%^% 関数は複素数引数をサポートしていないことがわかりました。)
だから私の問題は、私が試してみると
sum(c(0.5,0.5)%*%mtx.exp(P%*%(matrix(c(x,0,0,x),nrow=2)),5))
エラーが表示されます:「pot %*% pot のエラー: 適合しない引数です。」したがって、私の解決策はループを使用することでした:
tmp<-NULL
for (i in 1:length(x)){
tmp[length(tmp)+1]<-sum(c(0.5,0.5)%*%mtx.exp(P%*%matrix(c(x[i],0,0,x[i]),nrow=2),5))
}
しかし、前述のとおり、これには非常に時間がかかります。コードを高速化する方法はありますか? 私もsapplyを試しましたが、ループと同じくらい時間がかかります。
この関数を約 500 回実行する必要があり、最初の試行で 3 時間以上かかったので、助けていただければ幸いです。これはあまり満足のいくものではありません..
ありがとうございます