美文网首页玩味小白程序🐒
【入门】洛谷P1024:一元三次方程求解 两种解法

【入门】洛谷P1024:一元三次方程求解 两种解法

作者: 胜言_ | 来源:发表于2020-07-28 15:41 被阅读0次

解法一

在[-100,100]大区间中递进循环,由于根与根之差的绝对值>=1,即在间隔为1的前开后闭区间里最多有一个根,从[i,i+1]中二分查找符合零点定理的解(题目中的提示即为零点定理,这里的闭区间是为了最后一个数100这个特殊情况)。
二分查找,精度设为0.001(也就是(high-low)<0.001才二分结束,小数点后第三位是唯一确定的,这时候就可以唯一确定一个精度为0.01的解了)

#include <stdio.h>
#define e(x) (d + (x) * (c + (x) * (b + a * (x))))

int main() {
    double a, b, c, d, low, high, mid;
    int index, resNum = 0;

    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    for (index = -100; index < 100; index++) {
        low = index;
        high = index + 1;
        if (e(low) == 0) {  // 这里覆盖不到100这个数
            printf("%.2lf ",low);
            resNum++;
        } 
        else if (e(low)*e(high) < 0) {
            while ((high-low) >= 0.001 ) {  // 100这个特殊情况交由二分查找来解决
                mid = (low + high) / 2.0;
                if (e(low)*e(mid) <= 0) {
                    high = mid;
                } 
                else {
                    low = mid;
                }
            }
            printf("%.2lf ", low);
            resNum++;
        }
        if (resNum == 3) break; // 节约时间
    }

    return 0;
}

解法二

暴力轮询求解,通过小数点后两位锁定解所在的较小的一个范围,然后再次循环,间隔为0.0001,即可锁定精度为0.01的解。

#include <stdio.h>
#define e(x) (d + (x) * (c + (x) * (b + a * (x))))

int main() {
    double a, b, c, d, index_dec, index;
    int s = 0;

    scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
    for (index = -100; index < 100; index += 0.01) {
        if (e(index)*e(index + 0.01) <= 0) {
            for (index_dec = index; index_dec <= (index + 0.01); index_dec += 0.0001) {
                if (e(index_dec)*e(index_dec + 0.0001) <= 0) {
                    printf("%.2lf ", index_dec);
                    s++;
                    if (s == 3) {
                        break;  // 退出内层For循环
                        break;  // 退出外层For循环
                    }
                }
            }
        }
    }

    return 0;
}

\color{red}{|-Cheng FengPoLang- | - QianChengSiJin-|}

相关文章

  • 【入门】洛谷P1024:一元三次方程求解 两种解法

    解法一 在[-100,100]大区间中递进循环,由于根与根之差的绝对值>=1,即在间隔为1的前开后闭区间里最多有一...

  • 学子情缘

    记得刚上初二,数学进入方程求解的教学内容,如一元n次方程的求解,二元一次方程组的求解等。一元二次方程有公式法,有因...

  • 2018-12-08

    我们学习了几种方程,分式方程,一元一次方程,其实不难发现,这几种方程的求解殊途同归,都是要化成一元一次方程来进行求...

  • 弦振动方程的解法(分离变量法+行波法)

    弦振动方程的解法 微分方程基础 本文所言的方程基本上是微分方程,而非中学阶段所言的代数方程,微分方程的求解目标一般...

  • 一元二次方程的解法

    到目前为止,我们已经掌握了一元一次方程、二元一次方程组的解法,今天就一起探究一下一元二次方程的解法。 ...

  • 使用牛顿迭代法求解非线性方程的根

    牛顿法是一种近似求解非线性方程根的迭代算法。本文简要叙述该算法并使用MATLAB实现该算法求解一元非线性方程和多元...

  • 迭代思想

    求解一元高次方程的时候 ,用迭代法近似求解这类问题,梯度法,最小二乘法,牛顿迭代法。迭代法 用于 线性非线形方程组...

  • 微分方程-高阶微分方程

    高阶微分方程 对于高阶微分方程 一般没有普遍的解法,求解告诫微分方程的基本思想是降阶,通过变量变换的方法将方程(2...

  • 数学-第一集-论一元一次方程的解法

    方程,即含有未知数的等式。在此不多解释。在此,简主主要讲解一元一次方程的解法。 一元一次方程,顾名思义,即只含有一...

  • 解一元一次方程练习题,解方程的技巧,特殊方程的解法

    下面是解一元一次方程的相应练习题,包括一元一次方程的基本解法,以及特殊方程的技巧。有时间的同学可以做一做。 ①解方...

网友评论

    本文标题:【入门】洛谷P1024:一元三次方程求解 两种解法

    本文链接:https://www.haomeiwen.com/subject/qypfrktx.html