[C(++)] Interpolation Cubique.

fef-FR

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

Message par fef-FR » 11 févr. 2010 22:38

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.

Avatar de l’utilisateur
LB

Messages : 1059

Inscription : 09 juin 2008 14:14

Profil de l'utilisateur : Élève de lycée

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

Message par LB » 11 févr. 2010 22:41

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).
On peut dire que les fonctions convexes en dimension infinie et les fonctions continues en dimension finie sont d’une complexité similaire - Gilles Godefroy
http://perso.eleves.bretagne.ens-cachan.fr/~ldiet783/

Messages : 9686

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

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

Message par fakbill » 11 févr. 2010 23:05

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.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

fef-FR

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

Message par fef-FR » 11 févr. 2010 23:29

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;
}

Messages : 9686

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

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

Message par fakbill » 12 févr. 2010 08:40

Ccertains jours je devrais me coucher plus tôi :mrgreen:
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Répondre