困ってます
Posted: 2009年12月06日(日) 02:52
C++の宿題で、連立一次方程式の解を解く、というプログラムを作っています。行列にみたてているのですが、割り算ができるかどうかのチェックの入れ方がわかりません。とりあえずプログラムは以下の通りです。ちなみに、nは次数、c[/url][/url]は係数行列、b[/url]は定数ベクトル、x[/url]は回のベクトルです。
このプログラムの9行目でc[j][j]が0になった場合は、c[j]が0でないようなi行(j<i<=n)を見つけて、j行とi行を入れ替える、という操作を入れたいのですが、どのようにすればよいのでしょうか??初心者でとても申し訳ないのですが、コメントをお願いします。
//連立方程式を解く void linearEquations (int n,double x[/url],double c[/url][10],double b[/url]){ int k,j,i; for(j=1;j<=n;j++){ c[j][n+1]=b[j]; } //前進計算(上三角化、対角要素は1) for(j=1;j<=n;j++){ for(k=j+1;k<=n+1;k++){ c[j][k]/=c[j][j]; } c[j][j]=1; for(i=j+1;i<=n;i++){ for(k=j+1;k<=n+1;k++){ c[k]-=c[j]*c[j][k]; } c[j]=0; } } //後退計算(係数行列を単位行列化) for(j=n;j>0;j--){ for(i=1;i<j;i++){ for(k=j+1;k<=n+1;k++){ c[k]-=c[j]*c[j][k]; } c[j]=0; } } for(j=1;j<=n;j++){ x[j]=c[j][n+1]; } }
このプログラムの9行目でc[j][j]が0になった場合は、c[j]が0でないようなi行(j<i<=n)を見つけて、j行とi行を入れ替える、という操作を入れたいのですが、どのようにすればよいのでしょうか??初心者でとても申し訳ないのですが、コメントをお願いします。