2012-06-08 3 views
11

학교용 알고리즘을 구현 중이며 프로그래밍에서 명확한 적분이 어떻게 나타나는지 이해하는 데 문제가 있습니다. 예를 들어, I는 합산 방정식은 다음의 예로서 구현 될 수 있음을 알고
enter image description here프로그래밍에서 수학 방정식을 구현하는 데 문제가 있음

가정 Y = F (x)를 I 다음 수치 적분 예를 나타내는 얼마나

if(x==0){ 
    y=x+1; 
}else{ 
    for(int i = 0; i < n; i++){ 
     y = y + (x - 1); 
    } 
} 

:
enter image description here
을 여기에 심어진 방정식은 수학적으로 이해하지 못할 수도 있지만 제 목표는 통합을 포함하는 알고리즘을 구현해야하는 학교 프로그래밍 프로젝트에서 비슷한 방정식을 C#으로 구현하는 것입니다. 저는 심슨 규칙과 같은 명확한 적분을 풀기위한 수치 적 방법이 있다는 것을 읽었습니다. 방정식을 구현하는 데 그러한 메소드를 사용해야하거나 루프와 같은 프로그래밍과 같이 정수를 표현할 수 있습니까?

+0

그래서 수식 파서가 필요합니까? 또는 수학 수식을 변경하여 코드를 작성하는 방법을 배우고 싶습니까? – SQLMason

+0

수식을 코드로 변경하고 싶습니다. – user1327159

+0

프로그래밍에 오신 것을 환영합니다! 아래에서 언급했듯이 무한한 금액을 가질 수 없습니다. 문제를 해결하고 관련 코드를 작성하기 위해 취해야 할 조치에 대해 생각해야합니다. – SQLMason

답변

1

당신이하려는 일에 달려 있습니다. 이것이 특정 구현 인 경우 수식을 통합하면 x-1(x^2)/2 - x이되고 최대 값에서 최소값을 뺀 값을 반환합니다.

또는 dx에 적절한 단계 크기를 선택하여 추정 할 수 있습니다.

decimal dx=0.1; 

if(x==0){ 
    y=x+1; // could just return y=1 
}else{ 
    decimal tempY=0; 
    for(decimal i = 3; i <= 20; i+=dx){ 
     tempY += (i - 1); 
    } 
    // Either return tempY as decimal or 
    y= Convert.ToInt32(tempY); 
} 
1

어쩌면 나는 이해할 수 없지만 숫자를 계산하는 방법을 알고 싶습니까?

그럴 경우 많은 방법이 있습니다. 간단하게 할 당신에서 당신이 할 수있는 예를 http://en.wikipedia.org/wiki/Numerical_integration

: 간단한 소개의 경우에서 살펴

computeIntegral()
int f(int x) { 
    if(x == 0) { 
     y = x + 1; 
    }else{ 
     y = computeIntegral() 
    } 
    return y 
} 

는 중요한을 계산하기 위해 작성해야하는 기능입니다.

하지만 x가 0이 아닌 f (x)가 하나의 값이기 때문에 함수 f (x)에 문제가 있다고 생각합니다. 어쩌면 적분 경계는 x에 의존해야합니까?

마지막 코멘트 x가 부동 소수 인 경우 x == 0은 반올림 자르기 때문에 부동 소수점에 고유 한 이진 표현이 없기 때문에 권장하지 않습니다.

+0

나는 방정식이 이해할 수 없다는 것을 안다. 나는 단지 두 개의 이미지를 내가 Word에서 두들겨서 내가하고 싶은 일에 대한 일반적인 생각을 내놓았지만 내 목적은 절대적으로 필수 불가결 한 것만을 나타내는 법을 찾는 것이다. 코드에서,하지만 내가 이해하고있는 바는, 여러분이 말한 것을 오해하지 않는다면, 수치 적 방법을 사용하여 정수를 계산해야한다는 것입니다. – user1327159

+0

IEEE fp 표준은 +0과 -0을 같음 따라서 서로 다른 표현을 가지고 있다는 사실로 x == 0.0이 유효하지 않은 (또는 귀찮은) 연산이되지는 않습니다. 그리고 이것은 '반올림 잘라 내기'와 아무런 관련이 없습니다. –

+0

@HighPerformanceMark 'x == 0'에 대해 확인하지만 더 일반적으로 두 개의 부동 숫자를'=='와 비교하는 것이 맞습니까? – Ger

0

정수가 무한한 합계이기 때문에 단순히 루프로 적분을 표현할 수 없습니다. 근사법을 사용하거나 방정식을 수정하여 정수 기호를 제거해야합니다. 두 번째 등식의 적분은 쉽게 제거 할 수 있어야합니다.

1

수치 적 통합의 주제는 크고 매우 복잡해 질 수 있으므로이 답변에서 모두 다루지는 않겠습니다.

심슨의 규칙은 간단하고 근사한 (복잡한 것, 정확하지 않은 것 또는 둘 다가 아닌) 스펙트럼의 끝을 수치 적으로 통합하는 방법입니다. 그것은 이해하기 쉽고 프로그램하기가 쉽기 때문에 주제에 대한 조사를 시작하는 것은 나쁜 선택이 아닙니다. 내가 좋아하는 프로그래밍 언어로 the formula as presented on Wikipedia을 직접 구현할 수 있다는 것은 의심의 여지가 없습니다.

이제 루프와 심슨의 규칙을 묶으십시오 : 심슨의 규칙이 통합의 진정한 가치에 미치는 근사의 정확도는 통합의 한계 (귀하의 경우 3과 20)가 가까워짐에 따라 향상됩니다. 그래서 당신이 취할 수있는 접근법은 3에서 4까지, 4에서 5까지 ... 적분을 계산하는 루프를 작성한 다음 끝에 모두 추가하는 것입니다. 통합은 영역을 생성하고 영역을 함께 추가하면 일반적으로 또 다른 큰 영역을 생성합니다.

수치 적분의 모든 다른 전문가들에게 나는 다른 접근 방식이 있다는 것을 알고 있습니다. 그리고 다른 접근 방식 중 많은 것이 (다른 여러 가지 의미에서) '더 우수'하며, Simpson의 규칙이 문제가된다는 것을 알고 있습니다. 일부 (많은) 기능이 있지만 시작하기에 좋지 않습니다.

관련 문제