• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:scilab ヤコビ法について、errorがでます)

scilabヤコビ法で固有値と固有ベクトルを求めるプログラムでエラーが発生

このQ&Aのポイント
  • scilabのヤコビ法を使って固有値と固有ベクトルを求めるプログラムを作成していますが、エラーが発生しています。
  • 現在、プログラムの一部に「end」を入れると、「一貫性がない掛け算です。」というエラーが発生し、入れなければ「elseが抜けています...」というエラーが出ます。
  • scilab自体に詳しくないため、コードに間違いがあるかもしれません。解答をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8469/18132)
回答No.3

あなたが書いたものからif文に関係ありそうなところを抜き出すと if abs(A(1,2)) > abs(A(1,3)) then if abs(A(1,2)) > abs(A(2,3) then elseif abs(A(1,2)) > abs(A(1,3)) then if abs(A(2,3)) > abs(A(1,2) then elseif abs(A(1,3))>abs(A(2,3)) then if abs(A(1,3)) > abs(A(1,2)) then else end となるけど,これで正しい文法に従っていると思うか? 多分,意図しているのはこれであろう。 if abs(A(1,2)) >= abs(A(1,3)) & abs(A(1,2)) >= abs(A(2,3)) then elseif abs(A(2,3)) >= abs(A(1,3)) & abs(A(2,3)) >= abs(A(1,2)) then elseif abs(A(1,3)) >= abs(A(2,3)) & abs(A(1,3)) >= abs(A(1,2)) then else //ここには来ない end

teltel-bouzu
質問者

お礼

ありがとうございます。 おかげさまで、無事、プログラムを完成させることができました。

その他の回答 (2)

  • f272
  • ベストアンサー率46% (8469/18132)
回答No.2

少し修正。 > Pinfの行ベクトルが固有ベクトルになる ということですから,「Pinf=P*Pinf」で問題なかった。 でも,Pinfの列ベクトルが固有ベクトルになるようにした方がいいんじゃないかなあ?

teltel-bouzu
質問者

お礼

一応、考え直した結果、ある程度進展はしたと想うのですが・・・また、「end またはelseが抜けています」とerrorが出てしまいました・・・。何度も、申し訳ないのですが、もし、よろしければ、また間違えているところの指摘をお願いします。 ↓がプログラムです。 //初期化 A=[2 1 3;1 0 1;3 1 0] Pinf=eye(3,3) //ヤコビ法:Aの対角成分が固有値、 Pinfの行ベクトルが固有ベクトルになる for i=1:20, i if abs(A(1,2)) > abs(A(1,3)) then if abs(A(1,2)) > abs(A(2,3) then theta=atan(2*A(1,2))/(A(1,1)-A(2,2))/2, P=[cos(theta),sin(theta),0;-sin(theta),cos(theta),0;0,0,1]; elseif abs(A(1,2)) > abs(A(1,3)) then if abs(A(2,3)) > abs(A(1,2) then theta=atan(2*A(2,3))/(A(2,2)-A(3,3))/2, P=[1,0,0;0,cos(theta),sin(theta);0,-sin(theta),cos(theta)] elseif abs(A(1,3))>abs(A(2,3)) then if abs(A(1,3)) > abs(A(1,2)) then theta=atan(2*A(1,3))/(A(1,1)-A(3,3))/2, P=[cos(theta),0,sin(theta);0,1,0;-sin(theta),0,cos(theta)]; else theta=atan(2*A(1,2)/(A(1,1)-A(2,2)))/2, P=[1,0,0;0,cos(theta),sin(theta);0,-sin(theta),cos(theta)]; end Pinf=P*Pinf A=P*A*P' ,end

  • f272
  • ベストアンサー率46% (8469/18132)
回答No.1

ヤコビ法なら非対角要素で絶対値最大のものを求めるのだが,そうなっていない。 3*3行列の計算をしたいはずだが,Pは2*2行列になっている。 そのうえthetaの計算がヤコビ法に従っていない。 Pinfの更新の計算もヤコビ法に従っていない。 もうどうしようもないくらいおかしなことばかりです。

teltel-bouzu
質問者

お礼

ご指摘、ありがとうございます。 指摘を参考にもう一度考え直してみます。

関連するQ&A