Mathc initiation/Fichiers h : c24a5
Installer ce fichier dans votre répertoire de travail.
x_nwtn.h |
---|
/* --------------------------------- */
/* save as x_nwtn.h */
/* --------------------------------- */
pt2d newton_fxy(
int n,
double (*P_f)(double x, double y),
double (*P_g)(double x, double y),
pt2d p
)
{
int k;
double delta;
pt2d delta_p;
for(k=1; k<n; k++)
{
delta = fxy_x((*P_f),H,p) * fxy_y((*P_g),H,p)
-
fxy_x((*P_g),H,p) * fxy_y((*P_f),H,p);
delta_p.x = ( (-(*P_f)(p.x,p.y)) * fxy_y((*P_g),H,p)
-
(-(*P_g)(p.x,p.y)) * fxy_y((*P_f),H,p) )
/
delta;
delta_p.y = ( fxy_x((*P_f),H,p) * (-(*P_g)(p.x,p.y))
-
fxy_x((*P_g),H,p) * (-(*P_f)(p.x,p.y)) )
/
delta;
p.x += delta_p.x;
p.y += delta_p.y;
}
return(p);
}
/* --------------------------------- */
/* --------------------------------- */
pt2d p_newton_fxy(
int n,
double (*P_f)(double x, double y),
double (*P_g)(double x, double y),
pt2d p
)
{
int k;
double delta;
pt2d delta_p;
for(k=1; k<n; k++)
{
delta = fxy_x((*P_f),H,p) * fxy_y((*P_g),H,p)
-
fxy_x((*P_g),H,p) * fxy_y((*P_f),H,p);
delta_p.x = ( (-(*P_f)(p.x,p.y)) * fxy_y((*P_g),H,p)
-
(-(*P_g)(p.x,p.y)) * fxy_y((*P_f),H,p) )
/
delta;
delta_p.y = ( fxy_x((*P_f),H,p) * (-(*P_g)(p.x,p.y))
-
fxy_x((*P_g),H,p) * (-(*P_f)(p.x,p.y)) )
/
delta;
printf(" x%d\t\t=%+f\t\t y%d\t\t=%+f\n",k,p.x, k,p.y);
printf(" delta_p.x%d\t=%+f\t\t delta_p.y%d\t=%+f\n\n",
k,delta_p.x, k,delta_p.y);
p.x += delta_p.x;
p.y += delta_p.y;
}
printf(" x%d\t\t=%+f\t\t y%d\t\t=%+f\n\n",k,p.x, k,p.y);
return(p);
}
/* --------------------------------- */
/* --------------------------------- */
L'algorithme est simple : On a ce système d'équation, on utilise la méthode de cramer pour le résoudre :
|f_x f_y| x = -f |g_x g_y| y = -g
x0, y0 sont estimés par rapport à un graphe.
A chaque itération on produit les valeurs xn et yn.
deter =|f_x(x0,y0) f_y(x0,y0)| |g_x(x0,y0) g_y(x0,y0)| |-f(x0,y0) f_y(x0,y0)| xn = | | / deter |-g(x0,y0) g_y(x0,y0)| |f_x(x0,y0) -f(x0,y0)| yn = | | / deter |g_x(x0,y0) -g(x0,y0)| Puis x1 = x0 + xn et y1 = y0 + yn.
x1 et y1 deviennent les nouveaux x0 et y0 ...