ガウスの消去法


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

358 :デフォルトの名無しさん :2005/11/06(日) 22:47:07
2w+3x+4y-5z=0
5w+2x-2y+z=7
3w+x-y+z=6
7w+2x+y-3z=2
(注)ピボット選択必須
この連立一次方程式をガウスの消去法で解くプログラムを完成させよ
お願いします
362 :デフォルトの名無しさん :2005/11/06(日) 23:05:11
「ガウスの消去法」でyahooで検索したら、上から4番目に詳しい説明が出た。

n = 4;
double a[4][4],b[4];
a[0][0]=... みたいにして書けば動くはず。

というか既出の問題に関してはまとめサイト欲しいな...

363 :362:2005/11/06(日) 23:17:41
ピボットなしだよ。。。ごめんなさい。
364 :デフォルトの名無しさん :2005/11/06(日) 23:21:00
http://www.fuka.info.waseda.ac.jp/~kozo/suuchi/simple_equation/simple_equation_2.html
370 :(1/3):2005/11/07(月) 00:07:41
>>358
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

swap( double *x, double *y ){
double temp;
temp = *x;
*x = *y;
*y = temp;
}
main(){
int i, j, k, n=4, pibot;
double max;
double a[4][4]={{2,3,4,-5},{5,2,-2,1},{3,1,-1,1},{7,2,1,-3}};
double b[4]={0,7,6,2};
int z;
for(z=0;z<4;z++)
printf("(%5.2f)A+(%5.2f)B+(%5.2f)C+(%5.2f)D=%5.2f\n"
,a[z][0],a[z][1],a[z][2],a[z][3],b[z]);
371 :(2/3):2005/11/07(月) 00:08:24
for( i = 0; i < n; i++ ){
/* ピボット選択 */
max = 0; pibot = i;
for( j=i; j<n; j++ ){
if( fabs( a[j][i] ) > max ){
max = fabs( a[j][i] );
pibot = j;
}
}
if( pibot != i ) {
for( j = 0; j < n; j++ ){
swap( &a[i][j], &a[pibot][j] );
}
swap( &b[i], &b[pibot] );
}

/* 前進消去 */
for( j = i+1; j < n; j++ ){
a[i][j] /= a[i][i];
}
b[i] /= a[i][i];
for( k = i+1; k < n; k++ ){
for( j = i+1; j < n; j++ ){
a[k][j] -= a[i][j] * a[k][i];
}
b[k] -= b[i] * a[k][i];
}
372 :(3/3):2005/11/07(月) 00:09:02
/* 後退代入 */
for( i = n-1; i >= 0; i-- ){
for( j = i+1; j < n; j++ ){
b[i] -= a[i][j] * b[j];
}
}

/* 出力 */
printf( "解A=%5.2f\n", b[0] );
printf( "解B=%5.2f\n", b[1] );
printf( "解C=%5.2f\n", b[2] );
printf( "解D=%5.2f\n", b[3] );

}

あと、氏ねカス

373 :カス:2005/11/07(月) 00:29:17
>>372
ありがとっす
|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|