- ベストアンサー
行列計算でできること
- 行列計算とは、MatLabを使って行われる計算方法の一つであり、多種多様なことが可能です。
- MatLabの行列計算は基本的な演算から応用的な処理まで幅広く対応しており、研究分野でも活用されています。
- 行列計算を活用することで、データ解析や画像処理、シミュレーションなど様々な分野で高度な計算が行えます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
まずはご質問に対する答から。 有限次元のベクトルaとベクトルbの内積 Σa[i]b[i] を計算する関数であって、ただしa, bの各成分が関数を含む式であるようなものも許す、という関数は、「万能チューリングマシンの実装の一つ」であることが知られており、GPS (General Problem Solver)と呼ばれます(なお、初期の人工知能プログラムに同名のものがありますが、全く無関係)。ここで「万能チューリングマシンの実装の一つ」とは、すなわち、GPSに適切なベクトルa,bを与えることによって、あらゆる計算が可能だということ。そして、「あらゆる計算」というのは、「どんな計算メカニズムを使ってもいいからトニカク有限のステップでできるような、答が一つに決まる計算」ならどれでも、ってことです。要するに、ベクトルa, bがプログラムとデータ、内積の計算がプロセッサになってる訳です(が、その詳細を理解するには、計算の理論について沢山勉強しないとね)。 次に、関数を成分としない、データだけの行列の話。 行列演算だけであらゆることを効率よくやろう、ということを目的とした行列演算セットとしては、APL(a programming language)という名前のシステムが、大昔(1970年代後半)にIBMによって(PL/Iの次を担う言語として満を持して)販売された(が商業的には完全に失敗した)のが、多分、最初じゃないかなあ。これは計算機の構造のひとつ「ベクトル計算アーキテクチャ」を意識したものだと思います。APLの処理系もまた万能チューリングマシンの実装の一つで、プログラムは文字列で書いた式として与え、データは数値や文字列だけを成分とする行列です。プログラムには「普通とは違う文字ヘッド"MATH"を装着したタイプライタを使い、一度打った文字の上にバックスペースで戻って別の文字を重ね打ちする」というやりかたで作る演算記号が頻出するという、ヘンな所に凝った言語なんですが、それはさておき。 行列演算と言っても、おなじみのものばかりとは限りません。 APLで基本になるのも内積演算ですが、それを一般化したものが使える。つまり内積が「成分ごとに掛けたものを全部足す」であるのに対して、「掛け」と「足す」の部分を別の演算に置き換えることができる。 もう一つ重要なのは、ブール値(真≠0か偽=0)を成分とするベクトルbと、データのベクトルdから、「dをbで圧縮したものc」を作る演算(すなわち、成分b[i]が真であるようなiについてだけd[i]を並べて作ったベクトルc)と、「cをbで展開したものd」(すなわち、成分b[i]が真であるようなiについてだけd[i]にベクトルcの成分を順に割当て、他のdの成分は0にしたもの)を作る演算です。これらを使うと、条件分岐(Cのif文に相当)が記述できる。 ただし、ループを記述するには「→n」で「n行目に戻れ」を表すというとんでもなくヤバンな手段を使うんですが。 このような行列演算を組み合わせることで、大抵のデータ処理プログラムが1行で書けちゃうというのがAPLの特徴で、したがってAPLのプログラムは短いけれども何をやってるのか読み解くのは大変である。
その他の回答 (5)
- stomachman
- ベストアンサー率57% (1014/1775)
いささかユニークなシステムをご紹介。 mc (matrix calculator)というプログラムで、インタラクティブな操作もできるし、プログラミングもできる。これは秋田脳研(秋田県立脳血管研究センター)の西村弘美氏が開発して無償頒布したもので、元々はMacで医療画像の画像処理をやるためのアプリケーションです。画像を画素の配列として扱うわけで、行列の計算や画像処理に関わる膨大な数値計算ライブラリはもちろんのこと、思いつくものは何でも追加しちゃいました的な構造です。ただし、データの入出力は文字列で行う。医療画像は機器メーカーごとにデータのフォーマットが不統一であった時代が長く、何かやろうとするたびに互換性が問題になってましたんで、もう全部数字にしちゃえ、というラジカルな発想。結局mcはナント、CalendarMemoという「メモを書くためのアプリケーション」に統合されたようです。 ( http://mcalc.zapto.org/mcalcHome/index.html ) もう、ほとんど個人的趣味でやってるんでしょうね。
お礼
へぇ~!! 教えて頂けなかったら、 出会えてなかった… と、思います。 質問してよかったです。 ありがとうございます。
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
N階の線形微分方程式とか、ラプラス変換とか 簡単に解けちゃいます。職業柄あまり使いませんが たまに楽しんでます。 MatLabは高価なので、個人でやるなら、互換性の高いフリーの Scilab がお勧めです。
お礼
SciLab入れました!! Mat@SciLabも入れました!! 本も何冊か買いました ありがとうございます。
個人的にはたいした計算しか使わないので、不自由したことはありません。「Matlabは是か非か」 http://ie.u-ryukyu.ac.jp/funaki/2012/06/05/matlab%E3%81%AF%E6%98%AF%E3%81%8B%E9%9D%9E%E3%81%8B/ には、遅いので大規模な実験はできない旨書かれています。 あなたがどのように使われるか判りませんが、余程のことが無い限り、ご心配無用でしょう。
お礼
有り難うございます。 私は Excelの配列数式やVBAを 多くプログラミングしていたのですが、 此等の、 「マトリクス上に配された ワークシート上のデータに関数を施し 結果を得る」 と、いうスタンスにMatlabが近しく感じ 取っつきや易く思えました。 加えて MatLaの方が簡単そうで、 しかも動作も早そうだったので 期待していたのです。 が、それでも 僕なんかの想定を 上回る規模の計算では 速度的に物足りないのですね、 勉強になりました。 GPUのテスラコア上 等で稼働できたら 話は変るのでしょうかね?
- foomufoomu
- ベストアンサー率36% (1018/2761)
仕事で、けっこう行列計算を使います。 おもな使い道は、 つるかめ算的な・・・行列演算の一つの目的は、大きな連立1次方程式を効率よく作ることです。行列の結合、分解を使います。しかし、これは、ほとんどの場合、専門書に乗っている式をそのまま使うだけです。自分で行列の式を考えるのは、たいていは次の場合。 立体座標計算、力などのベクトル計算・・・おもに3×3、4×4の行列を使うのですが。行列演算の良いところは、2次元で考えた式が、たいていそのまま3次元、4次元、・・・でも通用することです。なかでも、つぎは絶対必須。 ・直行行列の例としてあげられることの多い、座標の回転変換の行列。 ・交差角度を求める内積の計算。 ・面の法線を求める外積の計算。 工学系の仕事をするなら、算術を重要な順にあげると 四則演算→微積分→行列計算 ここまでは、どの分野でも必須といえます。あと、分野によっては、複素数、極限、確率、などが続くのですが。。。
お礼
有り難うございます。 Matlabでは ある機構の 設定最適値を、総当たりの形で求めるのに 使ってみたく、ワクワクしています。 三角関数辺りまでの、初等微積分までは 何とか解っていたのですが、 行列の辺りで 学生時代に 遅れを感じ始めました。 初等の部分では、何となくなら 何をしているか 理解できているのですが、 深淵なる部位となると やはりさっぱりで… 汗、 お手数を おかけします。
- stomachman
- ベストアンサー率57% (1014/1775)
ちょっと調べましたんでANo.1に追記。 APLは元々はハーバード大で考案されたもので、1962年に出版(Kenneth E. Iverson, A Programming Language)。「数学記号の統一と、計算手順の明確化」が目的だそうで、高校数学の教育にも用いられたとか(すると、生徒たちはAPL特有の[右から左へ計算する]という計算順序に従って、"-2+3×2+1" は "-11" だと教えられたことになる…可哀想に)。
お礼
>ちはAPL特有の[右から左へ計算する]という計算順序に従… ひょっとしてスタック演算式(?)なのでしょうか? 手抜きも甚だしいですよね? まあそういう時代だったのでしょうかね…
お礼
有り難うございます。 万能チューリングマシンな訳ですね、 >もう一つ重要なのは、ブール値(真≠0か偽=0)を成… ここら辺はExcelの配列数式の基本なので 多用してて、… それでも今でもワクワクします。