[카테고리:] <span>C언어 소스</span>

질문

J1(x)= 시그마 m=0부터 무한대까지  (-1)^m/m!(m+1)!*(x/2)^2m+1

이식을 C언어로 어떻게 표현하나요?ㅠㅠ

시그마랑 !< 이건 배우지않아서 힘드네요ㅠㅠ

답변

현재 질문에서 시그마의 m=0부터 무한대까지 정수라는 가정하에 소스 코드를 작성하였습니다.

만약 실수라면 J1 함수의 m변수를 double 형식으로 변경하시고 for문 내부에 m++대신

m = m+0.01 로 변경하시면 근사한 값을 얻을 수 있습니다.

코드의 내용은 크게 설명이 필요할 것 같지 않아서 생략할게요.

소스 코드

/* Project #1. J1_01.c */
/********************************************************
Compute J1 function.
*********************************************************/

#include <stdio.h>
#include <math.h>
double J1(double x);
int main()
{
    double x;
    double exact;
    int k;
    printf(" x-coor Exactn\n");
    for (k = 0; k <= 100; k = k + 1)
    {
        x = (double)k / 10.0;
        exact = J1(x);
        printf("%7.3f %12.6f \n", x, exact);
    }
}

double Factorial(int n);
//J1(x) = 시그마 m = 0부터 무한대까지(-1) ^ m / m!(m + 1)!*(x / 2) ^ 2m + 1
double J1(double x)
{
    int m = 0;
    double value = 0;
    double value2 = 1;//의도적으로 value와 다르게 초기화
    for (m = 0; value != value2; m++)
    {
        value += pow((-1), m) / Factorial(m)*Factorial(m + 1)*pow((x / 2), 2*m + 1);
        value2 = value;
    }
    return value;
}
double Factorial(int n)
{
    if (n <= 1)
    {
        return 1;
    }
    return n*Factorial(n-1);
}

C언어 소스