【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.19506

n元連立一次方程式
投稿者---柴田 義文(2005/01/26 14:42:44)


解が不定である場合はそのメッセージを出力するというのがどうしたらよいか分かりません。とりあえずここまではいったんですが。どうか教えて下さい。お願いします。
#include<stdio.h>

main()
{
float a[20][21];
float r;
int n, i, j, m, k;

printf("このプログラムは1次連立方程式の解を求めるものです.\n");
printf("nの後に何元かを入力.続けて各々の式の係数と解を,順番をそろえて入力して下さい.\n n=");
scanf("%d\n", &n);

for(i = 0 ; i < n ; ++i)
for(j = 0 ; j < n + 1 ; ++j)
scanf("%f", &a[i][j]);

showmtx(a, n);

/*--------------------pivot操作---------------------------------------*/
k=m=0;
for(i=m+1;i<=n-1;++i)
if(labs(a[k][m])<labs(a[i][m]))
k=i;

if(k!=m)
for(j=m;j<n+1;j++){
r=a[m][j];
a[m][j]=a[k][j];
a[k][j]=r;
}

/*--------------------下三角を0に---------------------------------------*/

for( m = 0 ; m <= n - 2 ; ++m){
for( i = m + 1 ; i <= n - 1 ; ++i) {
r = a[i][m] / a[m][m];
for(j = m ; j <= n ; ++j ) a[i][j] -= r * a[m][j];
}
}

showmtx(a, n);

for( j = n - 1 ; j >= 0 ; --j){
a[j][n] /= a[j][j]; a[j][j] = 1;
for( i = 0; i < j ; ++i){
a[i][n] -= a[i][j] * a[j][n]; a[i][j] = 0;
}
}

showmtx(a, n);
}

showmtx(a,n)
float a[20][21];
int n;
{
int i, j;

for( i = 0 ; i < n ; ++i ){
for(j = 0 ; j <= n ; ++j )
printf("%6.3f ",a[i][j]);
printf("\n");
}
printf("\n");

printf("解は最右列に表示された数字です\n");

}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:n元連立一次方程式 19598 Craft 2005/01/27 20:56:53


No.19598

Re:n元連立一次方程式
投稿者---Craft(2005/01/27 20:56:53)


>解が不定である場合はそのメッセージを出力するというのがどうしたらよいか分かりません。とりあえずここまではいったんですが。どうか教えて下さい。お願いします。

どなたもコメントされていないようなので書きます。

記入された質問ですが、「n次元連立方程式の解が不定であることをどう求めるのかがわからない」ということであれば、C言語とは別の話ですので、数学の本などを見てどう求めるかを調べてください。
「解が求められるケースについては結果を出せるけれども、求められないケースについてきちんと動いてくれない」ということであれば、「ある部分がこのように動くことを期待してプログラムしたけれども、期待した結果が得られていない」という場所が必ずあるはずなので、どこがおかしいのか絞り込んで質問しましょう。

アルゴリズムなので、実現方法を紙に手順としてまとめることができれば、プログラム化することはできるはずです。

あと、「うまくいきません」でソースを掲示されても、質問を受けた側にはどのようにデータを持っているのかもわかりませんし、作られている関数でなにをしているのかもわからないので、一緒に示せる情報はできるだけ出していただいたほうが回答をいただきやすいです。
たとえば、長いソースプログラムで、「a といれたら b とでないのだけど、どこが悪いのですか?」では何も情報がないと答えるのはほとんど無理です。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧