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
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]
是相同的“非常接近”。底线是,如果不对此问题(以及其他问题,如舍入误差)进行调整,教科书公式通常无法按原样写入计算机程序。