Edited at

[C言語] 2階微分を差分で計算

More than 3 years have passed since last update.

GitHubにも公開中。

1階微分の場合は次の記事に書きました。 [C言語] 1階微分を差分で計算


関数 $y=f(x)$ の2階微分の差分

\frac{f(x+Δx)-2f(x)+f(x-Δx)}{(Δx)^2}


関数 $f(x)=sinx$ の2階微分を差分で計算し、グラフに描く。

#include <stdio.h>

#include <math.h>
#define f(x) sin(x)

int main() {
double x, x1, x2, dx, f2;

printf("Δxを入力して下さい。Δx= ");
scanf("%lf", &dx);

FILE *data;
data = fopen("problem_data.csv", "w");

for (int i=0; i<360; i++) {
x = i*( M_PI/180. );
x1 = x - dx;
x2 = x + dx;

f2 = ( f(x2) - 2*f(x) + f(x1) )/(dx*dx);
printf("x = %f f2 = %f\n", x, f2);
fprintf(data, "%f, %f\n", x, f2);
}

fclose(data);

printf("2階微分 f2 = %f\n", f2);
}

結果は $f(x)=-sinx$ なので、以下のようなグラフになる。このグラフは$Δx=0.01$で計算したもの。