C语言入门:原来代码也能解方程,而且这么简单!!

#include <stdio.h>
#include <math.h>

int main()

    double a, b, fa, fb, x, fx; // 定义双精度浮点型变量a、b、fa、fb、x、fx

    printf("请输入两个数字"); // 提示用户输入两个数字
    scanf("%lf%lf", &a, &b); // 从用户输入中读取两个数字,并赋值给a和b

    fa = a * a * a - 6 * a - 1; // 计算函数f(a)的值,其中f(x) = x^3 - 6x - 1
    fb = b * b * b - 6 * b - 1; // 计算函数f(b)的值,其中f(x) = x^3 - 6x - 1

    if (fa * fb < 0) // 如果f(a)和f(b)的乘积小于0,即f(a)和f(b)异号
    {   
        while (fabs(fa - fb) >= 1e-4) // 当f(a)和f(b)的差的绝对值大于等于 1e-4 时循环执行以下操作
        {
            x = (a + b) / 2; // 取a和b的中点作为新的近似解x
            fx = x * x * x - 6 * x - 1; // 计算函数f(x)的值,其中f(x) = x^3 - 6x - 1

            if (fx * fa > 0) // 如果f(x)和f(a)的乘积大于0,即f(x)和f(a)同号
            {
                a = x; // 更新a为新的近似解x
                fa = a * a * a - 6 * a - 1; // 计算函数f(a)的值,其中f(x) = x^3 - 6x - 1
            }
            else 
            {
                b = x; // 更新b为新的近似解x
                fb = b * b * b - 6 * b - 1; // 计算函数f(b)的值,其中f(x) = x^3 - 6x - 1
            }

            printf("%f\n", x); // 输出每次迭代得到的近似解x
        }  
    }
    else 
    {
        printf("error"); // 如果f(a)和f(b)的乘积不小于0,输出错误信息
    }
}

是不是发现好像一下子看不懂,早猜到了,下面让我来具体讲解一下:

本文使用了“二分法”来解方程,流程为:

       对于用户的输入:不能随便输入,首先根据方程本身,判断出能让方程结果小于0和大于0的两个变量a和b(用肉眼或直觉来判断,或者稍微带几个值进去)。一般情况下:令a=0,可以让方程结果y小于0,令b=1,令x=0,可以让方程结果y大于0。

      // 这样做的目的是:让近似解出现在a和b的中间,方便“二分法”的计算。

       对于结果的输出

       1. 通过用户输入获取两个数字a和b,然后计算函数f(a)和f(b)的值。如果f(a)和f(b)异号(乘积小于0),则进入循环。

       2. 在每一次循环中计算a和b的中点x,并计算函数f(x)的值。

       3. 根据f(x)和f(a)的乘积的符号,更新a或b的值为x。如果f(x)小于0,则保留f(x)和f(b),并用x的值代替a的值;如果f(x)大于0,则保留f(a)和f(x),并用x的值代替b的值。并更新对应的函数值fa或fb。(其实就是保证近似解x的函数值,它的左边函数值要小于0,右边函数值要大于0

       4. 循环直到f(a)和f(b)的差的绝对值小于1e-4,即找到了方程的近似解。(总不能一直循环下去吧,找到个近似解就行了,真实解估计要循环一辈子了)

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值