連立方程式の解法に用いるピボット選択のアルゴリズム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Matrix

連立方程式の解法に用いるピボット選択のアルゴリズム

#1

投稿記事 by Matrix » 10年前

コード:

//TODO:ピボット選択が間違っている
/*	部分ピボット選択
	n : 未知数の数
	t : ピボット行
	s : 列
	a : 拡大係数行列
*/
void pivoting(int n,int s,int t,double a[][10]){
	printf("pivoting関数内 :: \n");
	print_matrix(n,n+1,a);
	int i,j,max_ele = a[t][s],ele;
	for(i = 1;i < n;i++){
		ele = fabs(a[i][s]);
		if(ele > max_ele && i != t){
			//最大値がピボットよりも大きいのを見つけた
			//行の交換操作
			max_ele = ele;
			for(j = 0;j < n+1;j++){
				swap(&(a[t][j]),&(a[i][j]));
			}
		}
	}
	printf("pivoting関数内 :: \n");
	print_matrix(n,n+1,a);	
}
コメントにもありますがこのピボット選択のアルゴリズムが間違っているようです。
雰囲気でもいいのでご助言お願い致します。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 連立方程式の解法に用いるピボット選択のアルゴリズム

#2

投稿記事 by usao » 10年前

よくわからないけど,
> for(i = 1;i < n;i++)
この範囲って合ってます?

can110
記事: 27
登録日時: 10年前

Re: 連立方程式の解法に用いるピボット選択のアルゴリズム

#3

投稿記事 by can110 » 10年前

max_eleとeleはintではなくdoubleにすべきです。
intに代入すると、丸めのため正しく最大値が判定できません。

閉鎖

“C言語何でも質問掲示板” へ戻る