Inscription / Connexion Nouveau Sujet
Niveau logiciels
Partager :

Scilab : Méthode de simpson

Posté par
Terminator33
09-01-13 à 10:07

Bonjour a tous,

je bloque actuellement sur la programmation de la méthode de simpson. Apres avoir pensé trouver la bonne formule voila que le msge d'erreur  'soustraction incohérente' apparait. Je n'arrive pas à trouver cette erreur qui doit etre vraiment idiote et donc j'aimerais avoir l'avis d'un regard nouveau sur cette affaire.

Voici le code

function y=simpson1(a,b,n,f);
    h=(b-a)/n
    ext=a+h*[1:n-1];
mil=a+(h/2)*(2*[1:n]-1);

    valext=f(ext)
    valmil=f(mil)
    y=(h/6)*(f(a)+f(b)+2*sum(valext)+4*sum(valmil))
endfunction


Merci par avance de me répondre

Posté par
dhalte
re : Scilab : Méthode de simpson 09-01-13 à 11:58

cherche dans Google, tu as plein d'exemples qui fonctionnent très bien

Posté par
Terminator33
re : Scilab : Méthode de simpson 09-01-13 à 13:10

dans ce cas la je veux bien que tu me donnes un exemple qui marche tres bien car crois-moi si je te dis que j'ai arpenté toutes les pages google qui y faisait référence

Posté par
dhalte
re : Scilab : Méthode de simpson 09-01-13 à 14:56

je n'ai pas trouvé très probant

mais ta méthode ne me parle pas trop
je découvre scilab à l'occasion de ton post et n'ai pas encore bien en main la manipulation de matrices,

alors voilà ma solution

// définir la fonction à intégrer
function y=fx(x), y=sqrt(x), endfunction

// définir le calcul de l'interpolation sur un intervalle élémentaire
function y=simpson1(a,b,f), y=(b-a)/6 * (f(a) + 4*f((a+b)/2) + f(b)), endfunction

// définir la boucle de parcourt sur l'intervalle souhaité
function y=simpson(a,b,n,f)
h=(b-a)/n
s=0
while a<b
s = s + simpson1(a,a+h,f)
a = a+h
end
y=s
endfunction

// appel de la fonction
simpson(1,2,10,fx)


résultat
ans  =

    1.2189514058106  

Posté par
Terminator33
re : Scilab : Méthode de simpson 09-01-13 à 15:38

Excellent , je n'avais pas pensé a créer au préalable une fonction pour un intervalle élementaire et ca change tout j'ai une erreur bien plus mince. Merci beaucoup ton aide a été précieuse

Posté par
Terminator33
re : Scilab : Méthode de simpson 09-01-13 à 15:47

ah j'ai un petit soucis car ma fonction que je veux integrer entre 0 et 10 est définie sur R*. Ainsi f(0) provoque une division par 0 et donc une erreur dans la formule de simpson, je ne vois pas comment changer cela ...

Posté par
dhalte
re : Scilab : Méthode de simpson 09-01-13 à 15:48

donne l'expression de ta fonction

Posté par
Terminator33
re : Scilab : Méthode de simpson 09-01-13 à 15:59

f(x)=1 / sqrt( 1+ (x-(1/x))²)

Désolé de pas etre plus clair sur l'écriture :/

Posté par
Terminator33
re : Scilab : Méthode de simpson 09-01-13 à 16:00

oups j'ai oublié qu'il ya un parametre p réel

f(x)=1 / sqrt( 1+ p(x-(1/x))²)

Posté par
dhalte
re : Scilab : Méthode de simpson 09-01-13 à 16:02

difficile d'appliquer une méthode d'approximation numérique a une fonction qui dépend d'un paramètre... tu me fais quoi, là ? c'est quoi, exactement, le but ?

Posté par
Terminator33
re : Scilab : Méthode de simpson 09-01-13 à 16:07

Ah ca oui c'est difficile ben il faut programmer la méthode simpson 1/3 pour calculer l'intégrale de cette fonction entre 0 et 10 .puis appliquer la méthode simpson 3/8
Comme c'étais assez compliqué comme ca j'ai fixé p=1 .

Je ne sais pas s'il existe un code pour empecher cette erreur de division par 0. Il me semble logique que pour approximer l'integrale de la fonction sur [a,b]  la fonction soit elle meme continue sur [a,b]. Sinon  ca ne marche pas et point barre. Je pense que c'est une erreur d'énoncé ou alors c'est un piege sacremment vicieux

Posté par
dhalte
re : Scilab : Méthode de simpson 09-01-13 à 16:15

je ne connais pas les "méthodes de simpson 1/3 ou 3/8"


mais non, ce n'est pas une erreur d'énoncé
pour les intégrales sur un intervalle où les images de certains points (bornes ou intérieur) ne sont pas définis, on parle d'intégrale "impropre"

elles n'ont rien de sale, c'est un simple nom qu'on leur donne

et on les traite ainsi :
on "isole" chaque intervalle où f est définie et on étudie la limite de l'intégrale aux bornes : si cette limite est définie, l'intégrale impropre est définie

ici : \int_0^{10}f(x)\text dx est définie si \lim_{\stackrel{h>0}{h\to0}}\int_h^{10}f(x)\text dx existe et est finie.

Posté par
Terminator33
re : Scilab : Méthode de simpson 09-01-13 à 16:47

Oui je connais ce théorème

Mais cela n'explique pas comment trouver un code qui permet de prendre 0 comme valeur, je ne vois vraiment pas comment faire

Posté par
dhalte
re : Scilab : Méthode de simpson 09-01-13 à 17:14

ah tu connais
alors pourquoi affirmes tu que

Citation :
Je pense que c'est une erreur d'énoncé ou alors c'est un piege sacremment vicieux
?

sers-toi de ça pour résoudre le problème en 0
[0;10]=[0;h]\cup[h;10]

il suffit d'évaluer l'erreur faite si on néglige l'aire sur [0;h]

ici, il est possible de montrer que cette aire est de l'ordre de \frac h{2\sqrt p}
donc si on accepte de négliger cette erreur sur [0;10^{-6}] par exemple, on calcule l'aire sur [10^{-6};10]



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !