クラメールの公式のプログラミング

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

クラメールの公式のプログラミング

#1

投稿記事 by しょしょしょしんしゃ » 16年前

Cプログラム 二乗法を実行

えーと あるプログラムで悩んでいます。
問題文は以下の通りです。

xy平面に分布する次の10個の点について、
直線 y=ax+b で近似する最小二乗法のCプログラムを書き、
実行してaとbを求めよ。
例えば、
(x,y)=(2,4),(3,6),(4,9),(5,9),(6,13),(7,14),(8,15),(9,20),(10,19),(11,21)
といった感じです。
友人と考えたのですが、なかなかできませんでした。
エラーが発生して、どこが間違っているのですか?
以下がプログラムです。もしかすると、エラーが出ない場合もあります。
どうかお願いします。

#include <stdio.h>

int main(){
  int     x[10]={2,3,4,5,6,7,8,9,10,11};
  int     y[10]={4,6,9,9,13,14,15,20,19,21};
  int     xny[3];     //[x,1,y]_テーブル
  int     xy[2][3];   //正規方程式
  double  del;         //_係数の行列式
  double  a,b;        //回帰式の係数
  int     i,j,k,n=10;

  //_連立方程式をクリヤー
  for(i=0;i<2;i++) {
  for(j=0;j<2;j++) {
    xy[j]=0;
   }
  }
  //_連立方程式構築
  for(k=0;k<n;k++) {
  //_[x,1,y]_テーブル準備
    xny[0]=x[k];
    xny[1]= 1;
    xny[2]= y[k];
  //_連立方程式に積和累計
    for(i=0;i<2;i++){
		 for(j=0;j<3;j++){
      xy[j]+=xny*xny[j];
      }
    }
  }
  //_連立方程式を解く(クラーメルの公式)
  del=xy[0][0]*xy[1][1]-xy[1][0]*xy[0][1];
  a=(xy[0][2]*xy[1][1]-xy[1][2]*xy[0][1])/del;
  b=(xy[0][0]*xy[1][2]-xy[1][0]*xy[0][2])/del;
  printf("a=%f,b=%f\n",a,b);
  return 0;
}

box

Re:クラメールの公式のプログラミング

#2

投稿記事 by box » 16年前

>   //_連立方程式をクリヤー
>   for(i=0;i<2;i++) {
>   for(j=0;j<2;j++) {
>     xy[j]=0;

jは0,1だけでいいですか?

SCI

Re:クラメールの公式のプログラミング

#3

投稿記事 by SCI » 16年前

xy[2]が初期化されていません。

閉鎖

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