CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Maths Scilab] coder une dichotomie

furetDETER
furetDETER
Niveau 7
29 septembre 2016 à 23:24:33

Wesh les kheys :( petit souci ajd en scilab. j'ai un dm assez simple sur la resolution numérique de l'équation différentielle de reynolds, à la fin j'ai une dichotomie à faire, comme expliqué dans l'énoncé. je dois trouver le paramètre Q tel que u(L) = 0. c'est à dire que la dernière coordonnée de mon vecteur u soit = à 0. je sais que ce Q est proche de 0.916. mais je n'arrive pas à coder ma dichotomie proprement.

https://image.noelshack.com/fichiers/2016/39/1475172854-20160929-201108.jpg
https://image.noelshack.com/fichiers/2016/39/1475172853-20160929-201126.jpg

donc voici l'énoncé

le code de la question 3 qui vous permet d'avoir u :

function[u]= reynolds(Q,h,p)
u(1)=0;
v(1)=((h(1)-Q)/((h(1))^3));
dh=(-(%pi)/(2*L))*sin((2*%pi/L*x));
for k=2:length(h)
v(k)=v(k-1)+p*((dh(k)/h(k)^3) -3*(dh(k)/h(k))*v(k-1));
u(k)=u(k-1)+p*v(k-1);
end
u
endfunction

pour l'avoir affichée en plot, il suffit de taper au préalable L=1 ; p=0.01; h=1+0.25*cos(2*%pi*L) puis de faire plot(u), comme indiqué question 4

Maintenant, là où je galère, c'est question 5. j'ai essayé de trouver des codes de dichotomie scilab ... je sens être proche du but mais mon code est encore brouillon. le but est vraiment de faire varier le paramètre Q de manière à obtenir u($) = 0 (le plus proche possible en tout cas.)

Donc je me doute que j'ai mon while avec une condition que je galère à définir, ainsi qu'un if ... mais c'est la galère.

voici mon code actuel pour la question 5 :d)

function [Q] = dicho(a,b)
u=reynolds(a,h,p); // donc là je récupère ma fonction ...

while (abs( u($)>10^-3) // j'ai mis 10^-3 car je peux pas exiger >0, précision machine tout ça ...
X=0.5*(a+b);
u=reynolds(X,h,p); // là je vois bien que par exemple si je prends a=0 et b=1 bah X=0.5, je suis déjà en dessous de ce que je recherche comme valeur de Q (~0.916) donc je suis censé remonter !

if u($)>0 then // là ça part en freestyle je sais pas du tout comment faire ...
b=(a+b)/2;
else
a=(a+b)/2;
end
end
Q=X;
endfunction

Enfin bref, il n'y a pas besoin de plancher le DM 3h si vous êtes famillier du principe de la dichotomie, mais là j'ai vraiment du mal :(

merci d'avance pour ceux qui aideront !

WaylonJennings
WaylonJennings
Niveau 10
30 septembre 2016 à 19:51:42

Ce qu'il faut faire s'appelle une "méthode de tir" j'ai l'impression.
Tu as ton équation qui doit satisfaire u(0) = u_0 et u(L) = u_L.

L'idée est de créer une fonction qui prend en entrée u_0 et Q, de résoudre le système et de regarder la valeur de u_L obtenue.
On fait varier Q en fonction justement de cette valeur u_L imposée (pour u_0 fixée).

Ainsi, tu recommences le processus (par dichotomie donc) jusqu'à obtenir la bonne valeur en sortie.

Jai4problemes
Jai4problemes
Niveau 10
30 septembre 2016 à 19:58:36

utilise la méthode de newton [[sticker:p/1kkn]]

WaylonJennings
WaylonJennings
Niveau 10
30 septembre 2016 à 20:02:26

Sinon je ne vois pas d'erreur dans le code.
T'as fait gaffe à la division d'entier, pour beaucoup de langages (1+0)/2 = 0.

PS : 10^-3 t'es loin de la précision machine [[sticker:p/1jnh]]

Message édité le 30 septembre 2016 à 20:03:42 par WaylonJennings
furetDETER
furetDETER
Niveau 7
01 octobre 2016 à 10:28:52

Depuis les gars j'ai du rendre mon DM :hap: c'était imparfait. puis y a eu interro avec un exo de dichotomie encore seulement cette fois ci x était un nombre, c'était plus un vecteur ! donc je m'en suis A PEU PRES sorti (c'était encore imparfait)

Puis on a eu td avec a nouveau une dichotomie et là ça y est j'ai capté le principe. d'ailleurs là on fait la méthode de newton. bref. merci tout de même :hap:

Sous forums
  • Métiers & Orientation
  • Histoire
  • Cours et Devoirs
  • Politique
  • Environnement & Nature
  • Philosophie
La vidéo du moment