복잡한 평면에서 등고선 적분을 계산하는 적용된 수학 프로그램을 작성하려고합니다. 처음에는 사다리꼴 알고리즘에 대한 알고리즘을 작성하고 싶었지만, 어떻게 생겼는지 이해하는 데는 다소 어려움이 있습니다. 결국, 우리는 대개 사다리꼴 방법을 2D 그래프와 같이 생각합니다. 여기에는 f : C -> C가있어서 4D를 말합니다.등고선 통합을위한 알고리즘 C++
결국이 알고리즘을 사용하여 잔차를 계산하고 싶지만 가장 간단한 f (z) = 1/z를 원할 때 원점을 중심으로 한 반지름 1의 원으로 등고선을 만들면 나는 1 근처에 아무것도 얻지 못합니다 그것은 내가해야만하는 것입니다). 다음은 사다리꼴 방법에 대한 내 코드입니다 : 여기
complexCartesian trapezoid(complexCartesian *c1, complexCartesian *c2)
{
complexCartesian difference = *c1 - *c2;
complexCartesian ans(0.5 * (function(c1).real + function(c2).real) *
difference.mag(),
0.5 * (function(c1).imag + function(c2).imag) *
difference.mag());
return ans;
}
는 '기능'은 바로 F (Z) = 1/Z (나는이 제대로되어 있는지 확인 해요)와 complexCartesian가 복잡한 점에 대한 내 클래스입니다 계산 a + bi 형식 :
class complexCartesian
{
public:
double real;
double imag;
complexCartesian operator+ (const complexCartesian& c) const;
complexCartesian operator- (const complexCartesian& c) const;
complexCartesian(double realLocal, double imagLocal);
double mag(); //magnitude
string toString();
complexPolar toPolar();
};
나는이 기능들 각각이해야 할 일을하고 있다고 확신한다. (나는 복잡한 수를위한 표준 클래스가 있다는 것을 알고 있지만 연습을 위해 내 자신을 쓸 것이라고 생각했다). 실제로 통합하려면, 나는 다음과 같은 사용
double increment = .00001;
double radius = 1.0;
complexCartesian res(0,0); //result
complexCartesian previous(1, 0); //start the point 1 + 0i
for (double i = increment; i <= 2*PI; i+=increment)
{
counter++;
complex cur(radius * cos(i), radius * sin(i));
res = res + trapezoid(&cur, &previous);
previous = cur;
}
cout << "computed at " << counter << " values " << endl;
cout << "the integral evaluates to " << res.toString() << endl;
난 단지 실제 축을 따라 통합 또는 내가 상수 내 기능을 교체 할 때 나는 정확한 결과를 얻을 수
. 그렇지 않으면 10^(- 10)에서 10^(- 15) 정도의 숫자를 얻는 경향이 있습니다. 의견이 있으시면 감사드립니다.감사합니다.
등고선 적분을한지 꽤 오래되었지만, 위의 적분은 0으로 계산됩니까? – templatetypedef
번호 1/z는 원점에 극점이 있고이 극점의 잔여 물은 1 (lim_ {z \ ~ 0} z (1/z) = 1)입니다. 그러므로 적 분식은 잔차 정리에 의해 2 (pi) (i)로 평가되어야합니다. – alexvas
아, 그래. 알려 줘서 고마워! 이것이 수치 적으로 불안정 할 수 있다면 궁금합니다. – templatetypedef