거래와 관련된 어떤 방식으로든 두뇌를 훈련시키는 작업. 테어버, 게임이론 등 - 페이지 22

 
new-rena :
정상적으로 맞습니다. 코드를 이미 게시했습니다 . 이제 정답을 알려드리겠습니다.

결과를 공유해 주시겠습니까?... :-)
 
new-rena :
기하학적 진행의 사인파가 아니라 어떻게 생겼는지 궁금합니다.
 
avtomat :

글쎄, 아주 잘. 저것들. 우리는 핍의 모든 단계에서 많은 후속 단계 열기가 추세 반전에 점점 더 가까워지고 있다고 말합니다. 따라서 주문 크기를 더 늘리지 않을 것이지만 갑자기 문제가 발생할 경우를 대비하여 열 것입니다) ))
 

Renat , 그래서 필요한 것은 무엇입니까? 방정식을 풀거나 다른 것을 풉니 다.

만약 방정식이

MiniLot^(x^0)+MiniLot^(x^1)+MiniLot^(x^2) ... + MiniLot^(x^(N-1))=VolMax

x에 대해 결정해야 하며, 그러면 순무 찐 것( 뉴턴의 방법 또는 할선)보다 쉽습니다. 그러나 MiniLot, VolMax 및 N을 설정해야 합니다.

 
new-rena :
글쎄, 아주 잘. 저것들. 우리는 핍의 매 단계마다 많은 후속 단계 열기가 추세 반전에 점점 더 가까워지고 있다고 말하므로 주문 크기를 더 이상 늘리지 않지만 갑자기 문제가 발생할 경우를 대비하여 열 것입니다) ))

글쎄, 나는 그것에 대해 모른다 .... 나는 단지 문제를 해결하고 있었지만 ... 반전, 추세 및 기타 즐거움에 대한 이야기는 없었습니다.

네, 이에 대한 제 생각이 있습니다.

 
Mathemat :
Renat , 그래서 필요한 것은 무엇입니까? 방정식을 풀거나 다른 것을 풉니 다.

이제 공식의 형태로 솔루션을 작성하고 싶습니다. 나는 이미 공식을 도출하고 있다.

매우 감사합니다

 
new-rena : 이제 그의 솔루션을 공식으로 작성하고 싶습니다. 나는 이미 공식을 도출하고 있다.
공식을 추론할 수 없으며 암에 걸릴 것입니다. 대략적으로 해결하는 함수를 작성할 수 있습니다. 그러나 이것은 물론 x를 결정해야 하는 경우입니다.
 
Mathemat :
공식을 추론할 수 없으며 암에 걸릴 것입니다. 대략적으로 해결하는 함수를 작성할 수 있습니다. 그러나 이것은 물론 x를 결정해야 하는 경우입니다.
전류가 실제로 작동했습니까?
 
new-rena : 완료, 현재는 실제로 기능입니다

보여줘.

PS My Moscow는 그런 이상하고 낯선 문제를 해결하기를 거부합니다. 1차 도함수의 단조성은 관찰되지 않습니다. 그리고 이것은 시컨트/뉴턴 방법을 사용하여 x에 대한 방정식을 쉽고 간단하게 푸는 것을 어렵게 만듭니다. 무딘 열거(매우 최적화됨)로 해결되지만 다소 빠릅니다.

이제 2층으로 거듭나지 않고 단순히 곱하기만 하면 모든 것이 더 쉽고 명확해질 것입니다.

여기 가장 멍청한 알고리즘이 있습니다. 그러나 그는 빨리 계산합니다. 10^(-8)의 정확도를 얻으려면 약 50번의 반복이면 충분합니다.

우선 - 이전 페이지의 avtomat 'a 사진.

그리고 지금 - 내 것(매개변수는 동일함):

그리고 코드:

 #property show_inputs

extern double _MiniLot = 0.01 ;
extern double _N = 77 ;
extern double _VolMax = 5.96 ;
extern double _err = 0.0000000001 ;
extern double _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() 를 사용하여 소요된 계산 시간도 감지되지 않습니다.

 

솔루션에 대한 부록이 하나 더 있습니다.

이것은 완성도를 위한 것입니다 ;)