微分プログラム [C言語]

本稿では、微分を実行するプログラムをご紹介します。
先行で作ったfortranと違って、C言語で関数を引数とする関数を作成する際のお話も含め、ご紹介します。
C言語で関数を引数にするときは、ポインタで渡します!
fx(x)という関数を引数に持つ微分関数を下記のように定義します。

double DIF_F(double (*fun)(double x),double xd);

実際にプログラムとして、使用する際は、下記のように使います。

ans = DIF_F(fx,x);

C言語での微分プログラムのソースは下記のとおり

double DIF_F(double (*fun)(double x),double xd){
double DIF_F;
double h = pow(10.0,-9.0);
DIF_F = (fun(xd+h)-fun(xd))/h;
return DIF_F;
}

実験です。
\[
f(x) = x^2-1
\]
に対して、x=1の微分をしたときに、2と返してくれたら、正解です。
いざ!テストコードは下記のとおり。

#include <stdio.h>
#include <math.h>
double DIF_F(double (*fun)(double x),double xd);
double fx(double x);
int main(void){
 double x;
 x = 1.0;
printf("df/dx=%lf\n",DIF_F(fx,x));
return 0;
}
double fx(double x){
double fx;
fx = pow(x,2.0)-1.0;
return fx;
}
double DIF_F(double (*fun)(double x),double xd){
double DIF_F;
double h = pow(10.0,-9.0);
DIF_F = (fun(xd+h)-fun(xd))/h;
return DIF_F;
}

結果は、下記のとおり。

出てきましたね。2,3,4やってみても、2倍され結果が返ってきたので、テスト成功です。

8の時に誤差は乗ってますが・・・
fortranでの微分プログラムと見比べてみても、ポインタという概念が加わってますね。
C言語も少しずつ更新していきます。(忙しくてできてませんが・・・)

by さくらえび

関連記事:
微分プログラム [fortran]

微分プログラム[Python]

  • さくらえび
  • さくらえびと申します
    企業勤め系研究者です。理論物理が専門分野。
    エンジニア・営業・コンサルを経験し、今はデータサイエンティストとしてお仕事をさせていただいております。