C++ 分差法

C++ 分差法,c++,C++,我的除法代码有问题。实际上,这是两个问题,如下所示: 如果输入1或2个数据点,它工作正常,但如果 输入3个或更多数据点,结果将是错误的 我希望输出的形式如下: How many data points will be entered?: 5 Enter x00: 1.0 Enter y00: 0.7651977 Enter x01: 1.3 Enter y01: 0.6200860 Enter x02: 1.6 Enter y02: 0.4554022 Enter x03: 1.9 Enter

我的除法代码有问题。实际上,这是两个问题,如下所示:

  • 如果输入1或2个数据点,它工作正常,但如果 输入3个或更多数据点,结果将是错误的
  • 我希望输出的形式如下:

    How many data points will be entered?: 5
    Enter x00: 1.0
    Enter y00: 0.7651977
    Enter x01: 1.3
    Enter y01: 0.6200860
    Enter x02: 1.6
    Enter y02: 0.4554022
    Enter x03: 1.9
    Enter y03: 0.2818186
    Enter x04: 2.2
    Enter y04: 0.1103623
    The interpolating polynomial is:
    P(x) =
        0.7651977
      - 0.4837057(x - 1.0)
      - 0.1087339(x - 1.0)(x - 1.3)
      + 0.0658784(x - 1.0)(x - 1.3)(x - 1.6)
      + 0.0018251(x - 1.0)(x - 1.3)(x - 1.6)(x - 1.9)
     Press any key to continue...
    
  • 这是我的密码:

    #include <iostream>
    #include <vector>
    #include <stdexcept>
    using namespace std;
    
    double func(const std::vector< double > & a, const std::vector< double > & b, int i, int j){
        if ((i < 0) || (j < 0) || (i >= a.size()) || (j >= b.size()) || (i < j)) {
            return 0; // Ignore invalid arguments.
        }
        else if (i == j){
            return b[i];
        }
        else if (a[i] == a[j]) {
            return 0; // Avoid division by 0.
        }
        else if (i - j == 1){
            return (b[i] - b[j]) / (a[i] - a[j]);
        }
        else
            return (func(a, b, i, j - 1) - func(a, b, i - 1, j)) / (a[i] - a[j]);
    }
    
    int main()
    {
        int x;
    
        cout << "How many data points will be entered?:";
        cin >> x;
        std::vector< double > a;
        std::vector< double > b;
        for (int c = 0; c < x; c++){
            double v;
            cout << "Enter X0" << c << ":";
            cin >> v;
            a.push_back(v);
            cout << "Enter y0" << c << ":";
            cin >> v;
            b.push_back(v);
        }
    
    
        std::cout << std::endl;
        for (int i = 0; i < x; ++i)
            for (int j = 0; j < x; j = j + 2){
                try {
                double value = func(a, b, i, j);
    
                std::cout << "p(x): " << value << "(x-" << a[i] << ")" << std::endl;
                }
                catch (...) {
                    std::cout << "func( " << i << ", " << j << " ) = invalid " << std::endl;
                }
            }
        return 0;
    }
    
    #包括
    #包括
    #包括
    使用名称空间std;
    双函数(常数std::vector&a,常数std::vector&b,int i,int j){
    如果((i<0)| |(j<0)| |(i>=a.size())| |(j>=b.size())| |(ix;
    std::向量a;
    std::vectorb;
    对于(int c=0;c不能使用调试器一次执行一条语句。请使用调试信息编辑您的帖子。您应该始终至少将预期结果和实际结果放入
    ,否则如果(a[i]==a[j])
    不比较浮点值是否相等。很可能
    a[i]
    a[j]
    是相同的“非常接近”。底线是,如果不对此问题(以及其他问题,如舍入误差)进行调整,教科书公式通常无法按原样写入计算机程序。