[Archiv!] Reine Mathematik, Physik, Chemie usw.: Gehirntrainingsprobleme, die in keiner Weise mit dem Handel zusammenhängen - Seite 538

 

Natürlich wird es fast immer keine exakte Lösung geben, da die Anzahl der Gleichungen größer ist als die Anzahl der Unbekannten.

Nun, dafür ist das MOC da. Und das Problem in Yusufs Formulierung ist genau diese Methode: Ziehen Sie eine Linie durch eine Punktwolke, und zwar optimal aus der Sicht der MNA. Er spricht nicht nur über normale Gleichungen.

 
Ich verstehe.
 
Neutron:

Was ist also die Lösung für dieses Problem?


Das ist offensichtlich.
 
Außer, dass die Bedingungen des Problems nicht besagen, dass jeder nur sechs Bekannte hat:) Vielleicht etwas in der Art: (X-1)^6 = die gesamte Bevölkerung des Globus. x ist die Anzahl der Bekannten, die jede Person hat. Ein sehr realer Wert sollte X sein.
 

Weiß jemand, wo man eine allgemeine Lösung der Gleichung finden kann?

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

^ ist ein Potenzzeichen ;A ist eine Konstante

 

Auf keinen Fall, nur numerische Methoden. Sie können das Ganze vereinfachen, indem Sie die geometrische Progression addieren:

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

Geben Sie einen bestimmten Bereich von A an und versuchen Sie, eine Annäherung mit akzeptabler Genauigkeit zu lösen.

Und mit welcher Genauigkeit sollte man x finden, und in welchem Bereich liegt n?

Außerdem: x ist hoffentlich positiv?

P.S. Wenn A, x > 0 ist, ist es einfach, x von unten zu schätzen:

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

Und dann iterieren (zeichnen Sie einen Graphen der Funktionen y=x^(n+1)-1 und y=A(x-1), um zu sehen):

x(0) = 1 - 1 / A

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

Prüfung bei n = 10, A = 5:

x(0)=0,8, und die 12. Iteration führt zu einer Zahl von 0,823679 auf 0,000001 genau.

Eine Überprüfung zeigt, dass die linke Seite der Gleichheit um 0,000005 von der rechten Seite abweicht.

 
Mathemat:

Auf keinen Fall, nur numerische Methoden. Sie können vereinfachen, indem Sie die geom. Progression summieren:

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

Geben Sie mir einen bestimmten Bereich A an, und wir werden versuchen, ihn näherungsweise und mit akzeptabler Genauigkeit zu lösen.

Und mit welcher Genauigkeit sollte ich x finden und in welchem Bereich liegt n?

Außerdem: x - hoffentlich positiv?


Ja, x ist positiv. Ich habe den halben Tag damit verbracht, darüber nachzudenken, wie man das Problem lösen kann... - nimm X heraus, um den EA von den Zyklen ein wenig zu entlasten)))

In meinem EA habe ich für eine Lösung mit einem gewissen Fehler im Ergebnis gesorgt. Wie aufeinanderfolgende Inkremente.

Es gibt also keinen anderen Weg... Ich werde jetzt nicht darüber rätseln, danke).

 
Ich habe den Beitrag beendet, es gibt eine iterative Lösung. Wenn Sie eine Funktion schreiben, wird sie schnell gezählt.
 
jelizavettka:


Ja, x ist positiv. Ich habe den halben Tag damit verbracht, zu überlegen, wie man das Problem lösen kann... - X auszugeben, um den Expert Advisor ein wenig von den Zyklen zu entlasten)))

Ich habe im EA die Auswahl einer Lösung mit einer gewissen Fehlermarge im Ergebnis organisiert. Wie aufeinanderfolgende Inkremente...

Es gibt also keine andere Möglichkeit... jetzt werde ich nicht mehr verwirrt sein, danke).


Zeigen Sie es mir.

Hier ist meine Variante:

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:


Zeigen Sie es mir.

Hier ist meine Variante:

Ich weiß nicht viel über die Codes anderer Leute, aber...
Ich habe etwas Ähnliches...

Der Schritt der Unbekannten wird zuerst festgelegt, und wenn das Ergebnis über A geht, wird der Teil des Bereichs des Durchlaufs mit dem dekrementierten Schritt.... als A genommen.

Die Genauigkeit ist definiert als die prozentuale Abweichung des resultierenden Wertes "A" vom Sollwert.

Wenn die angegebene Genauigkeit nicht erreicht wird, wird die Stufe reduziert...

Ich habe alles auf Hebräisch und nicht so schön))

Grund der Beschwerde: