
maurice a écrit:J'ai modifié le script pour faire apparaitre les calculs :
- Code: Tout sélectionner
//Fonction étudiée et ses zéros
pair f(pair z) {return z^5-1;}
pair fprime(pair z) {return 5*z^4;}
pair[] racine;
racine[0]=(-0.809,0.588);
racine[1]=(0.309,0.951);
racine[2]=(1,0);
racine[3]=(0.309,-0.951);
racine[4]=(-0.809,-0.588);
//Coloration des solutions
void newton(pair c, pair[] racine, pair f(pair z), pair fprime(pair z), real r, int count=50) {
int i=0;
pair z=c;
do {
++i;
z=z-(f(z)/fprime(z));
write("Re(z)"+string(z.x));
write("Im(z)"+string(z.y));
} while (length(z-racine[0])>r && length(z-racine[1])>r && length(z-racine[2])>r && length(z-racine[3])>r && length(z-racine[4])>r && i<count);
pen p;
real step=0.01;
path sq=scale(step)*unitsquare;
if (length(z-racine[0])<=r) {p=(i/count)*green;
//filldraw(shift(z.x,z.y)*sq,p,p);}
write("z0="+string(length(z)));}
else {
if (length(z-racine[1])<=r){p=(i/count)*red;
//filldraw(shift(z.x,z.y)*sq,p,p);}
write("z1="+string(length(z)));}
else {
if (length(z-racine[2])<=r) {p=(i/count)*blue;
//filldraw(shift(z.x,z.y)*sq,p,p);}
write("z2="+string(length(z)));}
else {
if (length(z-racine[3])<=r) {p=(i/count)*yellow;
//filldraw(shift(z.x,z.y)*sq,p,p);}
write("z3="+string(length(z)));}
else {
if (length(z-racine[4])<=r) {p=(i/count)*orange;
//filldraw(shift(z.x,z.y)*sq,p,p);}
write("z4 = "+string(length(z)));}
else //filldraw(shift(z.x,z.y)*sq,black,black);
write("aucun"+string(length(z)));
}
}
}
}
}
//
real r=0.1;
real step=.01;
real xmin=-1.5, xmax=1.5;
real ymin=-1, ymax=1;
real x=xmin, y=ymin;
int xloop=round((xmax-xmin)/step);
int yloop=round((ymax-ymin)/step);
for(int i=0; i < xloop; ++i) {
for(int j=0; j < yloop; ++j) {
if((x,y)!=(0,0)) {
newton((x,y),racine,f,fprime,r,30);}
y += step;
}
x += step;
y=ymin;
}

[maurice@localhost ~]$ asy -vv
Using configuration directory /home/maurice/.asy
Welcome to Asymptote version 2.00 (to view the manual, type help)
cd /home/maurice
Loading plain from /usr/local/share/asymptote/plain.asy
Including plain_constants from /usr/local/share/asymptote/plain_constants.asy
Loading version from /usr/local/share/asymptote/version.asy
Including plain_strings from /usr/local/share/asymptote/plain_strings.asy
Including plain_pens from /usr/local/share/asymptote/plain_pens.asy
Including plain_paths from /usr/local/share/asymptote/plain_paths.asy
Including plain_filldraw from /usr/local/share/asymptote/plain_filldraw.asy
Including plain_margins from /usr/local/share/asymptote/plain_margins.asy
Including plain_picture from /usr/local/share/asymptote/plain_picture.asy
Loading simplex from /usr/local/share/asymptote/simplex.asy
Including plain_Label from /usr/local/share/asymptote/plain_Label.asy
Including plain_shipout from /usr/local/share/asymptote/plain_shipout.asy
Including plain_xasy from /usr/local/share/asymptote/plain_xasy.asy
Including plain_arcs from /usr/local/share/asymptote/plain_arcs.asy
Including plain_boxes from /usr/local/share/asymptote/plain_boxes.asy
Including plain_markers from /usr/local/share/asymptote/plain_markers.asy
Including plain_arrows from /usr/local/share/asymptote/plain_arrows.asy
Including plain_debugger from /usr/local/share/asymptote/plain_debugger.asy
>
Re(z)-3.12614582236207e+58
Im(z)-3.90525278483203e+58
essai.asy: 17.7: runtime: Exception en point flottant (core dumped)
filldraw(shift(z.x,z.y)*sq,p,p)
filldraw(shift(c)*sq,p,p)
par
qui a pour racines 1, i, -1, -i.//Méthode de Newton avec Asymptote 1.98
//Taille de l'image
size(8cm,0);
//Fonction étudiée et ses zéros
pair f(pair z) {return z^4-1;}
pair fprime(pair z) {return 4*z^3;}
pair[] racine;
//racine[0]=(-0.809,0.588);
//racine[1]=(0.309,0.951);
//racine[2]=(1,0);
//racine[3]=(0.309,-0.951);
//racine[4]=(-0.809,-0.588);
racine[0]=(1,0);
racine[1]=(0,1);
racine[2]=(-1,0);
racine[3]=(0,-1);
//Coloration des solutions
void newton(pair c, pair[] racine, pair f(pair z), pair fprime(pair z), real r, int count=50) {
int i=0;
pair z=c;
do {
++i;
z=z-(f(z)/fprime(z));
} while (length(fprime(z))>r && length(z-racine[0])>r && length(z-racine[1])>r && length(z-racine[2])>r && length(z-racine[3])>r);
// && length(z-racine[4])>r && i<count);
pen p;
real step=0.01;
path sq=scale(step)*unitsquare;
if (length(z-racine[0])<=r) {p=(1-i/count)*green;
filldraw(shift(c)*sq,p,p);}
else {
if (length(z-racine[1])<=r){p=(1-i/count)*red;
filldraw(shift(c)*sq,p,p);}
else {
if (length(z-racine[2])<=r) {p=(1-i/count)*blue;
filldraw(shift(c)*sq,p,p);}
else {
if (length(z-racine[3])<=r) {p=(1-i/count)*yellow;
filldraw(shift(c)*sq,p,p);}
else {
//if (length(z-racine[4])<=r) {p=(i/count)*orange;
// filldraw(shift(z.x,z.y)*sq,p,p);}
//else
filldraw(shift(c)*sq,black,black);
}
}
}
}
}
//
real r=0.1;
real step=.01;
real xmin=-1.5, xmax=1.5;
real ymin=-1, ymax=1;
real x=xmin, y=ymin;
int xloop=round((xmax-xmin)/step);
int yloop=round((ymax-ymin)/step);
for(int i=0; i < xloop; ++i) {
for(int j=0; j < yloop; ++j) {
if((x,y)!=(0,0)) {
newton((x,y),racine,f,fprime,r,30);}
y += step;
}
x += step;
y=ymin;
}
toujours le core dumped.maurice a écrit:Comme cela, ça fonctionne et j'obtiens ce que je voulais :
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- size(8cm,0);
- pair f(pair z) {return z^4-1;}
- pair fprime(pair z) {return 4*z^3;}
- pair[] racine;
- racine[0]=(1,0);
- racine[1]=(0,1);
- racine[2]=(-1,0);
- racine[3]=(0,-1);
- void newton(pair c, pair[] racine, pair f(pair z), pair fprime(pair z), real r, int count=50) {
- int i=0;
- pair z=c;
- do {
- ++i;
- z=z-(f(z)/fprime(z));
- } while (length(fprime(z))>r && length(z-racine[0])>r && length(z-racine[1])>r && length(z-racine[2])>r && length(z-racine[3])>r);
- pen p;
- real step=0.01;
- path sq=scale(step)*unitsquare;
- if (length(z-racine[0])<=r) {p=(1-i/count)*green;
- filldraw(shift(c)*sq,p,p);}
- else {
- if (length(z-racine[1])<=r){p=(1-i/count)*red;
- filldraw(shift(c)*sq,p,p);}
- else {
- if (length(z-racine[2])<=r) {p=(1-i/count)*blue;
- filldraw(shift(c)*sq,p,p);}
- else {
- if (length(z-racine[3])<=r) {p=(1-i/count)*yellow;
- filldraw(shift(c)*sq,p,p);}
- else {
- filldraw(shift(c)*sq,black,black);
- }
- }
- }
- }
- }
- real r=0.1;
- real step=.01;
- real xmin=-1.5, xmax=1.5;
- real ymin=-1, ymax=1;
- real x=xmin, y=ymin;
- int xloop=round((xmax-xmin)/step);
- int yloop=round((ymax-ymin)/step);
- for(int i=0; i < xloop; ++i) {
- for(int j=0; j < yloop; ++j) {
- if((x,y)!=(0,0)) {
- newton((x,y),racine,f,fprime,r,30);}
- y += step;
- }
- x += step;
- y=ymin;
- }
-

et pas sur d'autres.length(z)<realMax^(1/6)
Retourner vers Les demandes d'aide
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité