这是一个例子,以x*x*x-2*x*x+8*x-16=0为例,两个开始点已经选取为-1和3 //这里以x*x*x-2*x*x+8*x-16=0为例 public class aa { static float x1=-1,x2=3; //选取的两个开始点,这两个点要保证f(x1),f(x2)符号相反 float x; //存结果
float f(float x) //求f(x) { float y; y = ((x-2)*x+8)*x-16; return y; } float xpoint(float x1,float x2)//求弦截点的坐标 { float x; x = (x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); return x; } float root(float x1,float x2)//求根 { float x,y,y1; y1 = f(x1); do{ x=xpoint(x1,x2); y=f(x); if(y*y>0) { y1=y; x1=x; } else x2=x; }while(Math.abs(y)>0.0001); return x; } public static void main(String[] args) { aa a = new aa(); a.x = a.root(a.x1,a.x2); System.out.print("The root of equation is "+a.x); } }
//这里以x*x*x-2*x*x+8*x-16=0为例
public class aa
{
static float x1=-1,x2=3; //选取的两个开始点,这两个点要保证f(x1),f(x2)符号相反
float x; //存结果
float f(float x) //求f(x)
{
float y;
y = ((x-2)*x+8)*x-16;
return y;
}
float xpoint(float x1,float x2)//求弦截点的坐标
{
float x;
x = (x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return x;
}
float root(float x1,float x2)//求根
{
float x,y,y1;
y1 = f(x1);
do{
x=xpoint(x1,x2);
y=f(x);
if(y*y>0)
{
y1=y;
x1=x;
}
else x2=x;
}while(Math.abs(y)>0.0001);
return x;
}
public static void main(String[] args)
{
aa a = new aa();
a.x = a.root(a.x1,a.x2);
System.out.print("The root of equation is "+a.x);
}
}
{
float y;
y = ((x-2)*x+8)*x-16;
return y;
}
楼上这个优化的好
import java.util.*;
import java.math.*; public class Test { float x1,x2,y1,y2,x;
static float a,b,c,d;
public static void main(String []args)
{
float x1,x2,y1,y2,x;
do{
System.out.println("please input two numbers:");
Scanner in = new Scanner(System.in);
x1 = in.nextFloat();
x2 = in.nextFloat(); System.out.print("input a:");
a = in.nextFloat();
System.out.print("input b:");
b = in.nextFloat();
System.out.print("input c:");
c = in.nextFloat();
System.out.print("input d:");
d = in.nextFloat();
y1 = f(x1);
y2 = f(x2); }while(y1*y2>=0);
x =root(x1,x2);
System.out.printf("A root of equation is %8.4f",x);
}
public static float f(float x){
float y; y=a*x*x*x+b*x*x+c*x+d;
return y;
} public static float root(float x1,float x2){
float y1,y,x;
y1=f(x1);
do
{
x=xpoint(x1,x2);
y=f(x);
if(y1*y>=0)
{
y1=y;
x1=x;
}
else
x2=x;
}while((Math.abs(y))>=0.0001);
return x;
} public static float xpoint(float x1,float x2){
float x;
x = (f(x2)*x1-f(x1)*x2)/(f(x2)-f(x1));
return x;
}
}
http://topic.csdn.net/u/20090503/16/ddc9018d-e9ab-4670-baa1-ed1bd93c1c8f.html?seed=2004985029
出处