資源簡介
java 求解非線性方程 二分法 牛頓法 弦截法
public class Binary {
static double m, n, jingdu;
static int flag = 0;
/**
* @param args
* 二分法
*/
public static double binary(double m, double n, double jingdu){
int i=0;
double x0,x1,x2,fx0,fx1,fx2;
do {
x1=m;x2=n;
fx1=x1*x1*x1-x1*x1-1;
fx2=x2*x2*x2-x2*x2-1;
}while(fx1*fx2>0);
do {
x0=(x1+x2)/2;
fx0=x0*x0*x0-x0*x0-1;
if((fx0*fx1)=jingdu);
System.out.println("用二分法共循環"+i+"次");
return x0;
}

代碼片段和文件信息
/**
?*?java?求解非線性方程?二分法牛頓法弦截法
?*?張方華
?*/
import?java.util.Scanner;
public?class?Binary?{
static?double?m?n?jingdu;
static?int?flag?=?0;
/**
?*?@param?args
?*?二分法
?*/
public?static?double?binary(double?m?double?n?double?jingdu){
int?i=0;
double?x0x1x2fx0fx1fx2;
?do?{
x1=m;x2=n;
fx1=x1*x1*x1-x1*x1-1;
fx2=x2*x2*x2-x2*x2-1;
?}while(fx1*fx2>0);
?do?{
x0=(x1+x2)/2;
fx0=x0*x0*x0-x0*x0-1;
if((fx0*fx1)<0)?{
x2=x0;
fx2=fx0;
}
else?{
x1=x0;
fx1=fx0;
}
i++;
?}while(Math.abs(fx0)>=jingdu);
?System.out.println(“用二分法共循環“+i+“次“);
return?x0;
}
/**
?*?@param?args
?*?牛頓法
?*/
public?static?double?newton(double?k?double?jingdu){??
int?i?=?0;
double?fdfxx0;
x?=?k;
do?{
x0?=?x;
f?=?x0*x0*x0-x0*x0-1;
df?=?3*x0*x0-2*x0;
x?=?x0-f/df;
i++;
}while((Math.abs(x-x0))>=jingdu);
System.out.println(“用牛頓法共循環“+i+“次“);
return?x0;
}
/**
?*?@param?args
?*?弦截法
?*/
?public?static?double?xianJie(double?zdouble?s?double?jingdu){
?int?i=0;
?double??x0x1fx1fx0xfx;
???????x0=z;
???????x1=s;
???????fx0=x0*x0*x0-x0*x0-1;
???????fx1=x1*x1*x1-x1*x1-1;
???????do?{
??????x=(x0*fx1-x1*fx0)/(fx1-fx0);
??????fx=x*x*x-x*x-1;
??????if(fx*fx0>0){??
???? fx0=fx;
x0=x;
i++;
??????}
??????else
x1=x;
???? ???i++;
}?while(Math.abs(fx)>=jingdu);
????System.out.println(“用弦截法共循環“+i+“次“);
return?x;
}
/**
?*?@param?args
?*?主函數
?*/
public?static?void?main(String[]?args)?{
boolean?flag1?=?true;
while(flag1){
Scanner?as?=?new?Scanner(System.in);
System.out.println(“-----------------------------------------------------“);
System.out.println(“-------------歡迎使用本程序求解非線性方程--------------“);
????????System.out.println(“---請選擇要選用的方法解方程x*x*x?+?x*x?-?10?=?0的解---“);
????????System.out.println(“--------------------1、二分法------------------------“);
????????System.out.println(“--------------------2、牛頓法------------------------“);
????????System.out.println(“--------------------3、弦截法------------------------“);
????????System.out.println(“--------------------退出請按0------------------------“);
????????System.out.println(“-----------------------------------------------------“);
????????flag=as.nextInt();
????????if(flag?==?0)?{
???????? flag1=false;
???????? System.out.println(“您已退出程序!歡迎下次使用。“);
????????}
????????if(flag?==?1){
???????? System.out.println(“請分別輸入左右區間mn和精度:“);
???????? m?=?as.nextDouble();
???????? n?=?as.nextDouble();
???????? jingdu?=?as.nextDouble();
???????? System.out.println(“非線性方程的解為:“+binary(mnjingdu));
????????}
????????if(flag?==?2){
???????? System.out.println(“請輸入牛頓的近似根x和精度值“);
???????? m?=?as.nextDouble();
???????? jingdu?=?as.nextDouble();
???????? System.out.println(“非線性方程的解為:“+newton(mjingdu));
????????}
????????if(flag?==?3){
???????? System.out.println(“
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3387??2010-11-25?20:20??解非線性方程\Binary.java
?????目錄??????????0??2010-11-25?20:21??解非線性方程
-----------?---------??----------?-----??----
?????????????????3387????????????????????2
評論
共有 條評論