[Archives] Mathématiques pures, physique, chimie, etc. : problèmes d'entraînement cérébral sans rapport avec le commerce. - page 538

 

Il est évident qu'il n'y aura presque toujours pas de solution exacte, car le nombre d'équations sera supérieur au nombre d'inconnues.

Eh bien, c'est à ça que sert le MOC. Et le problème dans la formulation de Yusuf est exactement cette méthode : tracer une ligne à travers un certain nuage de points, et de manière optimale du point de vue du MNA. Il ne parle pas seulement d'équations normales.

 
Je vois.
 
Neutron:

Quelle est donc la solution à ce problème ?


C'est évident.
 
Sauf que les conditions du problème ne disent pas que tout le monde n'a que six connaissances :) Peut-être quelque chose comme ça : (X-1)^6 = Toute la population du globe. x est le nombre de connaissances de chaque personne. Une valeur très réelle devrait être X.
 

Quelqu'un sait-il où trouver une solution générale à l'équation ?

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

^ est un signe de puissance ;A est une constante

 

Pas question, seulement des méthodes numériques. Vous pouvez simplifier en additionnant la progression géométrique :

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

En donnant une plage spécifique de A, essayons de résoudre l'approximation avec une précision acceptable.

Et avec quelle précision devez-vous trouver x, et dans quelle fourchette se situe n ?

Aussi : x est positif avec un peu de chance ?

P.S. Si A, x > 0, il est facile d'estimer x à partir du bas :

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

Et ensuite itérer (dessiner un graphique des fonctions y=x^(n+1)-1 et y=A(x-1) pour voir) :

x(0) = 1 - 1 / A

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

Vérifiez à n = 10, A = 5 :

x(0)=0,8, et la 12ème itération aboutit à un nombre de 0,823679 à 0,000001 près.

Une vérification montre que le côté gauche de l'égalité diffère du côté droit de 0,000005.

 
Mathemat:

Pas question, seulement des méthodes numériques. Vous pouvez simplifier en additionnant la progression géométrique :

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

Donnez-moi une plage spécifique A, et nous essaierons de la résoudre de manière approximative, avec une précision acceptable.

Et avec quelle précision dois-je trouver x et dans quelle fourchette se situe n ?

Aussi : x - positif avec un peu de chance ?


Oui, x est positif. J'ai passé une demi-journée à réfléchir à la façon de résoudre ce problème... - retirer X pour soulager un peu l'EA des cycles))))

Dans mon EA, j'ai prévu une solution avec une certaine erreur dans le résultat. Comme des incréments consécutifs.

Donc, il n'y a pas d'autre moyen... Je ne vais pas m'embêter avec ça maintenant, merci).

 
J'ai terminé le post, il y a une solution itérative. Si vous écrivez une fonction, elle comptera rapidement.
 
jelizavettka:


Oui, x est positif. J'ai passé une demi-journée à réfléchir à la façon de résoudre ce problème... - à sortir X afin de soulager un peu le conseiller expert des cycles))))

J'ai organisé dans l'EE la sélection d'une solution avec une certaine marge d'erreur dans le résultat. Comme des incréments consécutifs...

Il n'y a donc pas d'autre moyen... maintenant je ne serai plus perplexe, merci).


Montre-moi.

Voici ma 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:


Montre-moi.

Voici ma variante :

Je ne connais pas beaucoup les codes des autres, mais...
J'ai quelque chose de similaire...

Le pas de l'inconnue est fixé en premier, et lorsque le résultat passe au-dessus de A, la partie de l'intervalle du passage avec le pas décrémenté.... est prise comme A.

La précision est définie comme le % d'écart de la valeur résultante "A" par rapport à la valeur de consigne.

Si la précision spécifiée n'est pas atteinte, le pas est réduit...

J'ai tout en hébreu et pas si joli que ça))