Page 2 sur 2

Re: [C(++)] Interpolation Cubique.

Publié : 11 févr. 2010 22:38
par fef-FR
Voila pour ceux qui seraient intéressés :

Code : Tout sélectionner

#include <iostream>

using namespace std;

void interpolation(int x,double Y1,double Y2,double Y3,double Y4);

int main()
{	
	int x;
	double Y1,Y2,Y3,Y4;
	
	cout<<"Abcisse :";
	cin>>x;
	cout<<"Y1:";
	cin>>Y1;
	cout<<"Y2:";
	cin>>Y2;
	cout<<"Y3:";
	cin>>Y3;
	cout<<"Y4:";
	cin>>Y4;
	cout<<endl<<endl;
	
	interpolation(x,Y1,Y2,Y3,Y4);
	
	return 0;
}

void interpolation(int x,double Y1,double Y2,double Y3,double Y4)
{
	double a=(double)(Y4-Y3-Y1+Y2);//(Y2+Y4-Y1-Y3);
	double b=(double)(Y1-Y2-a);//(Y3-2*Y2-Y4);
	double c=(double)(Y3-Y1);//(Y3-Y1);
	double d=(double)(Y2);//(Y2);

	cout<<"f(x)=("<<a<<")(x-("<<x+1<<"))^3+("<<b<<")(x-("<<x+1<<"))^2+("<<c<<")(x-("<<x+1<<"))+"<<d<<endl;
}
Ce bout de code génère l'équation d'une courbe polynomiale de degré 3 qui passe par les points d'ordonnée Y2 et Y3 et tel que les tangentes en P2 et P3 passent respectivement par P1 et P4.
x correspond à l'abscisse du point P1.

Re: [C(++)] Interpolation Cubique.

Publié : 11 févr. 2010 22:41
par LB
Faire ça en Cpp, je soutiens ! Pourquoi pas franchement, à partir du moment où on y est à l'aise. Ça permet de faire quelque chose de puissant, rapide et surtout quelque chose de léger, interopérable et qui fonctionne (ou pas) indépendamment des caprices d'un logiciel mal foutu... (par exemple Maple :D).

Re: [C(++)] Interpolation Cubique.

Publié : 11 févr. 2010 23:05
par fakbill
Je suis d'accord pour le C++ suaf si on doit afficher des courbes ou des images.
Si on doit faire ça, on peut le faire en C++ avec qt et qwt mais ça reste long à programmer.
Le problème que ça me pose, c'est qu'ensuite on voit des gens qui font des calculs matriciels en C++ en codant eux même leur classe "matrix". C'est une perte de temps terrible.

fef-FR: Ta fonction "interpolation" est fausse. Je n'ai pas regardé les calculs mais tout ce que je vois, c'est que ça peut diviser par 0 et donc se planter. Tu vas me dire que ça me peut pas arriver dans ton cas? Certes mais c'est une mauvaise habitude que d'écrire des fonctions qui peuvent planter.

Re: [C(++)] Interpolation Cubique.

Publié : 11 févr. 2010 23:29
par fef-FR
Euh je vois pas la ou tu vois des divisions, mais bon. Tu confondrais pas avec les commentaires du style "//commentaire" ?

EDIT : Voila comme ça c'est mieux.

Code : Tout sélectionner

#include <iostream>

using namespace std;

void interpolation(int x,double Y1,double Y2,double Y3,double Y4);

int main()
{	
	int x;
	double Y1,Y2,Y3,Y4;
	
	cout<<"Abcisse :";
	cin>>x;
	cout<<"Y1:";
	cin>>Y1;
	cout<<"Y2:";
	cin>>Y2;
	cout<<"Y3:";
	cin>>Y3;
	cout<<"Y4:";
	cin>>Y4;
	cout<<endl<<endl;
	
	interpolation(x,Y1,Y2,Y3,Y4);
	
	return 0;
}

void interpolation(int x,double Y1,double Y2,double Y3,double Y4)
{
	double a=(double)(Y2+Y4-Y1-Y3);
	double b=(double)(2*Y1+Y3-2*Y2-Y4);
	double c=(double)(Y3-Y1);
	double d=(double)(Y2);

	cout<<"f(x)=("<<a<<")(x-("<<x+1<<"))^3+("<<b<<")(x-("<<x+1<<"))^2+("<<c<<")(x-("<<x+1<<"))+"<<d<<endl;
}

Re: [C(++)] Interpolation Cubique.

Publié : 12 févr. 2010 08:40
par fakbill
Ccertains jours je devrais me coucher plus tôi :mrgreen: