Эта функция принимает коэффициенты полинома в качестве входных данных p
.Дана некоторая полиномиальная функция:
zx^n + yx^(n-1) + ... + cx^2 + bx + a
p = [z y ... c b a]
Даны эти коэффициенты и соответствующие показатели [0 1 2 3 ...]
, у нас есть алгоритм для получения производной от полинома (который вы знаете).Для каждого члена многочлена:
- Умножьте коэффициент каждого члена на показатель этого термина
- Вычтите одно из показателя
Так... это то, что делает ваш код!Я пройдусь по нему (почти) построчно:
function dp = derp(p)
n = length(p) - 1;
n - это длина (количество членов) производной, она будет на единицу меньше входного полинома, потому что постоянный членвыпадает (соответствующий показатель равен нулю).Это также порядок входного полинома (наибольшее значение показателя степени).
p = p(:)';
Это просто транспонирует входной вектор.Я ... не уверен, почему это делается в вашем коде, это кажется ненужным.
dp = p(1:n).*(n:-1:1);
Здесь каждый коэффициент p(1:n)
умножается на показатель его члена (n:-1:1)
.
k = find(dp ~= 0);
При этом выполняется поиск любых индексов, для которых коэффициент не равен нулю , и эти индексы сохраняются в k
.
if ~isempty(k)
dp = dp(k(1):end);
else
dp = 0;
end
Этот оператор if устанавливает dp
в значениекоэффициенты производной, начиная с первого ненулевого коэффициента.Если все вычисленные коэффициенты равны нулю (входная функция была константой), dp просто устанавливается на ноль.
Надеюсь, это поможет!