资源简介

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


评论

共有 条评论