「最小二乗法」の編集履歴(バックアップ)一覧はこちら

最小二乗法」(2007/01/23 (火) 11:58:29) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

-課題1 課題2、3は値を変化 #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 6 //データ数 #define M 4 //次数 #define EPS 10e-5 double a[M+1][M+2]; int jordan(void); double expor(double x , double n){ int i; double bar = 1.0; for( i = 0 ; i < n ; i ++ ) bar *= x; return bar; } void main(){ double x[N] = {0.0,1.0,2.0,3.0,3.1,5.0}; double y[N] = {0.0,1.1,2.5,4.0,4.1,5.0}; int i , j , k; for( i = 0 ; i < M+1 ; i++ ) for( j = 0 ; j < M+2 ; j++ ) a[i][j] = 0.0; for( i = 0 ; i <= M ; i++ ){ for( j = 0 ; j <= M ; j++ ){ for( k = 0 ; k < N ; k++ ) a[i][j] += expor( x[k] , i + j); // printf("%10.2lf ",a[i][j]); } // printf("\n"); } for( j = 0 ; j <= M ; j++ ) for(k = 0 ; k < N ; k++ ) a[j][M+1] += y[k] * expor(x[k] , j); if(jordan() == 1) return; for( i = 0 ; i <= M ; i++ ) printf("A%d=%7.3lf\n" , i , a[i][M+1]); return; } int jordan(){ double s, q , pivot , del; int i, j, k, l; for( i = 0 ; i < M+1 ; i++ ){ pivot = a[i][i]; if( fabs(pivot) < EPS ){ printf("ピボット数が許容誤差以下\n"); return 1; } for( j = i ; j < M+2 ; j++ ) a[i][j] = a[i][j]/pivot; for( k = 0 ; k < M+1 ; k++ ){ del = a[k][i]; for( j = i ; j < M+2 ; j++ ) if( k != i ) a[k][j] -= del*a[i][j]; } } return 0; }

表示オプション

横に並べて表示:
変化行の前後のみ表示: