逆行列の求め方とエラー

このQ&Aのポイント
  • 行列の逆行列を求める際にエラーが出る場合があります。
  • 行列の加減乗、べき乗、成分の加減乗などは可能ですが、invert関数、(-1)乗の計算ができません。
  • Maxima-5.17.1でwxMaxima0.8.0を使用しています。
回答を見る
  • ベストアンサー

逆行列(Maxima)

行列の逆行列を求めようとすると、エラーが出ます。 (%i1) A:matrix([1,2,3],[4,5,6],[7,8,9]); invert(A); (%o1) matrix([1,2,3],[4,5,6],[7,8,9]) Division by 0 -- an error. To debug this try debugmode(true); (%i2) A^^(-1); Singular -- an error. To debug this try debugmode(true); 行列の加減乗、べき乗、成分の加減乗、べき乗などはできるのに、invert函数、(-1)乗の計算ができません。 Maxima-5.17.1でwxMaxima0.8.0です。

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

  • ベストアンサー
  • P-mann
  • ベストアンサー率62% (56/89)
回答No.1

そもそも数学的な基本事項ですが、例に挙げられている行列は 正則ではありません。 ですので、逆行列は存在しません。 determinant(A)が0となるので Division by 0となり エラーが出ます。

bgm38489
質問者

お礼

数学的に見て、おかしいのですね。テキスト(はじめてのMaxima)に乗ってたとおりの行列の逆行列を計算すると、うまくいきました。 数学は専門でないもので、またこれからも、こんな馬鹿馬鹿しい質問をすると思いますが、乞許!

関連するQ&A

  • maximaで数値積分

    maximaで数値積分をしなくてはならず、「ニュートン=コートの8次多項式による求積法」を行おうと思い、読み込もうとしたところ、 (%i1)load("qq"); (%o1)Could not find `qq' using paths in file_search_maxima,file_search_lisp. -- an error. To debug this try: debugmode(true); とエラーが表示されてしまいました。 本やネットで調べましたが、よくわかりません。どうしてこのようになってしまったのでしょうか?また、解決法はありますか?教えていただきたくよろしくお願い致します。

  • SCILABでの行列計算のエラー文が理解できない。

    SCILABという計算ソフトを使用して次のような計算を行っていました、 A=[1 2 3; 4 5 6; 7 8 8.999999999999] B=[-1 0 1]^T (^Tは転置行列の意) Aの逆行列とBの積A^(-1)*B=Xとして、det(X)を計算したところ、次のようなエラーが出てきました。 ↓ matrix is close to singular or badly scaled. rcond=7.7099D-17 このエラー文の意味が不明です。 直訳すると matrix is (行列は) close to (ほぼ、ほとんど) singular (特異である) or (もしくは) badly scaled.(好ましくないスケール) となりますが、このエラーはつまりどういう意味なのでしょうか。 直訳など、何が問題なのかが知りたいです。 どなたかわかる方、ご教示のほどお願いいたします。

  • maximaの積分に関する質問です

    maximaで積分を行っているのですが、 integrate(x,x,sqrt(y),y);と入力してその計算結果が返ってくるはずなのですが、 defint: lower limit of integration must be real; found sqrt(y) -- an error. To debug this try: debugmode(true); とエラー表示がされてこれ以上計算が進みません。どのように対処すれば うまくいくのでしょうか。

  • Maximaでダブルクリックでwxmファイルが開けない

    Win.XP.SP3でwxMaxima 0.8.3a(Maxima 5.19.1)でプログラムを作りセーブすると、ちゃんと*.wxmフィルができてます。ところが次回にそのファイルをダブルクリックで開こうとすると、Usage:wxMaxima[/f<str>][/o<str>]…Unexpected parameter…以下パス名と、エラーらしきメッセージが出ます。 ここでOKを押すと初期画面が出、そこでメニューのfileからopenすると目的のファイルが表示されますが、このメッセージはエラーなのかどうか、ファイルのダブルクリックでは開けない仕様なのか、どなたか教えてください。

  • Maximaのフーリエ変換について

    Maximaでフーリエ変換するために、 load(fft); で読み込んでから、 fft(exp(-t^2/18),t,w); を実行したところ、 Maxima encountered a Lisp error: Error in $FFT [or a callee]: $FFT [or a callee] requires less than three arguments. Automatically continuing. To reenable the Lisp debugger set *debugger-hook* to nil. というエラーが出てきて計算が出来ません。 どうしたら計算できるんでしょうか? わかる方教えてください。

  • 実数値行列関数とは一体なに?

    詳しい方よろしくお願い致します。 某書籍にreal valued matrix functionについて Let f be a differentiable real valued matrix function on M_n^{s,+}. Define the gradient of the function f, with respect to a matrix A=(a_ij)∈M_n^{s,+}, as ∂f/∂A:=(∂f(A)/∂a_ij). (但し,M_n^{s,+}はn×nのpositive definite symmetric matriciesの集合) と定義されてたのですがいまいちよく分かりせん。 M_n^{s,+}の元は実行列でfはM_n^{s,+}からRへの写像なのでしょうか? それともM_n^{s,+}からM_n^{s,+}への写像なのでしょうか? 写像fの定義域と値域が何なのかはっきりしません。 どうやらAは変数の役割をしているようなので Let f be a differentiable real valued matrix function on M_n^{s,+}. Define the gradient of the function f, with respect to a matrix X=(x_ij)∈M_n^{s,+}, as ∂f/∂X:=(∂f(X)/∂x_ij). と変数らしくXとx_ijで書き改めてみました。 それでもってX∈{(x_ij)∈M_n^{s,+};x_ijは実変数}なので gradient (∂f(X)/∂x_ij)は何を意味するかというと, もし,f(X)の値域がRなら行列(∂f(X)/∂x_ij)はn×n行列で f(X)の値域がM_n^{s,+}なら,行列(∂f(X)/∂x_ij)はn^2×n^2行列になるのでしょうか?

  • Rubyでの行列式の計算について

    Rubyでcsvファイルから行列の値を読み込んで、 行列式の乗算をしたいのですがエラーがでて困っています。 例えばA.csvがcsvファイルの形式で100行20列の行列でB.csvもcsvファイルの形式で20行3列の行列としたとき、 require 'matrix' require 'csv' ma = CSV.read(A) mb = CSV.read(B) mc = ma * mb print mc, "\n" と入力すると、":in `*': can't convert Array into Integer (TypeError)" というエラーが出てしまいます。 プログラミング初心者なので根本的なところが理解できていないかも知れませんが、解決法を教えていただければ助かります。 よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • Maximaでグラフを描くために

    http://www1.bbiq.jp/kougaku/maxima.htmlのサイトにしたがって、file:///C:/Documents%20and%20Settings/サムソン/Local%20Settings/Temporary%20Internet20Files/Content.IE5/2TC7QXU5/maxima_plot3d_graph%5B1%5D.png (z=√(x2+y2))のグラフを描こうとしたのですが、wxMaximaでplot3d(sqrt(x^2+y^2),[x,-100,100],[y,-100,100],[grid,20,20]);と入力すると ____ Maxima encountered a Lisp error: Error in PROGN [or a callee]: Cannot create the file C:/Documents and Settings/サム・ン/maxout.gnuplot.Automatically continuing.To reenable the Lisp debugger set *debugger-hook* to nil. ____ に出てきて、出力できませんでした。 ファイル名の途中にある「サム・ン」がいけないのかと思い、コマンドプロンプトをつたって「samson」に使用者名を変更して再度試してみたのですがやっぱりダメでした。 どなたかお教え下されば幸いです。

  • 行列の和、積、乗算について(C言語)

    まだC言語の勉強を始めて1か月の初心者なのですが、みなさんにお聞きしたいことがあります。 任意の行列に対して和、積、乗算の関数を作り出力するプログラムを 作りたいのですが、試しに和の関数を作ってビルトしてみたら、 31個もエラーが出て、困っています。 ↓参考書を見ながら、自分なりに考えたプログラムです。 #include <stdio.h> typedef struct matrix{ int m; int n; double data[100][100]; } MATRIX; int main(void) { MATRIX a; MATRIX b; a.m=2; a.n=3; a.data[100][100]={{1,2,1},{2,3,3}}; b.m=2; b.n=3; b.data[100][100]={{2,3,1},{1,2,1}}; kekka=add_mat(MATRIX a,MATRIX b); printf("和:%f,kekka.data); //行列和関数 MATRIX add_mat(MATRIX a,MATRIX b){ MATRIX sum; int i,j; sum.m=a.m; sum.n=a.n; sum.data[100][100]={{0,0,0}{0,0,0}}; for(i=0;i<sum.m;i++){ for(j=0;j<sum.n;j++){ sum.data=(a.data)+(b.data); return sum; } } } return 0; } おそらく相当ダメな感じなのでしょうが、エラー文を読んでも なかなか解決できません。 ちなみに、積の関数は mul_mat(MATRIX c,MATRIX a,MATRIX b){ int i,j,k; for(i = 0; i < a.m; i++){ for(j = 0; j < b.n; j++){ for(k = 0; k < a.n; k++){ C[i][j] = C[i][j] + A[i][k] * B[k][j]; } } } という風に考えました。みなさまのお力を借りたいです。 よろしくお願いします

  • 行列の和、積、乗算(C言語)

    まだC言語の勉強を始めて1か月の初心者なのですが、みなさんにお聞きしたいことがあります。 任意の行列に対して和、積、乗算の関数を作り出力するプログラムを 作りたいのですが、試しに和の関数を作ってビルトしてみたら、 31個もエラーが出て、困っています。 ↓参考書を見ながら、自分なりに考えたプログラムです。 #include <stdio.h> typedef struct matrix{ int m; int n; double data[100][100]; } MATRIX; int main(void) { MATRIX a; MATRIX b; a.m=2; a.n=3; a.data[100][100]={{1,2,1},{2,3,3}}; b.m=2; b.n=3; b.data[100][100]={{2,3,1},{1,2,1}}; kekka=add_mat(MATRIX a,MATRIX b); printf("和:%f,kekka.data); //行列和関数 MATRIX add_mat(MATRIX a,MATRIX b){ MATRIX sum; int i,j; sum.m=a.m; sum.n=a.n; sum.data[100][100]={{0,0,0}{0,0,0}}; for(i=0;i<sum.m;i++){ for(j=0;j<sum.n;j++){ sum.data=(a.data)+(b.data); return sum; } } } return 0; } おそらく相当ダメな感じなのでしょうが、エラー文を読んでも なかなか解決できません。 ちなみに、積の関数は mul_mat(MATRIX c,MATRIX a,MATRIX b){ int i,j,k; for(i = 0; i < a.m; i++){ for(j = 0; j < b.n; j++){ for(k = 0; k < a.n; k++){ C[i][j] = C[i][j] + A[i][k] * B[k][j]; } } } という風に考えました。みなさまのお力を借りたいです。 よろしくお願いします。

専門家に質問してみよう