请大神观摩
查看原帖
请大神观摩
1757147
hsl295931楼主2025/7/31 14:47
#include <iostream>
#include <iomanip>  // 用于控制输出格式
#include <cstring>  // 字符串操作库(虽然这里没用到)
using namespace std;

double x1,x2,a,b,c,d;  // 全局变量:x1,x2用于存储函数值,a,b,c,d是三次方程系数

// 定义三次多项式函数P(x)
double P(double x){
    return a * x * x * x + b * x * x + c * x + d;
}

int main(){
    double i,j,l,r,mid;  // 循环变量和二分法变量
    
    // 输入三次方程的系数
    cin>>a>>b>>c>>d;
    
    // 在区间[-100,100]内以步长1.0搜索根
    for(i = -100.00;i < 100.00;i += 1.0){
        x1 = P(i);      // 计算左端点的函数值
        x2 = P(i + 1);  // 计算右端点的函数值
        
        // 情况1:正好找到根
        if(x1 == 0) 
            cout<<fixed<<setprecision(2)<<i<<" ";  // 输出保留2位小数
        
        // 情况2:函数值异号,说明区间内有根
        else if(x1 * x2 < 0){
            l = i;  // 设置左边界
            r = i + 1;  // 设置右边界
            
            // 使用二分法精确求解根的位置
            for(j = 1;j <= 100000;j++){
                mid = (l + r) / 2;  // 计算中点
                
                // 根据中点函数值调整区间
                if(P(l) * P(mid) < 0) 
                    r = mid;  // 根在左半区间
                else 
                    l = mid;  // 根在右半区间
            }
            
            // 输出找到的根(保留2位小数)
            cout<<fixed<<setprecision(2)<<l<<" ";
        }
    }
    return 0;
}


这段代码实现了:

在[-100,100]区间内搜索三次方程的实根
使用二分法精确计算根的位置
输出保留2位小数的结果

算法原理:利用多项式函数在根附近会变号的特性,先找到可能有根的区间,再用二分法精确求解。

#include #include // 用于控制输出格式 #include // 字符串操作库(虽然这里没用到) using namespace std;

double x1,x2,a,b,c,d; // 全局变量:x1,x2用于存储函数值,a,b,c,d是三次方程系数

// 定义三次多项式函数P(x) double P(double x){ return a * x * x * x + b * x * x + c * x + d; }

int main(){ double i,j,l,r,mid; // 循环变量和二分法变量

// 输入三次方程的系数
cin>>a>>b>>c>>d;

// 在区间[-100,100]内以步长1.0搜索根
for(i = -100.00;i < 100.00;i += 1.0){
    x1 = P(i);      // 计算左端点的函数值
    x2 = P(i + 1);  // 计算右端点的函数值
    
    // 情况1:正好找到根
    if(x1 == 0) 
        cout<<fixed<<setprecision(2)<<i<<" ";  // 输出保留2位小数
    
    // 情况2:函数值异号,说明区间内有根
    else if(x1 * x2 < 0){
        l = i;  // 设置左边界
        r = i + 1;  // 设置右边界
        
        // 使用二分法精确求解根的位置
        for(j = 1;j <= 100000;j++){
            mid = (l + r) / 2;  // 计算中点
            
            // 根据中点函数值调整区间
            if(P(l) * P(mid) < 0) 
                r = mid;  // 根在左半区间
            else 
                l = mid;  // 根在右半区间
        }
        
        // 输出找到的根(保留2位小数)
        cout<<fixed<<setprecision(2)<<l<<" ";
    }
}
return 0;

}

这段代码实现了:

在[-100,100]区间内搜索三次方程的实根 使用二分法精确计算根的位置 输出保留2位小数的结果

算法原理:利用多项式函数在根附近会变号的特性,先找到可能有根的区间,再用二分法精确求解。

2025/7/31 14:47
加载中...