PS My Moscow는 그런 이상하고 낯선 문제를 해결하기를 거부합니다. 1차 도함수의 단조성은 관찰되지 않습니다. 그리고 이것은 시컨트/뉴턴 방법을 사용하여 x에 대한 방정식을 쉽고 간단하게 푸는 것을 어렵게 만듭니다. 무딘 열거(매우 최적화됨)로 해결되지만 다소 빠릅니다.
이제 2층으로 거듭나지 않고 단순히 곱하기만 하면 모든 것이 더 쉽고 명확해질 것입니다.
여기 가장 멍청한 알고리즘이 있습니다. 그러나 그는 빨리 계산합니다. 10^(-8)의 정확도를 얻으려면 약 50번의 반복이면 충분합니다.
우선 - 이전 페이지의 avtomat 'a 사진.
그리고 지금 - 내 것(매개변수는 동일함):
그리고 코드:
#property show_inputsexterndouble _MiniLot = 0.01 ;
externdouble _N = 77 ;
externdouble _VolMax = 5.96 ;
externdouble _err = 0.0000000001 ;
externdouble _parts = 7 ;
double resolve( double err, int & count )
{
double currErr = 10 ;
double xLeft = 0.00000001 ;
double xRight;
double valLeft, valRight;
double step = _VolMax / _parts;
count = 0 ;
while ( step > err )
{
count ++;
xRight = xLeft + step;
valLeft = funct( xLeft );
valRight = funct( xRight );
if ( valLeft * valRight > 0 )
{
xLeft += step;
continue ;
}
else step /= _parts;
}
return ( xLeft );
} //+------------------------------------------------------------------+double funct( double x )
{
double sum = 0 ;
for ( int i = 0 ; i < _N; i ++ )
{
double xPowered = MathPow ( x, i );
sum += MathPow ( _MiniLot, xPowered );
}
return ( sum - _VolMax );
} //+------------------------------------------------------------------+int start( )
{
int st = GetTickCount ( );
int count;
double x = resolve( _err, count );
double gone = ( GetTickCount ( ) - st ) / 1000 .;
Print ( "Root is x = " + x + "; funct is f = " + funct( x ) + "; gone " + gone + " sec.; count = " + count + " steps" );
return ( 0 );
} //+------------------------------------------------------------------+
추신: 이 알고리즘은 이 기능에 대해서만 작동한다는 것을 기억하는 것이 좋습니다. 단조이므로 단일 루트를 갖습니다. 불행히도, 1차 도함수의 비단조성은 우리가 접선 방법을 적용하는 것을 허용하지 않습니다. 사실, 손실이 전혀 느껴지지 않습니다. GetTickCount() 를 사용하여 소요된 계산 시간도 감지되지 않습니다.
정상적으로 맞습니다. 코드를 이미 게시했습니다 . 이제 정답을 알려드리겠습니다.
결과를 공유해 주시겠습니까?... :-)
기하학적 진행의 사인파가 아니라 어떻게 생겼는지 궁금합니다.
Renat , 그래서 필요한 것은 무엇입니까? 방정식을 풀거나 다른 것을 풉니 다.
만약 방정식이
MiniLot^(x^0)+MiniLot^(x^1)+MiniLot^(x^2) ... + MiniLot^(x^(N-1))=VolMax
x에 대해 결정해야 하며, 그러면 순무 찐 것( 뉴턴의 방법 또는 할선)보다 쉽습니다. 그러나 MiniLot, VolMax 및 N을 설정해야 합니다.
글쎄, 아주 잘. 저것들. 우리는 핍의 매 단계마다 많은 후속 단계 열기가 추세 반전에 점점 더 가까워지고 있다고 말하므로 주문 크기를 더 이상 늘리지 않지만 갑자기 문제가 발생할 경우를 대비하여 열 것입니다) ))
글쎄, 나는 그것에 대해 모른다 .... 나는 단지 문제를 해결하고 있었지만 ... 반전, 추세 및 기타 즐거움에 대한 이야기는 없었습니다.
네, 이에 대한 제 생각이 있습니다.
Renat , 그래서 필요한 것은 무엇입니까? 방정식을 풀거나 다른 것을 풉니 다.
이제 공식의 형태로 솔루션을 작성하고 싶습니다. 나는 이미 공식을 도출하고 있다.
매우 감사합니다
공식을 추론할 수 없으며 암에 걸릴 것입니다. 대략적으로 해결하는 함수를 작성할 수 있습니다. 그러나 이것은 물론 x를 결정해야 하는 경우입니다.
보여줘.
PS My Moscow는 그런 이상하고 낯선 문제를 해결하기를 거부합니다. 1차 도함수의 단조성은 관찰되지 않습니다. 그리고 이것은 시컨트/뉴턴 방법을 사용하여 x에 대한 방정식을 쉽고 간단하게 푸는 것을 어렵게 만듭니다. 무딘 열거(매우 최적화됨)로 해결되지만 다소 빠릅니다.
이제 2층으로 거듭나지 않고 단순히 곱하기만 하면 모든 것이 더 쉽고 명확해질 것입니다.
여기 가장 멍청한 알고리즘이 있습니다. 그러나 그는 빨리 계산합니다. 10^(-8)의 정확도를 얻으려면 약 50번의 반복이면 충분합니다.
우선 - 이전 페이지의 avtomat 'a 사진.
그리고 지금 - 내 것(매개변수는 동일함):
그리고 코드:
추신: 이 알고리즘은 이 기능에 대해서만 작동한다는 것을 기억하는 것이 좋습니다. 단조이므로 단일 루트를 갖습니다. 불행히도, 1차 도함수의 비단조성은 우리가 접선 방법을 적용하는 것을 허용하지 않습니다. 사실, 손실이 전혀 느껴지지 않습니다. GetTickCount() 를 사용하여 소요된 계산 시간도 감지되지 않습니다.
솔루션에 대한 부록이 하나 더 있습니다.
이것은 완성도를 위한 것입니다 ;)