求大佬给提示 一道求方程的程序题目

图片说明

1.我比较困惑的是,为什么我能通过无限,求解到一个最精确的值,也就是说,正好是一个单精度数或者是双精度数
2. 出了二分法之外,难道还有其他方法吗

4个回答

方法有很多,而且二分法可能都不是最好的。
第一,你可以直接找到三次方程的通用求根公式,得到的值是最精确的,运行时间也是最短,百度一下就可以找到。
第二,用迭代法求解,方法也有多种,运行时间有长有短。参考一下数值计算之类书籍,比如《数值计算方法》,到图书馆借一本看看就知道怎么回事

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

(1)不可能精确,数值解法只能逼近
(2)还有牛顿迭代法,比二分法收敛更快

Pfeffer
Pfeffer 下面是我写的程序,但是有一个东西完全没有思路,就是如何设置这个循环,尽可能达到double或者float值的极限呢?也就是能达到的最精确的值。
2 年多之前 回复
 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值的极限呢?也就是能达到的最精确的值。

梯度下降吧,编写最简单。

Pfeffer
Pfeffer 上面是我写的程序,但是有一个东西完全没有思路,就是如何设置这个循环,尽可能达到double或者float值的极限呢?也就是能达到的最精确的值。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐