2015-02-04 5 views
0

특정 함수의 수치 적 차를 계산하려고합니다. 이 함수는 다를 수 있습니다 (예 : 선 또는 원이 될 수 있음). 나는이 메소드에서,분화를 계산하는 함수를 설계하는 방법

Function myFunc = new Function(LinearLine); 
Derivative(myFunc, 3); //Derivative at x=3 

그러나 : 내가 전화

double LinearLine(double arg) 
{ 
    double m = 2.0; double c = 1.0; 
    return m*arg + c; 
} 

: 선형 라인

delegate double Function(double arg); 
static double Derivative(Function f, double arg) 
{ 
    double h = 10e-6; 
    double h2 = h*2; 
    return (f(arg-h2) - 8*f(arg-h) + 8*f(arg+h) - f(arg+h2))/(h2*6); 
} 

:

내 첫번째 생각은 일반적인 함수를 정의하는 것입니다 mcLinearLine() 기능에 하드 코딩해야합니다. 나는 LinearLine 인수 목록에 mc를 전달하면

대안 : LinearLine(double m, double c), 나는 다른 기능을 호출 Derivative() 기능 반환 값을 매번 다시 작성해야합니다. (예 : Circle(double radius, double x, double y)).

내 질문에 그런 경우, 그런 클래스/기능을 디자인하는 좋은 방법은 무엇입니까?

+0

참고 : 원은 함수가 아닙니다 ... 엄격하게 말하기 ... –

+0

이것은 1 차 미분의 정확한 미분은'(f (x + h) -f (x-h))/(2 * h)'입니다. – ja72

+0

원이있는'g (x, y) = 0'와 같은 암시 적 함수의 구별에 대해 읽어보십시오. https://www.math.ucdavis.edu/~kouba/CalcOneDIRECTORY/implicitdiffdirectory/ImplicitDiff.html – ja72

답변

0

참고 :이 답변은 Derivative에 전달하는 기능을 구성에 적용하고 당신은 람다 표현식 함수를 정의 할 수 있습니다

(ja72에 의해 linked으로) 암시 적 기능에 도움이되지 않습니다

Func<float,float> myFunc = x = > 3 * x + 7; 

에게 당신을 을 사용하면 n-ary 함수를 n-1-ary 함수로 변환 할 수 있습니다.

float TwoArg(float x, float y) { return x * y; } 
    Func<float,float> twoArg2 = x => TwoArg(x, 2); 
관련 문제