评估多项式函数

时间:2016-03-09 18:56:48

标签: c

不知道我在哪里出错,而且必须在我的polyEvaluate函数中,但是任何帮助都会受到赞赏。问题出在最后的计算中。我尝试修改功能,但似乎无法解决问题。

select p.id, p.postname, p.userid as 'created_by', s.user_id as 'shared_by'
from post p left outer join share s on p.id = s.postid
where p.userid = 10
order by p.id;

2 个答案:

答案 0 :(得分:3)

评估多项式的​​函数是复杂的。多项式的数学表示可能如下所示:

    f(x) = ∑ c[i]∙xⁱ

没有必要使常量成为特殊情况,它是c[0]∙x⁰。该公式用C表示为:

    double polyEvaluate(double coeff[], int order, double x)
    {
        double res = 0.0;

        for (int i = 0; i <= order; i++) {
            res += coeff[i] * pow(x, i);
        }

        return res;
    }

这个简单的代码要求系数的索引指的是指数,这是评估函数的更自然的表示。如果您希望用户首先输入具有大指数的系数,我认为这应该在输入期间处理一次。

(你反向辅助数组polyExp,但这并不是真正需要的;当你对术语求和时,用order - i访问系数就足够了。但是,最好选择一个在代码中代表您的代码的表示。使用当前代码,您可以创建一个辅助数组并将其反转为每个评估。)

你可以在没有pow函数的情况下评估多项式,因此没有数学库,只需计算x的幂:

    double polyEvaluate(double coeff[], int order, double x)
    {
        double fact = 1.0;
        double res = 0.0;
        int i;

        for (i = 0; i <= order; i++) {
            res += coeff[i] * fact;
            fact *= x;
        }

        return res;
    }

答案 1 :(得分:1)

您的主要问题可能是您定义为长度order + 1的可变长度数组,而order在该时间点没有分配值。

我建议暂时坚持使用固定长度的数组(只需将它们放得足够长)。