0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

毎日C言語 11日目 ラグランジュ補間

Last updated at Posted at 2020-06-30

今日(2020/06/20)からアルゴリズムを勉強していこうと思う。選ばれたのはC言語です。理由は単純で今勉強中だから。メモ用として使っていくので詳しい解説はしない(というか知識がないからできない)。よく参考書にあるような数字の計算から始めるわけではないのでそこは理解していただきたい。では早速やっていこう。

環境構築に関しては以下の記事を参考にして構築した。(Windows)
※Macはわかりませんので各自で調べてください。
https://webkaru.net/clang/mingw-gcc-environments/

使用している書籍:C言語によるはじめてのアルゴリズム入門
著者:河西朝雄

#ラグランジュ補間
こちらを参考にした。

lagrange.c
#include <stdio.h>

// x[]:xの座標の配列,y[]:yの座標の配列,n:座標の数,t:座標の分割する範囲(main関数で使用)
double lagrange(double x[],double y[],int n,double t){
    
    int i,j;
    double s,p;
    s = 0.0; 

    // 公式の通りにプログラムを記述
    for(i=0;i<n;i++){
        p = y[i];
        for(j=0;j<n;j++){
            if(i!=j){
                p=p*(t-x[j])/(x[i]-x[j]);
            }
        }
        s += p; 
    }
    return s;
}

int main(void){

    // x座標を定義
    static double x[] = {0.0,2.0,3.0,4.0,5.0};

    // y座標を定義
    static double y[] = {0.8,3.4,4.9,2.9,2.0};

    double t;

    // tを0.2ずつ加算していき座標を求める
    for(t=0.0;t<=7.0;t+=0.2){
        printf("%7.2f %7.2f\n",t,lagrange(x,y,5,t));
    }

}

#出力結果

   0.00    0.80
   0.20   -0.36
   0.40   -0.94
   0.60   -1.07
   0.80   -0.83
   1.00   -0.34
   1.20    0.33
   1.40    1.10
   1.60    1.91
   1.80    2.69
   2.00    3.40
   2.20    4.00
   2.40    4.47
   2.60    4.78
   2.80    4.92
   3.00    4.90
   3.20    4.72
   3.40    4.39
   3.60    3.96
   3.80    3.44
   4.00    2.90
   4.20    2.38
   4.40    1.95
   4.60    1.69
   4.80    1.67
   5.00    2.00
   5.20    2.77
   5.40    4.09
   5.60    6.10
   5.80    8.90
   6.00   12.66
   6.20   17.51
   6.40   23.62
   6.60   31.15
   6.80   40.28

#まとめ
変数の初期化を書き忘れていたため変な挙動になってしまった。しかし原因がわからず今もたくさんググっている。具体的には以下のような出力結果がでた。初期化をし忘れたのはlagrange関数にある「s」という変数である。もう少し調べて原因がわかったら記事を更新して補足説明しようと思う。原因を知っている方やわからなくてもおそらくこうだろうという内容でもいいので教えていただきたいです。コメントお待ちしています。

 0.00    0.80
   0.20 70061828819985990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00
   0.40 70061828819985990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00
   0.60 70061828819985990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00
   0.80 70061828819985990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00
0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?