Matlab : calcul d'intégrale

Discutez d'informatique ici !
Avatar de l’utilisateur
Escroc
Membre Relatif
Messages: 259
Enregistré le: 04 Nov 2005, 21:30
Localisation: France

Matlab : calcul d'intégrale

par Escroc » 26 Déc 2013, 22:47

Bonsoir,

Je débute en programmation sur Matlab et de ce fait je rencontre des difficultés pour calculer une intégrale:

Dans un premier script nommé "mysinc.m" j'ai créée ma fonction :

function y=mysinc(x,A)
y=A*sin(pi*x)./(pi*x)
y(find(x==0))=A

Dans un second, j'utilise "quadl", pour calculer l'intégral entre -1 et 1

q=quadl(@mysinc,-1,1)

Je n'arrive pourtant pas à faire fonctionner ces quelques lignes de programmation.
Comment faire?

Merci d'avance
“La sévérité prévient plus de fautes qu'elle n'en réprime” N.Bonaparte



Benjamin
Membre Complexe
Messages: 2337
Enregistré le: 14 Avr 2008, 11:00

par Benjamin » 26 Déc 2013, 22:59

Salut,

Il me semble (sans certitude) que dans la déclaration d'une fonction dans un .m, les variables de sorties sur la ligne de déclaration doivent entre entre []. Donc il faudrait donc écrire function [y] = mysinc(x,A).

C'est quoi l'erreur ? Il doit bien te dire quelque chose et ça peut aider ;)

Benjamin
Membre Complexe
Messages: 2337
Enregistré le: 14 Avr 2008, 11:00

par Benjamin » 26 Déc 2013, 23:02

Oups, j'ai trouvé. Quand tu intègres, tu ne peux intégrer que par rapport à une variable. Or ta fonction a 2 variables. Il faut donc choisir quel paramètre est fixé et utiliser une fonction anonyme pour transformer ta fonction de 2 variables en fonction à 1 seule variable.

Par exemple, en fixant A :

quadl(@(x) mysinc(x, 5), -1, 1).

Ici, A vaut 5.

A+

Avatar de l’utilisateur
Escroc
Membre Relatif
Messages: 259
Enregistré le: 04 Nov 2005, 21:30
Localisation: France

par Escroc » 26 Déc 2013, 23:09

Ah oui je vois, merci beaucoup!! cependant une dernière chose me chiffonne : quadl(@(x) mysinc(x, 5), -1, 1), ce x entre parenthèse est là pourquoi?
“La sévérité prévient plus de fautes qu'elle n'en réprime” N.Bonaparte

Benjamin
Membre Complexe
Messages: 2337
Enregistré le: 14 Avr 2008, 11:00

par Benjamin » 26 Déc 2013, 23:14

Il sert à spécifier le nom de la variable de ta fonction.

On aurait pu écrire @(toto) mysinc(toto, 5)

Ce x entre parenthèse et le x utilisé dans la ligne function y = mysinc(x,A) n'ont rien à voir.

De même, tu peux faire des fonctions anonymes de 2 ou 3 ou N variables avec @(var_1, var_2) var_1 + var_2.

Ceci évite de faire des .m pour chaque fonction qui tient en 1 ligne. Tu peux leur donner un nom (qui s'appelle un handle de fonction) que tu peux utiliser directement.

Exemple :
mysinc5 = @(y) mysinc(y,5);

quadl(mysinc5, -1, 1)

Je m'en sers assez souvent personnellement.

Avatar de l’utilisateur
Escroc
Membre Relatif
Messages: 259
Enregistré le: 04 Nov 2005, 21:30
Localisation: France

par Escroc » 26 Déc 2013, 23:24

Ok! encore merci pour toutes ces précisions :lol3:
“La sévérité prévient plus de fautes qu'elle n'en réprime” N.Bonaparte

Benjamin
Membre Complexe
Messages: 2337
Enregistré le: 14 Avr 2008, 11:00

par Benjamin » 26 Déc 2013, 23:28

De rien, avec plaisir ;)

PS : au passage, la fonction sinc existe déjà dans Matlab, et ta fonction n'est rien d'autre que A*sinc(x) :P

Avatar de l’utilisateur
Escroc
Membre Relatif
Messages: 259
Enregistré le: 04 Nov 2005, 21:30
Localisation: France

par Escroc » 26 Déc 2013, 23:48

En effet c'est bon à savoir ça!

J'en profite pour une dernière petite chose : le résultat de mon intégral est-il censé s'afficher lorsque j'appuie sur F5 ?

Car mis à part une série de valeurs qui s'affichent dans le command window, je n'ai rien d'autre!
“La sévérité prévient plus de fautes qu'elle n'en réprime” N.Bonaparte

Benjamin
Membre Complexe
Messages: 2337
Enregistré le: 14 Avr 2008, 11:00

par Benjamin » 26 Déc 2013, 23:55

Je ne comprends pas trop la question.

Quand tu tapes quadl(@(x) 5*sinc(x), -1, 1) puis entrée, il doit t'écrire un truc du genre
ans =
5.8949

Et ce résultat est le résultat de ton intégrale. Je ne sais pas trop ce que tu sais de matlab, mais ne pas oublier que matlab ne fait que des calculs numériques. Tu n'aurais pas de résultat sous forme de fraction, de type exacte, ou même de résultat littérale. Si tu veux ça, il faut passer à Mathematica par exemple.

Avatar de l’utilisateur
Escroc
Membre Relatif
Messages: 259
Enregistré le: 04 Nov 2005, 21:30
Localisation: France

par Escroc » 27 Déc 2013, 01:17

justement, quand j'appuis sur entrée, ou F5, je n'ai pas de ans= 9.5566....

Bien que je n'ai aucuns messages d'erreurs dans le command window!
“La sévérité prévient plus de fautes qu'elle n'en réprime” N.Bonaparte

Avatar de l’utilisateur
Escroc
Membre Relatif
Messages: 259
Enregistré le: 04 Nov 2005, 21:30
Localisation: France

par Escroc » 27 Déc 2013, 01:19

voici ce que j'ai entré dans l'environnement :

q=quadl(@(t)mysinc(t,5),-1,1);
“La sévérité prévient plus de fautes qu'elle n'en réprime” N.Bonaparte

Benjamin
Membre Complexe
Messages: 2337
Enregistré le: 14 Avr 2008, 11:00

par Benjamin » 27 Déc 2013, 03:00

Ok, le ";" inibe la sortie du résultat ;)

Enlève le ';' et tout ira bien :)

Le point virgule est utilisé dans les scripts pour éviter que la fenêtre soit "polluée" par toute les sorties de caluls intermédiaires !

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 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