问题描述
我正在尝试打印拉格朗日插值表。
double x0 = x[0];
double x1 = x[1];
double x2 = x[2];
double x3 = x[3];
double z0 = z[0];
double z1 = z[1];
double z2 = z[2];
double z3 = z[3];
if (size == 2)
{
cout << "\nLagrange Polynomial Form: " << endl;
cout << (1 / (x0 - x1)) * (z0) << "(x" << -x1 << ")"
<< (1 / (x1 - x0)) * (z1) << "(x" << -x0 << ")" << endl;
}
else if (size == 3)
{
cout << "\nLagrange Polynomial Form: " << endl;
cout << (1 / ((x0 - x1) * (x0 - x2)) * (z0)) << "(x" << -x1 << ")" << "(x" << -x2 << ")"
<< (1 / ((x1 - x0) * (x1 - x2)) * (z1)) << "(x" << -x0 << ")" << "(x" << -x2 << ")"
<< (1 / ((x2 - x0) * (x2 - x1)) * (z2)) << "(x" << -x2 << ")" << "(x" << -x0 << ")";
}
else if (size == 4)
{
cout << "\nLagrange Polynomial Form: " << endl;
cout << (1 / ((x0 - x1) * (x0 - x2) * (x0 - x3)) * (z0)) << "(x" << -x1 << ")" << "(x" << -x2 << ")" << "(x" << -x3 << ")"
<< (1 / ((x1 - x0) * (x1 - x2) * (x1 - x3)) * (z1)) << "(x" << -x0 << ")" << "(x" << -x2 << ")" << "(x" << -x3 << ")"
<< (1 / ((x2 - x0) * (x2 - x1) * (x2 - x3)) * (z2)) << "(x" << -x0 << ")" << "(x" << -x1 << ")" << "(x" << -x3 << ")"
<< (1 / ((x3 - x0) * (x3 - x1) * (x3 - x2)) * (z3)) << "(x" << -x0 << ")" << "(x" << -x1 << ")" << "(x" << -x2 << ")";
}
我想做的是读取给定数组的大小,然后根据size = 1,2,3打印出公式...但是,如果我一直做到size = 10,这会花费太多代码。如何将代码简化为for循环或更简单?
解决方法
尝试一下,看看是否对您有好处:
Warning 8: this pattern-matching is not exhaustive. Here is an example of a case that is not matched: (_::[]|[])