Méthode numérique
+5
remy
Gaël
Mneric
|Laurent Maquet>
°Lindsay°
9 participants
cspweb forum :: Cours :: 2ème BAC :: 2ème BAC
Page 3 sur 4
Page 3 sur 4 • 1, 2, 3, 4
Re: Méthode numérique
comment qu'on fait? lol
parce que la c'est un polynome d'ordre 4...mais ceux qui se sont farci celui d'ordre 12 merci lol
parce que la c'est un polynome d'ordre 4...mais ceux qui se sont farci celui d'ordre 12 merci lol
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
quand ca devient long, tu peux aussi créer une fonction qui te remplira ton tableau comme il le faut en ne mettant juste que les "x initiaux". C'est du chipotage mais une fois que c'est fait tu es tranquille : si j'ai le courage de le faire je le mettrai, mais je promet rien lol.
Thibaut V.- Vertébré
-
Nombre de messages : 41
Age : 35
Localisation : Bastogne
Date d'inscription : 06/01/2010
Re: Méthode numérique
ifstream data;
data.open ("data.txt");
for (int j=0;j data>> x[j];
cout< }
j'ai tenté un truc comme ca pour aller les rechercher puis je ferais qlqch du genre A[i*n+j]=pow(x[j],N)
mais le truc c'est qu'il lit mon fichier en ligne >_< du coup il prend la première valeur de x puis la première de y...tu sais pas comment juste lui faire prendre les valeurs de la colonne de gauche?
data.open ("data.txt");
for (int j=0;j
cout<
j'ai tenté un truc comme ca pour aller les rechercher puis je ferais qlqch du genre A[i*n+j]=pow(x[j],N)
mais le truc c'est qu'il lit mon fichier en ligne >_< du coup il prend la première valeur de x puis la première de y...tu sais pas comment juste lui faire prendre les valeurs de la colonne de gauche?
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
Là comme ça je saurais pas dire... mais sinon, fais 2 txt différents (un avec tes x et un avec tes y)
Thibaut V.- Vertébré
-
Nombre de messages : 41
Age : 35
Localisation : Bastogne
Date d'inscription : 06/01/2010
Re: Méthode numérique
ifstream data;
data.open ("data.txt");
for (int j=0;j data>> x[j];
cout< }
for(int i=(N-1);i>=0;i--){
for (int j=(N-1);j>=0;j--){
A[j*N+i]=pow(x[j],(N-1));}}
j'ai fait ceci, ca ne va pas ^^et ca doit être une couille d'indice mais je vois pas ou, si tu as le temps et que tu vois d'où vient le problème merci ^^
data.open ("data.txt");
for (int j=0;j
cout<
for(int i=(N-1);i>=0;i--){
for (int j=(N-1);j>=0;j--){
A[j*N+i]=pow(x[j],(N-1));}}
j'ai fait ceci, ca ne va pas ^^et ca doit être une couille d'indice mais je vois pas ou, si tu as le temps et que tu vois d'où vient le problème merci ^^
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
j'ai vraiment besoin d'un coup de main, je sèche toujours sur ce fichier de proute, je rempli test1 avec les valeurs de mon equa diff puis j'aimerais aller les rechercher pour faire un fichier de valeurs et interpoler, voici ce que je fais:
ofstream outfile ;
outfile.open("test1.txt");
compute_yf(h,t0,tf,y0,p,eps,N,yf);
x=new double [N+1];
y=new double [p*(N+1)];
compute_yn(h,t0,tf,y0,p,N,x,y);
outfile <<"test"<<'\n'<<'\n';<==A PROSCRIRE >_<
for (int k=0;k<=N;k+=10){
outfile<<<'\t'<<<'\t'<<'\n';
}
outfile.close();
const int L=14;
const int P=100;
double xa[L];
double ya[L];
double z[P];
double w[P];
double g[L];
double dim;
ifstream data;
data.open("test1.txt");
for(int i=0;i
data >>xa[i]>> ya[i];
cout<<<'\t'<
}
data.close();
compute_gj(xa,ya,g,L);
dim=(xa[L-1]-xa[0])/P;
for(int k=0;k
z[k]=xa[0]+k*dim;
w[k]=cubicspline(xa,ya,g,L,z[k]);
}
ofstream out;
out.open("out.txt");
for (int n=0;n
out<<<'\t'<<<'\t'<<'\n';
}
out.close();
et il ne va même pas me rechercher les valeurs dans test1, je comprend pas pourquoi :'(
EDIT: BORDEL...je sais pas si ca peut être utile à quelqu'un ici...mais ne mettez pas de titre à vos fichiers texte >_< à cause du titre "test" dans le fichier, ca puait!
ofstream outfile ;
outfile.open("test1.txt");
compute_yf(h,t0,tf,y0,p,eps,N,yf);
x=new double [N+1];
y=new double [p*(N+1)];
compute_yn(h,t0,tf,y0,p,N,x,y);
outfile <<"test"<<'\n'<<'\n';<==A PROSCRIRE >_<
for (int k=0;k<=N;k+=10){
outfile<<<'\t'<<<'\t'<<'\n';
}
outfile.close();
const int L=14;
const int P=100;
double xa[L];
double ya[L];
double z[P];
double w[P];
double g[L];
double dim;
ifstream data;
data.open("test1.txt");
for(int i=0;i
data >>xa[i]>> ya[i];
cout<<<'\t'<
}
data.close();
compute_gj(xa,ya,g,L);
dim=(xa[L-1]-xa[0])/P;
for(int k=0;k
z[k]=xa[0]+k*dim;
w[k]=cubicspline(xa,ya,g,L,z[k]);
}
ofstream out;
out.open("out.txt");
for (int n=0;n
out<<<'\t'<<<'\t'<<'\n';
}
out.close();
et il ne va même pas me rechercher les valeurs dans test1, je comprend pas pourquoi :'(
EDIT: BORDEL...je sais pas si ca peut être utile à quelqu'un ici...mais ne mettez pas de titre à vos fichiers texte >_< à cause du titre "test" dans le fichier, ca puait!
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
oui thibaut, si tu pouvais me dire comment tu ferais ça ce serait cool...parce que je nage complétement dans les indices j'ai torp du mal avec ca >_< demain je veux une équadiff à résoudre lol ca, ca va ^^
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
- Code:
int main()
{
ifstream f;
f.open("data.txt");
int N=4;
double* A = new double[(N+1)*(N+1)];
for (int i=0 ; i<5 ; i++){
f >> A[i*(N+1)];
}
for(int i=0;i<N+1;i++){
for (int j=N;j>=0;j--){
A[i*(N+1)+j]=pow(A[i*(N+1)],N-j);
}
}
for(int i=0;i<N+1;i++){
for (int j=0;j<N+1;j++){
cout << A[i*(N+1)+j] << "\t\t";
}
cout << endl;
}
cout.flush();
return 0;
}
Il faut mettre les valeurs de x dans data.txt
remy- Humain
-
Nombre de messages : 106
Age : 33
Date d'inscription : 10/07/2008
Re: Méthode numérique
Parfait, merci!
Pour ceux que ca intéresse, j'ai résolu le questionnaire posé en septembre 09 (version physiciens). A priori, ca a l'air correct (Si quelqu'un venait à remarquer qu'il contient des erreurs, merci de le signaler )
pour le main :
Et voici pour la modification de Simpson :
Pour ceux que ca intéresse, j'ai résolu le questionnaire posé en septembre 09 (version physiciens). A priori, ca a l'air correct (Si quelqu'un venait à remarquer qu'il contient des erreurs, merci de le signaler )
pour le main :
- Code:
#include
#include
#include
#include
#include "integrator.h"
#include "jacobi.h"
using namespace std;
double f(double x, int i, int j)
{
return (pow(x,i-1)*exp(-x*x/j)+pow(x,j-1)*exp(-x*x/i)); // définition fonction
}
void afficher(double matr[], int C, int L) //afficheur de matrice
{
for(int i=0; i
{
for(int j=0; j
{
cout << setprecision(5) <<<<'\t';
}
cout << endl;
}
}
void main()
{
const int N=5; //dimension de la matrice
double matrice[N*N];
double valpropres [N];
double vectpropre [N*N];
for (int i=0; i
{
for (int j=0; j
{
matrice[i*N + j]=integrate_simps(f,i+1,j+1,0.,10.,1E-7);
}
}
cout << "Matrice A de dimension "<< N<< " "<<
afficher(matrice,N,N);
cout <<<<"Valeurs propres de la matrice A:"<<
eigensystem_jacobi(matrice,valpropres,vectpropre,N,1E-7); //Calcul des valeurs propres
afficher(valpropres,N,1);
while(!_kbhit());
}
Et voici pour la modification de Simpson :
- Code:
#include
#include
#include
using namespace std;
double integrate_simps(double (*f)(double, int, int),int m, int n, double a,double b,double eps){
double I,S=0.;
double x,s,h;
int i=1;
double oldI;
double oldS;
I=(b-a)*((f(a,m,n)/2.)+(f(b,m,n)/2.));
do{
i++;
oldI=I;
oldS=S;
h=(b-a)/(double)(pow(2.,double(i-1)));
s=0.;
x=a+h;
for(int k=0;k
{
s+= f(x,m,n);
x+= 2.*h;
}
I=0.5*I+h*s;
S=(4./3.*I)-(1./3.*oldI);
}while(fabs(oldS-S)>eps);
return S;
}
Thibaut V.- Vertébré
-
Nombre de messages : 41
Age : 35
Localisation : Bastogne
Date d'inscription : 06/01/2010
Re: Méthode numérique
ifstream data;
data.open ("data.txt");
for (int i=0;i data>> x[i];
}
for(int i=0;i for (int j=0;j
A[i*N+j]=pow(x[i],(N-1)-j);
}}
la remplir à l'endroit marchait aussi, je sais pas pourquoi je me suis pris la tête à commencer par la fin >-< j'avais juste un soucis pour l'exposant, merci rémy!
data.open ("data.txt");
for (int i=0;i
}
for(int i=0;i
A[i*N+j]=pow(x[i],(N-1)-j);
}}
la remplir à l'endroit marchait aussi, je sais pas pourquoi je me suis pris la tête à commencer par la fin >-< j'avais juste un soucis pour l'exposant, merci rémy!
Dernière édition par °Lindsay° le Mer 20 Jan - 20:46, édité 1 fois
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
merci!! ^^
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
quequ'un a une idée de comment trouver nu et sigma dans la question des géométrologues de cette année? (7 janvier 2010)... et pour vérifier qu'elle est normalisée, vous prenez p(nu0,sigma0,x) ? ou l'autre? et sur quel intervalle?
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
Il suffit d'intégrer ce qu'il est mis, tu touves mu directement puis sigma par un petit calcul, je vois pas où est le problème
Le seul truc c'est de remplacer l'infini par une valeur suffisament grande. Ce que ce ferais, c'est remplacer l'infini par des valeurs de plus en plus grande jusqu'au temps que l'intégrale ne change pas (à la précision demandée)
celle donnée explicitement, toute densité de probabilité doit être égale à 1ou l'autre?
Le seul truc c'est de remplacer l'infini par une valeur suffisament grande. Ce que ce ferais, c'est remplacer l'infini par des valeurs de plus en plus grande jusqu'au temps que l'intégrale ne change pas (à la précision demandée)
remy- Humain
-
Nombre de messages : 106
Age : 33
Date d'inscription : 10/07/2008
Re: Méthode numérique
Le truc des nombres premiers (phys sept 09)
- Code:
#include <iostream>
#include "math.h"
using namespace std;
void eratosthenes(bool prime[], int n){
for (int i=0 ; i<n ; i++){
prime[i] = true;
}
prime[0] = false;
int multiple;
for (int i=2 ; i<n ; i++){
for (multiple = i*i ; multiple<n ; multiple += i){
for (int j=0 ; j<n ; j++){
if (multiple == j){
prime[j] = false;
}
}
}
}
}
bool isPrime (int n){
bool estPremier = true;
if (n%2 == 0){
estPremier = false;
}
int diviseur = 1;
do{
diviseur += 2;
if(n%diviseur == 0){
estPremier = false;
}
} while(diviseur < sqrt(n));
if (n==2 | n==3){
estPremier = true;
}
return estPremier;
}
int main()
{
int N=1001;
bool* tab = new bool[N];
eratosthenes(tab,N);
for (int i=0 ; i<N ; i++){
if (isPrime(i)){
cout << i << " ";
}
if (tab[i]){
cout << i << endl;
}
}
return 0;
}
remy- Humain
-
Nombre de messages : 106
Age : 33
Date d'inscription : 10/07/2008
Re: Méthode numérique
le truc c'est que lorsque je prend des valeurs vraiment très grandes nu et sigma changent (logique) et tendent vers 0 :s
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
Il faut prendre une précision supérieure à 10^-5 pour calculer les intégrales et tomber sur un truc plausible, je sais pas trop pourquoi
mu = 3,5
sigma = 3,1
mu = 3,5
sigma = 3,1
remy- Humain
-
Nombre de messages : 106
Age : 33
Date d'inscription : 10/07/2008
Re: Méthode numérique
ha oui lindsay tu parlais d'interpoler les solutions de l'équadiff
mais l'énoncé c'est :
Vérifier la solution avec Mathematica
Interpoler la solution pour 0 < t < 30.
donc je crois que c'est avec mathematica qu'on doit interpoler
mais l'énoncé c'est :
Vérifier la solution avec Mathematica
Interpoler la solution pour 0 < t < 30.
donc je crois que c'est avec mathematica qu'on doit interpoler
remy- Humain
-
Nombre de messages : 106
Age : 33
Date d'inscription : 10/07/2008
Re: Méthode numérique
pour ceux que ça interesse, nous avons eu une équation différentielle avec juste un if dedans comme le problème de la fusée ou un programme à faire qui calcule des nombres complexes...
et l'oral? ca donne quoi?
et l'oral? ca donne quoi?
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
L'oral, il est très gentil.
Tu es dans une classe avec tous les autres, lui est dans la pièce à coté. Tu tires une question du style qu'est ce qu'une spline cubique, quelles sont ses propriétés comment peut on les calculer?
Tu grattes un max sur papier, tu vas le voir, il prend ta feuille et il lit. S'il manque un truc ou quoi il te pose une question, si tu ne sais pas il te renvoie un peu chercher. Donc pas d'inquiétude, mais c'est un oral où tu écris bcp
Pas d'équation différentielle couplée? Juste un if si tu dépasses une limite en t? Les fonctions à poser n'étaient pas trop compliquées?
Tu es dans une classe avec tous les autres, lui est dans la pièce à coté. Tu tires une question du style qu'est ce qu'une spline cubique, quelles sont ses propriétés comment peut on les calculer?
Tu grattes un max sur papier, tu vas le voir, il prend ta feuille et il lit. S'il manque un truc ou quoi il te pose une question, si tu ne sais pas il te renvoie un peu chercher. Donc pas d'inquiétude, mais c'est un oral où tu écris bcp
Pas d'équation différentielle couplée? Juste un if si tu dépasses une limite en t? Les fonctions à poser n'étaient pas trop compliquées?
Gaël- Humain
-
Nombre de messages : 119
Age : 33
Date d'inscription : 24/01/2009
Re: Méthode numérique
non ...enfin je pense...j'suis pas sûre d'avoir réussi ^^ c'était bob l'éponge qui saute du toit de sa maison sur un trampoline (donc une équation de chute libre avec frottement de stockes) et qd il arrive sur le trampoline bah il rebondit donc il rajoute la force de rappel du ressort tant que z est négatif, donc, je pense (de nouveau pas sure ^^) que ds le if bah il fallait mettre de si z(t) est positif ya juste léqua diff avec stockes et la chute libre, et si z(t) est négatif celle avec la force du ressort, mais c'était di aussi qu'il subissait la force du ressort durant tout le temps où z est négatif, donc mm pas à réfléchir aux conditions
par contre le truc des complexes, je me suis arrêtée dans la lecture de l'énoncé à "générer une fonction qui calcul des nombres complexes" ^^
par contre le truc des complexes, je me suis arrêtée dans la lecture de l'énoncé à "générer une fonction qui calcul des nombres complexes" ^^
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
exam.cpp
[code]// Examen 21 janvier 2010
#include
#include
#include
#include "math.h"
#include "complex.h"
#include "rungekutta.h"
using namespace std;
double sys(int i, double x, const double y[]){
double m=0.150,g=9.81,beta=0.05,k=100;
switch(i){
case 0 :
return y[1];
break;
case 1 :
if (y[0]>0){
return -g-(beta/m)*y[1];
}
else{
return -g-(beta/m)*y[1]-(k/m)*y[0];
}
break;
}
}
void question1(){
int p, N;
double *y0, *yf, *x, *y;
double x0, xf, eps;
ofstream f;
p=2;
x0=0.;
xf=30.;
y0 = new double[p];
y0[0]=15.;
y0[1]=0.;
yf=new double[p];
eps=1E-2;
compute_yf(sys, x0, xf, y0, p, eps, N, yf);
x=new double [N+1],y=new double [p*(N+1)];
compute_yn(sys, x0, xf, y0, p, N, x, y);
f.open("output_spongebob.txt");
for (int i=0 ; i
f
[code]// Examen 21 janvier 2010
#include
#include
#include
#include "math.h"
#include "complex.h"
#include "rungekutta.h"
using namespace std;
double sys(int i, double x, const double y[]){
double m=0.150,g=9.81,beta=0.05,k=100;
switch(i){
case 0 :
return y[1];
break;
case 1 :
if (y[0]>0){
return -g-(beta/m)*y[1];
}
else{
return -g-(beta/m)*y[1]-(k/m)*y[0];
}
break;
}
}
void question1(){
int p, N;
double *y0, *yf, *x, *y;
double x0, xf, eps;
ofstream f;
p=2;
x0=0.;
xf=30.;
y0 = new double[p];
y0[0]=15.;
y0[1]=0.;
yf=new double[p];
eps=1E-2;
compute_yf(sys, x0, xf, y0, p, eps, N, yf);
x=new double [N+1],y=new double [p*(N+1)];
compute_yn(sys, x0, xf, y0, p, N, x, y);
f.open("output_spongebob.txt");
for (int i=0 ; i
f
Dernière édition par remy le Mer 2 Juin - 23:30, édité 1 fois
remy- Humain
-
Nombre de messages : 106
Age : 33
Date d'inscription : 10/07/2008
Re: Méthode numérique
cool j'ai le même graphique que toi ...oui la première question à 9h j'avais fini,mais je me suis dit que c'était pas possible alors j'ai fixé mon écran jusqu'à 11h lol
°Lindsay°- Etudiant en Physique
-
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008
Re: Méthode numérique
champion rémy merci
Gaël- Humain
-
Nombre de messages : 119
Age : 33
Date d'inscription : 24/01/2009
Re: Méthode numérique
Moi qui m'étais dit que si y avait un exo sur les équa diff, je le faisais pas, ben je me suis surpris =D
Je l'ai bouclé après deux heures et demi, en trainant.
(j'ai eu le loisir de dessiner ma courbe aux couleurs de Patrick et de remarquer qu'une "pseudo-période" de cette dernière rappelait étrangement la forme de la tête de Patrick lui-même =))
Donc si les exos de demain sont du même calibre, y a pas vraiment d'inquiétude à avoir. "Bêtement" savoir utiliser son programme.
Ah oui et, coup classique, attention aux unités.
En ce qui concerne la théorie : Finalement, il est insistant sur les démonstrations mathématiques ou pas ?
Je l'ai bouclé après deux heures et demi, en trainant.
(j'ai eu le loisir de dessiner ma courbe aux couleurs de Patrick et de remarquer qu'une "pseudo-période" de cette dernière rappelait étrangement la forme de la tête de Patrick lui-même =))
Donc si les exos de demain sont du même calibre, y a pas vraiment d'inquiétude à avoir. "Bêtement" savoir utiliser son programme.
Ah oui et, coup classique, attention aux unités.
En ce qui concerne la théorie : Finalement, il est insistant sur les démonstrations mathématiques ou pas ?
Ced.- Psychologue
-
Nombre de messages : 4
Date d'inscription : 17/01/2010
Page 3 sur 4 • 1, 2, 3, 4
cspweb forum :: Cours :: 2ème BAC :: 2ème BAC
Page 3 sur 4
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|