gpt4 book ai didi

c - 如何计算多项式导数?

转载 作者:行者123 更新时间:2023-11-30 21:04:32 24 4
gpt4 key购买 nike

我正在尝试编写一个函数来计算多项式函数的导数。 degr是多项式的次数,arr是包含多项式系数的数组。我想计算点t处的导数.

下面是我的尝试,但它总是返回 0 。我不明白出了什么问题。

float derv(int degr,int arr[],float t)
{
int i,n;
float sum=0;
float arr2[degr+1];

for (i=0;i<degr+1;i++) {
arr[i]=(arr[i]*(i+1));
}
degr=degr-1;
for (i=0;i<degr+1;i++)
{
arr2[i] = (pow(t,degr-i)*arr[i]);
}

for(n=0;n<degr+1;n++)
{
sum = sum + arr2[n];
}
return sum;
}

最佳答案

让我们做一些假设。如果多项式如下所示:

         degr
.---
p(x) = > arr[i] * pow(x, i)
`---
i=0

然后,导数将通过以下方式获得:

           degr
d .---
-- p(x) = > i * arr[i] * pow(x, i-1)
dx `---
i=1

您应该能够使用类似于 Horner's method 的循环来计算它.

对于您的程序,您正在多个循环中处理它,这是不必要的。但是,您的第一个循环正在尝试重新计算系数。第一个系数是常数,因此在应用导数时应将其重新计算为零。相反,您将乘以 (i+1)。只需乘以 i 即可。

在第二个循环中,您知道度数已减少,但由于第一项为 0,因此您不必递减 degr 变量。您应该从索引 1 开始循环。在 for 循环本身的主体内,pow 计算应提高到 i-1 次方。

在您的 sum 计算循环中,也从索引 1 开始。

您应该能够看到我向您建议的更改是如何直接从我上面提供的公式中得出的。

请注意,由于您修改了表示多项式的数组,因此您无法再次调用该函数来计算不同值的导数。您可以通过修改第一个循环来解决此问题,以便将系数存储在 arr2 中,然后更改第二个循环以便从 arr2 获取系数。现在,您可以在 derv 函数中将输入数组声明为常量。

包含我建议的更改的代码如下所示:

float derv(int degr,const int arr[],float t)
{
int i,n;
float sum=0;
float arr2[degr+1];

for (i=0;i<degr+1;i++) {
arr2[i]=(arr[i]*i);
}
for (i=1;i<degr+1;i++)
{
arr2[i] = (pow(t,i-1)*arr2[i]);
}

for(n=1;n<degr+1;n++)
{
sum = sum + arr2[n];
}
return sum;
}

关于c - 如何计算多项式导数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11440868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com