ページ 11

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

Posted: 2015年4月28日(火) 14:14
by Matrix

コード:

//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);	
}
コメントにもありますがこのピボット選択のアルゴリズムが間違っているようです。
雰囲気でもいいのでご助言お願い致します。

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

Posted: 2015年4月28日(火) 14:37
by usao
よくわからないけど,
> for(i = 1;i < n;i++)
この範囲って合ってます?

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

Posted: 2015年4月28日(火) 18:03
by can110
max_eleとeleはintではなくdoubleにすべきです。
intに代入すると、丸めのため正しく最大値が判定できません。