• ベストアンサー

det(zI-A)=0をMATLAB以外で解く方法

MATLABを使わずに|zI-A|=0を求めるプログラムを組みたいのですが可能でしょうか?できればC言語系でお願いします。ちなみにAは7×7の行列でIはその単位行列、zは未定定数です。定数だけのものなら書けるのですが。可能であるならサンプルないし考え方も教えてくださると助かります。

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

  • ベストアンサー
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.1

Aの要素が数値(実数)で、これをzについて数値的に解く、 というのなら比較的楽(?)にできるかと思います。 考え方としては |zI-A|=0を,zの多項式=0,の形に変形し、 多項式の解を求めるプログラムを作ることになるかと思います。 解を求める方法としては、 1. zの多項式=0を満たす二次の式(z^2+qz+r=0)の係数p,qを繰り返し計算で求める。 2. 二次の式からzが二つ計算できる。 3. 元の多項式をz^2+qz+rで割れば、次数が2減った多項式になる。 1.に戻る という手順を繰り返せば、全ての解を求めることができるかと思います。

aaatex
質問者

お礼

ありがとうございます。頑張ってやってみます。休日を挟んでも分からなかったらまたヒントを下さい。

その他の回答 (1)

  • qqtester
  • ベストアンサー率66% (10/15)
回答No.2

たぶん、固有値の計算ですね。MATLABはべんりですよね。 7次の固有値計算のプログラムを自分で作ると結構大変だとおもいます。 行列Aの性質にもよるのでしょうが。 (私には大変でした。) なので、何かのライブラリ使った方が良いのではないでしょうか。 フリーのものならlapackとかGNU GSLとかliboctaveなどがあります。 もちろん商用のライブラリもあります。 例えば、GNU GSLのインストールの仕方が以下のURLにあります。  http://www.tmps.org/index.php?GNU%20Scientific%20Library%20for%20Windows

関連するQ&A

  • MATLABとC++

    こんにちわ。資料を参考にしつつMATLABからC言語へ変換する作業をしているのですが、どちらに関しても初心者レベルで遅々としてはかどりません…。 分からないことの一つとして、MATLABは行列計算がしやすいがC言語はそうではないということからなのですが、MATLABで A = zeros(10,20,30) というのは次元10×20×30をもつゼロ行列 ということは分かったのですが、これは 数学で習う行列、2×2 や3×3など二次元な数字の並びを、三次元にまで拡張した表し方ということでしょうか?? また、上の式をC言語で書き表すとすると どのように書き表せるのでしょうか?どなたか分かるかた 教えていただければと思います。

  • C言語→MATLABへの変換で、困っています。

    学生研究でMATLABを使用しています。 光学測定系で画像を取り込み、それを解析する実験を行っています。 MATLABはプログラム内の値の変更や処理の追加できることから 大変助かっています。 そこで、もともとはC言語でやっていた3種類の処理を 一つのMファイルで行いたいと思い。 只今、C→MATLAB変換するプログラムの書き直しを行っています。 そのうち2種のプログラムは行列の計算がメインだったため何とか Mファイルに書き直すことができたのですが、 最後のひとつが難しい関数らしきものが多く、 MATLABに書き直すことができるプログラムなのかもわからない状態です。 そこで、 ・C→MATLAB変換可能なプログラムか? ・書き直すにあたってどこを部分を直せばよいのか? をアドバイスいただけないでしょうか? ↓MATLAB化したいC言語ファイル http://karispace.web.fc2.com/cmat2.c 一枚のbmp画像から4枚のdatデータを出力するプログラムです。 C言語とMATLABの三ヶ月前に勉強して、使用しており、基礎がわかる程度です。 よろしくお願いします。

  • matlabにおいて、

    matlabにおいて、 [(-Q*A) (Q*A) (-Q*A^2) (Q*A^2) ....(Q*A^29)]のような行列を、 for i = 1:29 のみたいな感じのもので表現できますでしょうか。 それかほかにもっといい表現の仕方はありますか? ちなみにQもAも2行2列の行列です。

  • MATLABプログラミングをCのプログラミングに変換

    MATLABでよくやる以下のプログラミング方法を効率よくCでプログラムするにはどうすべきですか? a=[]; for i = 1:100 a_k = [1 2 3 4];<<-a_kは1行4列の行列です a = [a a_k];<<-特にこの部分 end よろしくお願いします。

  • MATLABでのプログラミングについて

    はじめまして。 当方MATLAB初心者です。プログラムをどう組み込めばよいのかよく分かりません。 MATLABでPSO(粒子群最適化)のアルゴリズムを取り入れてシミュレーションを行ないたいと思っているのですが、 m-fileに直接書き込むにしても条件分岐などがあるので、どう書いたらいいのかよく分かりません。 C言語などで別に書いたプログラムを組み込んだりできるのでしょうか? 大学では制御の分野を学んでいるのですがMATLABにはほとんど触れた事がないです、質問もわかりにくいかも知れませんが、ご存知の方がいらっしゃるなら教えていただきたいです。

  • MATLABプログラミングで質問

    MATLABでプログラムを作っているのですが、 C言語のプログラムのように for文のなかで*=や+=のような処理をしたいのですがやり方が分かりません。どなたか教えてください。

  • 留数が射影行列となる事の証明が

    宜しくお願い致します。 A∈C^{n×n},Iはn次単位行列,λjはAの固有値,j=1,2…,k≦nでγ_jはλ_jのみを内部含むJordan閉曲線とする時, λ_jは(zI-A)^-1の極となっているので Res_{z=λ_j}[(zI-A)^-1]=1/(2πi)∮_{γ_j}(zI-A)^-1dzが成り立ちますよね。 この時,更に, P_j=1/(2πi)∮_{γ_j}(zI-A)^-1dzも成り立つそうなのですがどうすれば示せますでしょうか? (但し,Σ_{j=1..k}P_j=I, Σ_{j=1..k}λ_jP_j=A)

  • MATLABにおける行の挿入方法

    こんにちは,現在データ整理のためにMATLABを用いて以下のようなプログラムを構築しています 1.ファイルを読み,その値を100行7列の行列Aとする 2.Aの10行目と11行目の間に1行7列の行列B1を挿入する (イメージ的にはEXCELの行の挿入です) 3.同様に20行目と21行目の間に1行7列の行列B2を挿入する 4.以降10行ごとに繰り返す となります.ここで2の処理にあたる「行列の特定の列の間に別の行列を挿入する」方法がわかりません いろいろ調べたのですが、このような方法はどこにもありませんでした MATLABに詳しい方,教えていただけないでしょうか?

  • matlabについての質問です。

    matlabについての質問です。matlab初心者です。 3つ以上のデータ列について相関係数を求めるプログラムを教えてください。 イメージとしては データ列a b cについて a b c a 1 b 0.2 1 c 0.8 0.4 1 このような結果が出るようなプログラムを書きたいです。 わかるかた、回答宜しくお願いします。

  • MATLABのfor文の使い方について

    MATLAB(というかプログラム)初心者です 下記を教えてください よろしくお願いいたします 「つくりたいプログラム」 y1=[A B C] y2=[D E F] ・ ・ ・ y200=[AA BB CC] 上記のような200個くらいある行列に同じ操作をしたいです そこでいちばん簡単な構造を考えました ////////////////////// y1=[A B C] y2=[D E F] for i=1:2 Yi=yi*5 end ///////////// 成功イメージは Y1=[5A 5B 5C] Y2=[5D 5E 5F] となってほしいのですが回りません・・・ yiの定義のしかたがわからず困っております 初歩的な質問かもしれませんが教えてくださいよろしくお願いいたします

専門家に質問してみよう