Pfeffer 2017-10-03 23:11 采纳率: 50%
浏览 1380
已结题

我写的二分法,求方程的解,求大神优化和解释自己的疑问

class fun{
    // TODO Auto-generated method stub
    public static void Bisektion()
    {
    float ymiddle = (float)0.0;
    float yleft = (float)0.0;
    float yright = (float)0.0;

    float a = 0;
    float b = (float)3;


    for(int i = 0;i <=10000;i++)
    {

    float c = (float)((a+b)/2);

    float x = c;
     ymiddle =(float) Math.pow(x, 3)-3*x-3;    // 带入C, C 居于方程的中间
     yleft =(float) Math.pow(a, 3)-3*a-3; 
     yright =(float) Math.pow(b, 3)-3*b-3; 

     if (ymiddle*yleft>0) {
         a = c;
         if(i==10000)
         {
             System.out.println("Die Resultat:"+c);
         }
     }else {
         b = c;
         if(i==10000)
         {
             System.out.println("Die Resultat:"+c);
         }
     }
    }


    }
}
public class Bisektionsverfahren {

    public static void main(String[] args) {
    fun.Bisektion();
    }

}

上面是我写的程序,但是有一个东西完全没有思路,就是如何设置这个循环,尽可能达到double或者float值的极限呢?也就是能达到的最精确的值。

  • 写回答

1条回答

  • threenewbee 2017-10-04 00:53
    关注

    因为实际值在left和right的差之间,所以误差肯定小于left-right的绝对值。
    你现在是迭代i <=10000 次
    可以改为
    while (Math.Abs(yleft - yright) > 0.00001) //精度为0.00001
    {
    ....
    }
    而不限制迭代次数

    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配