[アーカイブ!】純粋数学、物理学、化学など:トレードとは一切関係ない脳トレ問題集 - ページ 538

 

明らかに、方程式の数が未知数の数より多くなるため、ほとんどの場合、厳密な解は存在しないことになります。

まあ、そのためのMOCなんですけどね。そして、Yusufの 定式化における問題は、まさにこの方法であり、ある点の雲を通る直線を、MNAの観点から最適に引くことである。彼は普通の方程式の話だけをしているわけではありません。

 
なるほど。
 
Neutron:

では、このスキームを解決するにはどうしたらいいのでしょうか?


当たり前のことなんですけどね。
 
ただし、問題の条件には、誰もが6人しか知り合いがいないとは書かれていない:)(X-1)^6=地球上の全人口、みたいな感じでしょうか。xは各人が持つ知人の数である。非常にリアルな値がXとなるはずです。
 

の一般解がどこにあるかご存知の方はいらっしゃいませんか?

x^0+x^1+x^2+x^3+.........x^n=A

はべき乗記号、Aは定数

 

まさかの数値手法のみ。幾何学的な進行の和をとることで簡略化できます。

( x^(n+1) - 1 ) / ( x - 1 ) = A

Aの範囲を指定し、許容できる精度で近似解を求めよう。

また、xはどの程度の精度で求めればよいのか、nはどの程度の範囲にあるのか。

また、xはうまくいけばプラスになる?

追伸:A, x > 0 の場合、x を下から推定するのは簡単である。

x = ( x^(n+1) + A - 1 ) / A > 1 - 1 / A

そして反復する(関数y=x^(n+1)-1、y=A(x-1)のグラフを描いて見る)。

x(0) = 1 - 1 / A

x(k+1) = ( x(k)^(n+1) - 1 + A ) / A

n=10、A=5で確認。

x(0)=0.8となり、12回目の反復で0.823679となり、0.000001に最も近い数値が得られます。

確認すると、等式の左辺と右辺が0.000005だけ異なっていることがわかる。

 
Mathemat:

まさかの数値手法のみ。幾何学的な進行の和をとることで簡略化できます。

( x^(n+1) - 1 ) / ( x - 1 ) = A

具体的な範囲Aを与えてくれれば、許容できる精度で近似的に解いてみる。

また、xはどの程度の精度で求めればいいのか、nはどの程度の範囲にあるのか。

また、x - うまくいけばポジティブ?


はい、xは正です。 半日かけて、どう解決するか考えました・・・・・・Xを取り出してEAをサイクルから少し解放する)))。

私のEAでは、結果に一定の誤差がある解答をアレンジしています。連続した小刻みな動きとか。

だから、他に方法はないのです...今はパズルしません、ありがとうございました)。

 
投稿を終えた、反復解法がある。関数を書けば、すぐにカウントされます。
 
jelizavettka:


はい、xは正です。 Expert Advisorのサイクルから少し解放されるようにXを出力すること))) 。

EAでは、結果にある程度の誤差がある解を選択するように整理しました。連続増分とか...。

他に方法はないのか...これで戸惑わなくなりました、ありがとうございます)。


見せてください。

以下は私のバリエーションです。

int start(){

   int n=12; // максимальная степень
   double A=125879;

   double x;
   int k;
   
   Alert("Начало: A="+DoubleToStr(A,8));
   
      if(Function(n,A,x,k)){
         Alert("x="+DoubleToStr(x,8)+". Проверка: A="+DoubleToStr(Formula(x,n),8)+". Итераций: "+k);
      }
      else{
         Alert("Переполнение");
      }
  
   return(0);
   
}


bool Function(int n,double A,double & x,int & k){
   double inf=MathPow(10,309);
   x=0;       
   double Step=10; // Начальный шаг, стоит поэкспериментировать со значением
   k=0;
      while(true){
         k++;
         double val=Formula(x,n);
            if(val>A || val==inf){
               x-=Step;
               Step/=2;
                  if(Step<0.000000000000001){ // 0.000000000000001 - определяет точность, увеличивать можно (снижать точность), уменьшать некуда
                     if(val==inf){
                        return(false);
                     }
                     else{
                        return(true);
                     }
                  }
            }
         x+=Step;               
      }  
}

double Formula(double x,int n){
   // x^0+x^1+x^2+x^3+.........x^n=A
   double sum=1+x;
      for(int i=2;i<=n;i++){
         sum+=MathPow(x,i);
      }
   return(sum);
}
 
Integer:


見せてください。

以下は私のバリエーションです。

他の人のコードはあまり知らないのですが...
私も似たようなものを持っています...。

未知数のステップを先に設定し、結果がAを超えたら、ステップをデクリメントしたパスの範囲内の部分...をAとする。

精度は、結果の値 "A "と設定値との偏差の%として定義される。

指定された精度が得られない場合は、ステップを縮小して...

ヘブライ語で持っているのですが、あまりきれいではありません))