C言語でexp(x)を微分方程式で書けという問題で行き詰ってます。
オイラー法で書くことはできたのですが、それ以外の修正オイラー法、ルンゲクッタ法の書き方がいまいちわかりません。
以下にオイラー法のコードを書いてるのでそれから修正方法を教えていただけると助かります。
#include <stdio.h>
#include <math.h>
double F(double x) // これは、f(x)の微分値 f'(x)
{
return exp(x);
}
double euler(double x0, double xn, double y0, int n, int modulo)
{
int i;
double x, y, h;
x = x0; y = y0; h = (xn - x0)/n;
for (i = 1; i <= n; i++) {
y += F(x) * h;
x = x0 + i * h;
if(i % modulo == 0)
printf("%-10f %-20.15f\n", x, y);
}
return y;
}
int main(void)
{
double x0=0.0; // x の初期値
double xn=1.0; // x の最終値
double y0=1.0; // y の初期値
int n= 655360; // 10分割
int modulo=65536; // 区間番号がmodulo つまり 65536=2^16 の倍数のときに途中経過を印字
printf(" %-12s %-20s\n", " x", " y = f(x) "); // %-12s は文字列を12桁の幅の中に左寄せで印字する指定
euler(x0, xn, y0, n, modulo);
return 0;
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。