• 締切済み

高次元な方程式

100元ほど高次元な連立一時方程式をガウス法を用いて解くことは可能なんでしょうか?

みんなの回答

  • keyguy
  • ベストアンサー率28% (135/469)
回答No.7

久しぶりに見てみるとLU分解に対する批判が載っていました 行列を解く場合に今のパソコンでのボトルネックは行列を格納する容量です 従って計算時間は問題になりりません 100や1000などあっという間です むしろ収束型のほうが誤差が大きく誤差を小さくしようとすると計算時間がかかります 非対称ならばLU分解を もし対称ならば改訂コレスキー法を使いましょう 相当早いですぞ 昔変形コレスキー法を大幅に改良した未公開の新改訂コレスキー法によって(従来の3倍以上)8192×8198の対称行列係数連立1次方程式を486(なんと64MHz)のPCで解いた事があります

  • hpsk
  • ベストアンサー率40% (48/119)
回答No.6

できるといえばできますが、ガウス消去法やLU分解は、高次元だと時間がかかりすぎるため(100元くらいだったら大丈夫かもしれませんが)、ヤコビ法、ガウス・ザイデル法、SOR法といった反復法が使われることが多いです。 共役勾配法という、さらに凝った方法もあります。

  • ryuta_mo
  • ベストアンサー率30% (109/354)
回答No.5
参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=898650
tyuukichi
質問者

お礼

かなり詳しい内容が発見できました。 ありがとうございます。

  • keyguy
  • ベストアンサー率28% (135/469)
回答No.4

Ax=b を解くときに最も人気の方法はLU分解による方法でしょう A=LU とAを下三角行列と上三角行列に分解して解きます 直説法ですから誤差は少なくなります

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>ガウス法は知ってました。。その他に方法あるのかな~と思って。。 ん~と、意味が良くわかりません。 質問文と矛盾します。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

とりあえず、サンプルを作ってみました。 2元一次方程式の場合のヤツだけど、Nを大きくすればいいだけですよね。 参考にしてみて下さい。 ピボットを選ぶ方法(ガウス法)も、できるけど、それは、考えてみて下さい。 ていうか、 C言語を知っていて、 ガウス法を知っているなら、 なにも思いつかないってことはないよね?? /* ガウス・ジョルダン法による連立一次方程式を解く */ #include <stdio.h> /* 3x+2y=5 x- y=0 */ #define N 2 double X[N][N+1]={ {3,2,5}, {1,-1,0}}; void GaussJordan(void){ int i,j,k; for(k=0;k<N;k++){ for(j=k+1;j<N+1;j++) X[k][j]/=X[k][k]; for(i=0;i<N;i++) if(i!=k) for(j=k+1;j<N+1;j++) X[i][j]-=X[i][k]*X[k][j]; } } void main(void){ int i,j; for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("%gx%d ",X[i][j],j+1); printf("= %f\n",X[i][j]); } GaussJordan(); for(i=0;i<N;i++) printf("x%d=%g\n",i+1,X[i][N]); }

tyuukichi
質問者

お礼

ありがとうございます。 ガウス法は知ってました。。その他に方法あるのかな~と思って。。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

可能だと思いますけど、 解があるかどうは、別。

tyuukichi
質問者

補足

お返事ありがとうございます。 どのようにプログラムを作ればいいのか考え方だけでも何かないでしょうか。 すいません、何も思いつかないもので…。

関連するQ&A