pythonの配列をmatlab engineに渡すときにエラーが出ます

7 visualizaciones (últimos 30 días)
Yusuke Higuchi
Yusuke Higuchi el 5 de Mzo. de 2020
Comentada: Yusuke Higuchi el 6 de Mzo. de 2020
matlab engineを用いてpython(python3.7)からmatlab(MATLAB2019b)の関数eig(一般固有値解析)を用いる際に
MatlabExecutionError: データ型が無効です。入力行列は double または single でなければなりません。」というエラーが生じます。
コードは以下の通りです。
import matlab.engine
import math
eng=matlab.engine.start_matlab()
A = [[1/math.sqrt(2),0], [0, 1]]
B = [[0,1], [-1/math.sqrt(2) ,0]]
[V,D]=eng.eig(A,B)
この原因は行列A,Bにあり、matlabが計算できる形にする必要があると思い、以下のようにコードを改変しましたが、
MatlabExecutionError: cell から double に変換できません。」というエラーが生じて、行列をdouble化できませんでした。
import matlab.engine
import math
eng=matlab.engine.start_matlab()
A = [[1/math.sqrt(2),0], [0, 1]]
B = [[0,1], [-1/math.sqrt(2) ,0]]
Ad=eng.double(A)
Bd=eng.double(B)
[V,D]=eng.eig(Ad,Bd)
これらのエラーを解消し、固有値解析をmatlab engineで行うにはどのようにすればよいでしょうか?
  1 comentario
Yusuke Higuchi
Yusuke Higuchi el 5 de Mzo. de 2020
途中経過です。
import matlab.engine
import math
eng=matlab.engine.start_matlab()
A = matlab.double([[1/math.sqrt(2),0], [0, 1]])
B = matlab.double([[0,1], [-1/math.sqrt(2) ,0]])
[V,D]=eng.eig(A,B)
このようにmatlab.doubleを用いれば解析は回りましたが、次は答えのV,Dの値がおかしいです。
MATLAB本体で行うと、
A = [1/sqrt(2) 0; 0 1];
B = [0 1; -1/sqrt(2) 0];
[V,D]=eig(A,B)
V =
1.0000 + 0.0000i 1.0000 + 0.0000i
0.0000 - 0.7071i 0.0000 + 0.7071i
D =
0.0000 + 1.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 - 1.0000i
とV及びDは行列表記となりますが、pythonでmatlab engineを利用して同様に解くとV=1j, D=-1jとなりスカラーで返されます。これはmatlab engineのエラーでしょうか?

Iniciar sesión para comentar.

Respuesta aceptada

Kojiro Saito
Kojiro Saito el 6 de Mzo. de 2020
MATLABエンジンはデフォルトでは1つの出力しか返さないので、今回のように出力引数を2にする場合は、nargout=2を付ける必要があります。
最後の行だけ変更すると、VとDの値が正しく格納されると思います。
[V,D]=eng.eig(A,B,nargout=2)
  1 comentario
Yusuke Higuchi
Yusuke Higuchi el 6 de Mzo. de 2020
ありがとうございます!
確認できました!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Python からの MATLAB の呼び出し en Help Center y File Exchange.

Productos


Versión

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!