2017-06-18 5 views
0

解決します恒等行列Sは恒等行列に初期化されます。 私はSを見つけるために方程式を解きたいと思います。私はこれを逆行列を取らずに単純化することなくこれを行うのですか?(私は大きなデータセット遅い)上記の式を使うだけでいくつかの結果が得られますが、3つの行列乗算を同時に行うことができないのかどうかはわかりません。私はSを解くために何ができますか?私は式を有する線形再帰マトリックス

the answer I am getting after plugging in all the matrices with values

+0

あなたのグラフィックでも「C」、「B」、「Q」の値が何であるか教えてくれないので、あなたの質問にどう答えることができますか? 「3つの行列乗算を同時に行うことはできますか?」とはどういう意味ですか?最初の2つを乗じてから3番目のものを乗算するだけです。そして、行列の逆転は多項式時間である単純なアルゴリズムで最悪のO(n ** 3)になるので、何が間違っていますか?あなたの具体的な例には、その時間をさらに短縮する機能があるかもしれません。あなたの答えの正しさをチェックできるように、完全な例をテキストで表示してください。 –

+0

また、速度が重要な場合は、基本的なPythonリストのリストではなく、numpy配列を使用するべきでしょう。 –

+0

最初の2つの行列と3番目の行列を乗算することはできません。最初の2つはBとSであり、乗算するとSの値が変わるからです。Sが式の両辺に存在するので問題になります。間違っている。 –

答えて

0

あなたの行列に応じて、あなただけの、式を反復処理し、それが収束することを願ってすることができるかもしれません。私。 S=Iで始まり、それ以上変化しなくなるまでSを再計算してください。もちろん、これは収束することが保証されていませんが、試してみるとよいでしょう。

これを直接解決したい場合は、線形システムを導き出すことができます。 RHSを外に出して(結果として得られる行列のすべての項目について式を得るように)、すべての項目に対して方程式を設定します。例えば。最初のエントリのために、これは次のようになります。

s11 = 1 - c + c * (q11 * (b11 * s11 + b12 * s21 + b13 * s31 + ...) + 
        q21 * (b11 * s12 + b12 * s22 + b13 * s32 + ...) + 
        q31 * (b11 * s13 + b12 * s23 + b13 * s33 + ...) + 
        ...) 

s..のために解決し、あなたは完了です。システムが解決策を認める場合は、もちろんです。それ以外の場合は、最小二乗解を求めることができます。

+0

ありがとうございました。このケースでは収束していますが、それが良いとは言えません。 –

0
for t in range(100): 

     s=c*(sc.dot(sc.dot(Qin.T,s),Qin))+ (1-c)*I 

これは再帰的に100 times.Youは、Si-Siを1収束テストを行うことができ方程式を解く=いくつかの小さな値も収束をチェックします。