
f(x)=xex -1=0
x0=0.5附近的根,迭代终止条件|xk+1-xk|<10^6
(点击此处)下载源代码
import java.text.DecimalFormat;
public static void main(String[] args) {
Newton(0.5);
newNewton(0.5);
downNewton(0.5);
cutLine(0.5,0.6);}
public static void Newton(double x0){
System.out.println("Newton:");
DecimalFormat df = new DecimalFormat("#####0.00000000000");
double xn=x0;
double xnp;
double c=0;
int i=0;
System.out.println("x" + (i++) + "=" + df.format(x0));
while(true){
xnp=xn-((xn*(Math.pow(Math.E,xn))-1)/((xn+1)*(Math.pow(Math.E,xn))));
if((xnp-xn)>0){
c=(xnp-xn);
}else{
c=-(xnp-xn);
}
System.out.println("x" + (i++) + "=" + df.format(xnp));
if(c<Math.pow(10, -6))
break;
xn=xnp;
xnp=0;
}
System.out.println("差值=" + df.format(c) + " < 10^(-6)");
System.out.println("___________________________________");
}
public static void newNewton(double x0){
System.out.println("NewNewton:");
DecimalFormat df = new DecimalFormat("#####0.00000000000");
double xn=x0;
double xnp;
double M=((xn+1)*(Math.pow(Math.E,xn)));
double c=0;
int i=0;
System.out.println("x" + (i++) + "=" + df.format(x0));
while(true){
xnp=xn-((xn*(Math.pow(Math.E,xn))-1)/M);
if((xnp-xn)>0){
c=(xnp-xn);
}else{
c=-(xnp-xn);
}
System.out.println("x" + (i++) + "=" + df.format(xnp));
if(c<Math.pow(10, -6))
break;
xn=xnp;
xnp=0;
}
System.out.println("差值=" + df.format(c) + " < 10^(-6)");
System.out.println("___________________________________");
}
public static void downNewton(double x0){
System.out.println("DownNewton:");
DecimalFormat df = new DecimalFormat("#####0.00000000000");
double xn=x0;
double xnp;
double c=0;
int T=1;
double xk1;
double xk;
int i=0;
System.out.println("x" + (i++) + "=" + df.format(x0));
while(true){
xnp=xn-(1/T)*(((xn*(Math.pow(Math.E,xn))-1)/((xn+1)*(Math.pow(Math.E,xn)))));
if((xn*(Math.pow(Math.E,xn))-1)>0){
xk=(xn*(Math.pow(Math.E,xn))-1);
}else{
xk=-(xn*(Math.pow(Math.E,xn))-1);
}
if((xnp*(Math.pow(Math.E,xnp))-1)>0){
xk1=(xnp*(Math.pow(Math.E,xnp))-1);
}else{
xk1=-(xnp*(Math.pow(Math.E,xnp))-1);
}
if(xk1>xk){
T=T*2;
}else{
System.out.println("x" + (i++) + "=" + df.format(xnp));
System.out.println("下山因子为:"+T+" //~// 其中|F(X(k+1))|="+df.format(xk1)+" //~// 其中|F(Xk)|="+df.format(xk));
if((xnp-xn)>0){
c=(xnp-xn);
}else{
c=-(xnp-xn);
}
if(c<Math.pow(10, -6))
break;
xn=xnp;
xnp=0;
}
}
System.out.println("差值=" + df.format(c) + " < 10^(-6)");
System.out.println("___________________________________");
}
public static void cutLine(double x0,double x1){
System.out.println("CutLine:");
DecimalFormat df = new DecimalFormat("#####0.00000000000");
double xn=x0;
double xn2=x1;
double xnp;
double c=0;
int i=0;
System.out.println("x" + (i++) + "=" + df.format(x0));
System.out.println("x" + (i++) + "=" + df.format(x1));
while(true){
xnp=xn2-((xn2-xn)*((xn2*(Math.pow(Math.E,xn2))-1)/((xn2*(Math.pow(Math.E,xn2))-1)-(xn*(Math.pow(Math.E,xn))-1))));
if((xnp-xn2)>0){
c=(xnp-xn2);
}else{
c=-(xnp-xn2);
}
System.out.println("x" + (i++) + "=" + df.format(xnp));
if(c<Math.pow(10, -6))
break;
xn=xn2;
xn2=xnp;
xnp=0;
}
System.out.println("差值=" + df.format(c) + " < 10^(-6)");
System.out.println("___________________________________");
}
