Bonjour,
Je dois écrire un programme pour résoudre des équations différentielles du premier et du second ordre sur matlab, mais je n'y connais strictement rien, pourriez-vous m'aider s'il vous plait ?
Merci.
function PX = Lagrange_interpolate(x,y,X) n=size(x,2); m=size(X,2); [prodx mx]=meshgrid(x); prodx=prodx-mx;clear mx; prodx(1:n+1:n^2)=1; prodx=prod(prodx); prodx=repmat(prodx,1,m); X=reshape(repmat(X,n^2,1),n,n*m); x=repmat(x.',1,n*m); Xmx=X-x;clear x X; Xmx(reshape(repmat((1:n+1:n^2).',1,m)+repmat(n^2*(0:m-1),n,1),n*m,1))=1; PX=prod(Xmx)./prodx;clear Xmx prodx; y=repmat(y,1,m); PX=y.*PX;clear y; PX=reshape(PX,n,m); PX=sum(PX);
P=coefficients_Lagrange_interpolate(xi(1:3:24),yi(1:3:24)); integrale_polynom(P,-1,20)
function P = coefficients_Lagrange_interpolate(x,y) n=size(x,2); P=[ones(n,1) -x.']; P=repmat(P,[1 1 n]); P(1:2*n+1:2*n^2)=1; P(n+1:2*n+1:2*n^2)=0; P=fft(P,n,2); P=prod(P); P=ifft(P,[],2); P=squeeze(P); [x mx]=meshgrid(x); x=x-mx;clear mx; x(1:n+1:n^2)=1; x=y./prod(x); P=P*x.'; P=P.';
polyfit(x,f,1)
function fprime = compute_derivative(x,f) %% Décentré à droite %% Dérivée calculée pour x(1:end-1) % xp = circshift(x,[0 -1]); % fp = circshift(f,[0 -1]); % fprime = (fp(1:end-1)-f(1:end-1))./(xp(1:end-1)-x(1:end-1)); %% Décentré à gauche %% Dérivée calculée pour x(2:end) % xm = circshift(x,[0 1]); % fm = circshift(f,[0 1]); % fprime = (fm(2:end)-f(2:end))./(xm(2:end)-x(2:end)); %% Centré %% Dérivée calculée pour x(2:end-1) xp = circshift(x,[0 -1]); xm = circshift(x,[0 1]); fp = circshift(f,[0 -1]); fm = circshift(f,[0 1]); fprime = (fp(2:end-1)-fm(2:end-1))./(xp(2:end-1)-xm(2:end-1));
P=polyfit(xi,yi,size(xi,2)-1);
fprime=compute_derivative(xi,yi); plot(xi(2:end-1),fprime);
Vous n'aimez pas le lifting de Facebook ? Le site Mashable propose cinq étapes pour revenir à l'ancienne présentation du réseau social.
tout d'abord j'ai pas compris le but de me rendre vers un link de politesse.... Aurai-je manque de politesse en demandand de l'aide et en disant merci d'avane ?
Deuxiement merci scarabouche mais c'etait pas exactement ce que je voulais...
je voulais une methode de calculer le polynome interpolant ma fonction donee point par point, (24 points) et non les valeurs de ces points...
Une fois ce polynome est calcule, comment integrer ce polynome entre 2 bornes qui sont les bornes inferieur et superieur de xi, merci
Oh... le lien... t'en fais pas. C'est juste qu'à première lecture, ton message donnait ce genre d'impression : "Je veux ça, merci".
Mais je te l'accorde, c'est pas toujours facile de savoir comment une personne va interpréter ce qu'on écrit. Enfin bref... tout ça pour dire qu'un petit bonjour lors de ton tout premier message aurait atténué l'idée qu'on s'en faisait au premier abord. En tout cas, désolé d'avoir été un peu sec.
Pour ton problème, ce serait plus vite réglé avec un logiciel de calcul formel comme Maple peut-être. Peu importe...
Pour obtenir le polynôme d'interpolation de Lagrange, il faut multiplier des polynômes entre eux, et c'est là tout le problème, car la comme qui suit ne pose pas de souci.
Le produit de deux polynômes, c'est en fait le produit de convolution de deux vecteurs (vecteurs des coefficients de chaque polynôme). Le problème, c'est qu'apparemment la fonction conv n'a pas d'options pour convoler plus de deux vecteurs à la fois, ou alors je l'ai pas trouvé... Alors ça obligeait à faire le calcul avec une boucle. Utiliser Matlab pour faire des boucles, c'est un peu du gâchis, quand on peut éviter, les programmes tournent plus vite en bossant en matriciel. Du coup comme la convolution c'est rien d'autre qu'un produit dans le domaine de Fourier, je suis passé par une fft puis un ifft. Et il y a pas de boucle...
Le résultat est un vecteur ligne contenant les coefficients du polynôme d'interpolation de Lagrange. Comme d'hab, si P=an*X^n+...+a0, ils sont organisés comme ceci:
[an...a0].
Voilà...
Après, intégrer un polynôme entre deux bornes, c'est du programme de lycée.
A plus