Matlab 计算函数的导数
假设有以下matlab代码Matlab 计算函数的导数,matlab,Matlab,假设有以下matlab代码 function dp = derp(p) n = length(p) - 1; p = p(:)'; dp = p(1:n).*(n:-1:1); k = find(dp ~= 0); if ~isempty(k) dp = dp(k(1):end); else dp = 0; end 我从这本书中知道,从我已经取了这个代码,解释它只是计算函数的导数,多项式,但是如果我想用C++写的话,怎么重写它?请解释一下这个代码的想法,我只需要在MATLAB中完全理解它是怎么
function dp = derp(p)
n = length(p) - 1;
p = p(:)';
dp = p(1:n).*(n:-1:1);
k = find(dp ~= 0);
if ~isempty(k)
dp = dp(k(1):end);
else
dp = 0;
end
我从这本书中知道,从我已经取了这个代码,解释它只是计算函数的导数,多项式,但是如果我想用C++写的话,怎么重写它?请解释一下这个代码的想法,我只需要在MATLAB中完全理解它是怎么做的,让我们忘记C++,注意代码的主要思想,请大家帮助我,我知道,数学是如何计算导数的,我需要理解代码< /p> < p>这个函数以多项式的系数作为输入。 给定一些多项式函数:
zx^n + yx^(n-1) + ... + cx^2 + bx + a
p = [z y ... c b a]
给定这些系数和相应的指数,我们有一个求多项式导数的算法(你知道的)。对于多项式中的每个项:
function dp = derp(p)
n = length(p) - 1;
n是导数的长度(项数),它只比输入多项式小一个,因为常数项消失(对应的指数为零)。这也是输入多项式的阶数(最高指数值)
这只是转换输入向量。我不知道为什么在你的代码中会这样做,这似乎是不必要的
dp = p(1:n).*(n:-1:1);
这里,每个系数p(1:n)
乘以其项(n:-1:1)
的指数
这将搜索系数不为零的任何索引,并将这些索引存储在k
中
if ~isempty(k)
dp = dp(k(1):end);
else
dp = 0;
end
此if语句将dp
设置为从第一个非零系数开始的导数的系数。如果所有计算的系数均为零(输入函数为常数),则dp仅设置为零
希望这有帮助 此函数将多项式的系数作为其输入
p
。
给定一些多项式函数:
zx^n + yx^(n-1) + ... + cx^2 + bx + a
p = [z y ... c b a]
给定这些系数和相应的指数,我们有一个求多项式导数的算法(你知道的)。对于多项式中的每个项:
function dp = derp(p)
n = length(p) - 1;
n是导数的长度(项数),它只比输入多项式小一个,因为常数项消失(对应的指数为零)。这也是输入多项式的阶数(最高指数值)
这只是转换输入向量。我不知道为什么在你的代码中会这样做,这似乎是不必要的
dp = p(1:n).*(n:-1:1);
这里,每个系数p(1:n)
乘以其项(n:-1:1)
的指数
这将搜索系数不为零的任何索引,并将这些索引存储在k
中
if ~isempty(k)
dp = dp(k(1):end);
else
dp = 0;
end
此if语句将dp
设置为从第一个非零系数开始的导数的系数。如果所有计算的系数均为零(输入函数为常数),则dp仅设置为零
希望这有帮助 多项式表示为系数列表 确保p是行向量
p = p(:)';
将每个元素乘以它的索引
dp = p(1:n).*(n:-1:1);
从列表前面删除任何零项
k = find(dp ~= 0);
if ~isempty(k)
dp = dp(k(1):end);
else
dp = 0;
end
在C语言中,您可能会这样写:
void derivative(const double *poly, int polysize, double *dervpoly)
{
for (int i=0 ; i<polysize-1 ; i++)
dervpoly[i] = poly[i]*(polysize-i-1);
}
请注意,按相反顺序存储系数可能更方便。多项式表示为系数列表 确保p是行向量
p = p(:)';
将每个元素乘以它的索引
dp = p(1:n).*(n:-1:1);
从列表前面删除任何零项
k = find(dp ~= 0);
if ~isempty(k)
dp = dp(k(1):end);
else
dp = 0;
end
在C语言中,您可能会这样写:
void derivative(const double *poly, int polysize, double *dervpoly)
{
for (int i=0 ; i<polysize-1 ; i++)
dervpoly[i] = poly[i]*(polysize-i-1);
}
注意,以相反顺序存储系数可能更方便