C言語でf(x)=sinxのx=0におけるテイラー展開を求めるプログラムを作成しています。
ですが、階乗についてのプログラムが分かりません。
1/n!の場合のプログラムはかけましたが、1/(2n-1)!の場合、1/n!の何処をどのように書き換えればいいのかが分かりません。
↓これは1/n!のプログラムです
double an(int n)
{
double factorial = 1.0;
for(int i =1; i <= n; i++){
factorial *=(double)i;
}
return 1/factorial;
}
分かりにくくてすみません。
よろしくお願いいたします。
2*i-1に書き換えて実行してみましたが、課題の答えと同じになりませんでした、
visual studio2017を使っています。
全体のプログラムが今はこんな感じてす。
先にこれを出すべきでした、すみません。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define EPS 0.0000001
#define NMAX 100
#define DELTA 0.1
double an(int n)
{
double factorial = 1.0;
for (int i = 1; i <= n; i++) {
factorial *= (double)(2*i-1);
}
return 1 / factorial;
}
void sin_approx(double x)
{
double sn = 0.0;
int N = 1;
for (N = 1; N < NMAX; N++)
{
double tn = pow(-1, (double)N-1)*pow(x,(double)2*N-1)*an(N);
sn += tn;
if (fabs(tn) < EPS)
break;
}
printf("%.1f\t%4.8f\t%d\t%4.8f\n", x, sn, N, sin(x));
}
int main(void)
{
printf("x=0におけるテイラー展開 f(x)=sin x, 区間[-5.0,5.0]\n");
double min = -5.0;
double max = 5.0;
double x = min;
printf("x\tTaylor\t\tN\tsin(x)\n");
while (x <= max) {
sin_approx(x);
x += DELTA;
}
system("pause");
}
回答2件
あなたの回答
tips
プレビュー