关于#c语言#的问题:用弦截法求非线性方程23-42+3x-6=0在区间[0,3]的一个实根

用弦截法求非线性方程23-42+3x-6=0在区间[0,3]的一个实根,精度为10-6。

刚才那个写的有点错误,方程写错了,修改如下:

float f(float x)                    // 求 y 函数
{
    return 2*pow(x,3) - 4*pow(x,2)+3*x-6;
}

float newx(float x1, float x2)    // 求 x 的下一迭代值
{
    return x1-f(x1)*(x1-x2)/(f(x1)-f(x2));
}

float root(float x1, float x2)         // 求根函数
{
    float x, y, y1;
    y1 = f(x1);                        // 先固定(x1,y1),并不断调整(x2,y2)
    for(y = y1; fabs(y) >= 1e-6; ) // 循环求解,判断精度是否满足需求
    {
        x = newx(x1, x2);            // 下一迭代值 x
        y = f(x);                    // x 对应的 y 值

        if(y*y1 > 0)                // 如果新点(x,y)和(x1,y1)在 x 轴的同侧,则替换(x1,y1)
        {
            y1 = y;
            x1 = x;
        }
        else
        {
            x2 = x;                    
        }
    }
    return x;
}

int main()
{
    float x;

    x = root(0,3);

    printf("%.2f",x);
    
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632