Trigonométrie - segment de disque

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
Gordon72
Membre Naturel
Messages: 11
Enregistré le: 24 Aoû 2014, 15:39

Trigonométrie - segment de disque

par Gordon72 » 24 Aoû 2014, 17:17

Bonjour tout le monde,

J'en viens à demander de l'aide car je suis complètement bloqué depuis 2 jours sur un problème de segment de disque.

Voici mon problème :

La formule pour calculer la surface S d'un segment de disque de hauteur h inscrit dans un cercle de rayon R est :
S= R².Arcos(h/R)-h.Racine(R²-h²)

Voilà où je bloque: je dois trouver une formule de type h=f(R,S) pour inscrire dans une contrainte sous un Solveur.

h ne pouvant être directement isolé seul, je viens demander de l'aide aux mathématiciens pour savoir si il n'y aurait pas un autre moyen d'aboutir à une fonction de type h=f(R,S). Evidement je pourrais trouver h connaissant S et R mais R va varier donc je ne peux pas tous les calculer jusqu'à trouver la bonne solution.

Merci pour toute aide éventuelle.

Bonne journée,
Cordialement.



Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 24 Aoû 2014, 17:24

pas besoin d'isoler pour utiliser un solveur.

Gordon72
Membre Naturel
Messages: 11
Enregistré le: 24 Aoû 2014, 15:39

par Gordon72 » 24 Aoû 2014, 18:03

Cliffe a écrit:pas besoin d'isoler pour utiliser un solveur.


Oui sauf que j'ai S mais R varie dans mon solveur et h ne doit pas dépasser une certaine hauteur car j'ai d'autres contraintes mécaniques à respecter que je ne citerai pas en totalité ici car plus rien à voir avec le sujet (car je travail en vrai sur un cylindre dont le volume sous la hauteur ne doit pas dépasser un certain pourcentage du volume total du cylindre). En gros je ne peux pas dire au solveur Excel de me résoudre h pour chaque rayon car il va les faire varier de 0 à 2500 par pas de 0.05.

Je serais obligé d'imbriquer un solveur dans chaque itération d'une boucle For... ce qui prendrait énormément de temps. Cela reviendrait à faire R, solveur résoud h; R->R+0.05, solveur résoud h; R-> R+0.1 solveur résoud h... jusqu'à 2500 où jusqu'à trouver une solution où h < ou = à mon h max à respecter.

Je recherche donc un moyen d'aboutir à une fonction ou on peut isoler h pour le calculer directement connaissant le R et S (donc h=f(R,S)).

Mais à mon avis c'est peine perdue.

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 24 Aoû 2014, 18:10

tu peux appeler ton solveur des milliers de fois, ça sert à ça l'informatique.

Gordon72
Membre Naturel
Messages: 11
Enregistré le: 24 Aoû 2014, 15:39

par Gordon72 » 24 Aoû 2014, 18:16

Cliffe a écrit:tu peux appeler ton solveur des milliers de fois, ça sert à ça l'informatique.


Non pas dans mon cas car mon solveur est déjà utilisé pour résoudre mes contraintes mécaniques qui dépendent de h, R et S plus autres... J'ai déjà imbriqué 2 solveurs mais ça prend 45 minutes à résoudre en VBA un problème qui peut pourrait se faire en 1 ou 2 secondes maxi si j'ai la fonction à entrer dans la cellule.
En gros je cherche à faire calculer h automatiquement à chaque itération du solveur sur R au lieu de lui demander de résoudre h après chaque résolution sur les contraintes mécaniques.

Après je comprend bien que c'est peut-être impossible ce que je demande. Mais je préfèrerais avoir l'avis de mathématiciens expérimentés avant d'abandonner (car je suis en vrai mécanicien).

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 24 Aoû 2014, 18:31

tu peux pas isoler h.
mais tu peux coder un algo en C++ et ça prendra moins d'une seconde :lol3:.

Gordon72
Membre Naturel
Messages: 11
Enregistré le: 24 Aoû 2014, 15:39

par Gordon72 » 24 Aoû 2014, 20:54

Cliffe a écrit:tu peux pas isoler h.
mais tu peux coder un algo en C++ et ça prendra moins d'une seconde :lol3:.


Okay merci en tout cas pour la réponse, je m'y attendais mais je préférais attendre la réponse d'un matheux xD.

Alors je vais voir ça. Merci et bonne soirée.

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 24 Aoû 2014, 21:13

Un algo pour résoudre ton pb :

Code: Tout sélectionner
#include   // EXIT_SUCCESS
#include     // acos  sqrt
#include  // std::cout  std::endl

const double R = 10;
const double S = 25;
const double Rc = R * R;
const double epsilon = 0.0001; // Précision

double f(double h) { return Rc * acos(h / R) - h * sqrt(Rc - h * h) - S; }

double solve_eq() {
    double a = - R, b = R, m, fm;

    do {
        m = (a + b) / 2.; fm = f(m);
        if (fm  epsilon);

    return m;
}

int main() {
    std::cout << solve_eq() << std::endl;
    return EXIT_SUCCESS;
}

Gordon72
Membre Naturel
Messages: 11
Enregistré le: 24 Aoû 2014, 15:39

par Gordon72 » 25 Aoû 2014, 21:09

Merci beaucoup d'avoir pris le temps de me programmer ça. Je vais essayer d'intégrer cela.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 26 Aoû 2014, 00:52

hello,

soit , donc



soit (à priori h/R<1 et positif, donc 0<u<pi/2)



d'où
d'où

en posant x=2u, il vient


soit encore


Bon...on aurait pu le voir avant, mais 2pi est potentielle solution:
En effet:
pour h==-R


sqrt(R^2-R^2)=0 et piR^2==S est correct.

mais bon, h négatif c'est pas super.

et c'est la seule solution:
x-sin(x) a pour dérivée 1-cos(x) qui est toujours positive...

Donc soit jme suis torché..soit ton expression de S est pas bonne.
la vie est une fête :)

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 26 Aoû 2014, 11:32

ouai l'expression de S est bizarre.
dans ton calcul tu pars du principe que (surface du disque). Jsuis pas sûr que le R soit le rayon de ce disque ...

La question c'est, pour un S et un R donné, que vaut h ?

wserdx
Membre Rationnel
Messages: 654
Enregistré le: 03 Oct 2009, 14:44

par wserdx » 26 Aoû 2014, 12:55

On trouve ces formules de calcul de surface de segment de disque ici en particulier:
formules
Une autre en fonction de l'angle:

évidemment la fonction inverse de n'a pas d'expression simple utilisant les fonctions usuelles.
Pour l'inverser efficacement, une piste serait peut-être de la mettre en table ? (ie. calculer toutes ses valeurs une fois pour toutes par pas de par exemple : à l'heure de l'informatique actuelle, ça n'est pas difficile, et même un raffinement : faire une interpolation linéaire entre deux pas)
La piste proposée par Cliffe me semble très bien aussi.

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 26 Aoû 2014, 13:46

ah je comprend mieux maintenant pourquoi il parle de hauteur ^^

Gordon72
Membre Naturel
Messages: 11
Enregistré le: 24 Aoû 2014, 15:39

par Gordon72 » 26 Aoû 2014, 15:29

Cliffe a écrit:ouai l'expression de S est bizarre.
dans ton calcul tu pars du principe que (surface du disque). Jsuis pas sûr que le R soit le rayon de ce disque ...

La question c'est, pour un S et un R donné, que vaut h ?


Oui c'est bien cela sauf que ma formule est en effet fausse.

Après vérification c'est moi qui me plante lamentablement. Je viens de voir ça sur le site indiqué un peu plus haut (ma formule venait de là). En fait la hauteur du segment de disque c'est pas h mais R-h...

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 26 Aoû 2014, 15:54

ta réussi avec mon algo ?

Gordon72
Membre Naturel
Messages: 11
Enregistré le: 24 Aoû 2014, 15:39

par Gordon72 » 30 Aoû 2014, 00:54

Désolé pour le message tardif. Donc j'ai voulu essayer le programme mais j'ai pas d'éditeur C++ (c'est bien du C++ non ?). Donc j'ai recodé en VBA le SolverSolve mais ça prend trop de temps pour les itérations car le solver est intégré directement dans une boucle For très longue.

Finalement je me suis résigné à prendre un disque au pif, de tracer la courbe Surface segment de disque/PI*R² = f(h/2R) et de faire une régression linéaire (de degré 20 ^^ pour la précision voulue). Comme ça j'ai un polynôme qui me permet de calculer h directement en connaissant la surface et le rayon.

Merci encore à tous pour votre aide et bonne soirée.

Cordialement.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 30 Aoû 2014, 08:43

bj,

prendre trop de temps c'est très vague.
Ca peut etre la dichotomie, mais pas forcément.
Par exemple,
tu as l'air de pouvoir faire varier S et R.
Ce qui te fait une surface à couvrir.

n'est-il pas possible de préquadriller cette surface?

Si tu veux faire du live, idem en calculant directe sans info préalable, ben tu es amené à résoudre l'équation (d'inconnue x et de paramètre k)
k = x-sin(x)

donc déjà cliffe te propose dichotomie mais c'est ptet pas le mieux.
Tu peux essayer avec newton.
Tu peux aussi essayer (enfin je sais pas ce que ca vaut, il faudrait majorer l'erreur...):
tu prends le dev en série de sin(x), tu récupes un polynomes de degré 5, tu prends le chebycheff deg 5, ca te donne Pn(x) qui approxime x-sin(x) un polynome de degré 3 (et puissances impaires) puis tu inverses avec cardan (il existe qu'une seule solution)

PS: une regression linéaire c'est degré 1.
la vie est une fête :)

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 30 Aoû 2014, 09:22

Y'a un pb dans ton code, c'est pas possible que ça soit long.

Gordon72
Membre Naturel
Messages: 11
Enregistré le: 24 Aoû 2014, 15:39

par Gordon72 » 30 Aoû 2014, 18:56

@Fatal Error: désolé je voulais dire que j'ai fais sous Excel avec la formule DroiteReg(Y,X^{1.2.3.4...20}) pour avoir un polynôme de °20 tel que P(x) = ax^20+bx^19...+tx+0.

@Cliffe: mon code est on ne peut plus correct. Comme je l'ai dis au début j'avais simplifié le problème pour le forum mais je couvre en réalité des cylindres donc j'ai une boucle For qui couvre pour L qui varie de 0 à 60 par pas de 0.01 et R qui varie de 0 à 2500 par pas de 0.005 d'où 3.10^9 itérations. De plus pour chaque itération, Excel doit vérifier 9 conditions et si je rajoute le Solver dedans ça devient terrible car il doit Solver 3.10^9fois et ça ça rallonge mais alors énormément le temps d'attente (le Solver pour un cas prend déjà quasiment une demi seconde alors pour 3.10^9).

Mais ce n'est pas grave en fait ça marche très bien avec le polynôme donc merci encore à vous.

PS : il y a un bouton "Résolu" ? Car je ne le vois pas.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 30 Aoû 2014, 22:28

non il n'y a pas de bouton résolu, tu peux dans un best effort modifier le titre de la discussion en y rajoutant [Résolu] mais c'est pas obligatoire.
la vie est une fête :)

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 76 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite