微分プログラム [C言語]
10/03/2019 04/10/2022
本稿では、微分を実行するプログラムをご紹介します。
先行で作った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]