//z^3-1 float2Function(float2z){returncpow(z,3)-float2(1,0);//cpow is an exponential function for complex numbers}//3*z^2float2Derivative(float2z){return3*cmul(z,z);//cmul is a function that handles multiplication of complex numbers}
之后只需用给定函数实现牛顿法即可:
float2roots[3]=//Roots (solutions) of the polynomial{float2(1,0),float2(-.5,sqrt(3)/2),float2(-.5,-sqrt(3)/2)};colorcolors[3]=//Assign a color for each root{red,green,blue}Foreachpixel(x,y)onthetarget,do:{zx=scaledxcoordinateofpixel(scaledtolieintheMandelbrotXscale(-2.5,1))zy=scaledycoordinateofpixel(scaledtolieintheMandelbrotYscale(-2,1))float2z=float2(zx,zy);//z is originally set to the pixel coordinatesfor(intiteration=0;iteration<maxIteration;iteration++;){z-=cdiv(Function(z),Derivative(z));//cdiv is a function for dividing complex numbersfloattolerance=0.000001;for(inti=0;i<roots.Length;i++){float2difference=z-roots[i];//If the current iteration is close enough to a root, color the pixel.if(abs(difference.x)<tolerance&&abs(difference.y)<tolerance){returncolors[i];//Return the color corresponding to the root}}}returnblack;//If no solution is found}