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
-
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.
-
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.
-
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.
-
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
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 76 invités