exponenta event banner

fnder

Дифференцировать функцию

Описание

пример

fprime = fnder(f,dorder) возвращает значение dorder-я производная функции в f. Значение по умолчанию dorder равно 1. Для отрицательного dorder, конкретный |dorder| -й неопределенный интеграл возвращается, который исчезает |dorder| - в левой конечной точке базового интервала.

Выходные данные имеют ту же форму, что и входные данные, они являются либо обоими ppforms, либо обеими B-формами, либо обеими stforms.

Если функция в f m-variate, затем dorder должен быть задан и должен иметь длину m.

Также:

  • Если f находится в ppform, или в B-форме с его последним узлом достаточно высокой кратности, то, вплоть до ошибок округления, f и fnder(fnint(f)) одинаковые.

  • Если f в ppform и fa - значение функции в f в левом конце его базового интервала, то, вплоть до ошибок округления, f и fnint(fnder(f),fa) являются одинаковыми, если только функция, описанная f имеет разрывы скачков.

  • Если f содержит B-форму f, а t1 является ее самым левым узлом, то, вплоть до ошибок округления, fnint(fnder(f)) содержит B-форму f-f (t1). Однако его крайний левый узел потеряет одну кратность (если он имел кратность > 1 для начала). Кроме того, его самый правый узел будет иметь полную кратность, даже если самый правый узел для В-формы f вf не. Чтобы проверить это, создайте сплайн, sp = spmak([0 0 1], 1). Этот сплайн находится на своем базовом интервале [0..1], прямая линия, которая равна 1 при 0 и 0 при 1. Теперь интегрируйте его производную: spdi = fnint(fnder(sp)). Сплайн в spdi имеет тот же базовый интервал, но на этом интервале он согласуется с прямой линией, которая равна 0 при 0 и -1 при 1.

fnder(f) является таким же, как fnder(f,1).

Примеры

свернуть все

В этом примере показано, как вычислить функции производной первого и второго порядка для трех B-сплайнов порядка 2, 3 и 4. Затем он строит график сплайнов и их производных и сравнивает результаты.

% Create the knots sequences
t1 = [0 .8 2];
t2 = [3 4.4 5  6];
t3 = [7  7.9  9.2 10 11];
tt = [t1 t2 t3];

% Accessory variables and commands for plotting purposes
cl = ['g','r','b','k','k'];
v = 5.4; d1 = 2.5; d2 = 0; s1 = 1; s2 = .5;
ext = tt([1 end])+[-.5 .5];
plot(ext([1 2]),[v v],cl(5))
hold on
plot(ext([1 2]),[d1 d1],cl(5))
plot(ext([1 2]),[d2 d2],cl(5))
ts = [tt;tt;NaN(size(tt))];
ty = repmat(.2*[-1;0;NaN],size(tt));
plot(ts(:),ty(:)+v,cl(5))
plot(ts(:),ty(:)+d1,cl(5))
plot(ts(:),ty(:)+d2,cl(5))

% Spline 1 (linear)
b1 = spmak(t1,1);
p1 = [t1;0 1 0];
% Calculate the first and second derivative of spline 1
db1 = fnder(b1);
p11 = fnplt(db1,'j');
p12 = fnplt(fnder(db1));
lw = 2;
plot(p1(1,:),p1(2,:)+v,cl(2),'LineWidth',lw)
plot(p11(1,:),s1*p11(2,:)+d1,cl(2),'LineWidth',lw)
plot(p12(1,:),s2*p12(2,:)+d2,cl(2),'LineWidth',lw)

% Spline 2 (quadratic)
b1 = spmak(t2,1);
p1 = fnplt(b1);
% Calculate the first and second derivative of spline 2
db1 = fnder(b1);
p11 = [t2;fnval(db1,t2)];
p12 = fnplt(fnder(db1),'j');
plot(p1(1,:),p1(2,:)+v,cl(3),'LineWidth',lw)
plot(p11(1,:),s1*p11(2,:)+d1,cl(3),'LineWidth',lw)
plot(p12(1,:),s2*p12(2,:)+d2,cl(3),'LineWidth',lw)

% Spline 3 (cubic)
b1 = spmak(t3,1);
p1 = fnplt(b1);
% Calculate the first and second derivative of spline 3
db1 = fnder(b1);
p11 = fnplt(db1);
p12=[t3;fnval(fnder(db1),t3)];
plot(p1(1,:),p1(2,:)+v,cl(4),'LineWidth',lw)
plot(p11(1,:),s1*p11(2,:)+d1,cl(4),'LineWidth',lw)
plot(p12(1,:),s2*p12(2,:)+d2,cl(4),'LineWidth',lw)

% Formatting the plot
tey = v+1.5;
text(t1(2)-.5,tey,'linear','FontSize',12,'Color',cl(2))
text(t2(2)-.8,tey,'quadratic','FontSize',12,'Color',cl(3))
text(t3(3)-.5,tey,'cubic','FontSize',12,'Color',cl(4))
text(-2,v,'B','FontSize',12)
text(-2,d1,'DB','FontSize',12)
text(-2,d2,'D^2B')
axis([-1 12 -2 7.5])
title({'B-splines with Simple Knots and Their Derivatives'})
axis off
hold off

Входные аргументы

свернуть все

Сплайн в ppform, B-form или stform, указанный как структура со следующими полями:

Форма сплайна, возвращенная как pp, B-, или tp00. pp указывает, что сплайн задан в кусочно-полиномиальной форме, B- указывает, что сплайн задан В-образной форме, и tp00 указывает, что сплайн задан в виде строки.

Узловые позиции сплайна, возвращаемые как вектор или как клеточный массив векторов для многомерных данных. Векторы содержат строго увеличивающиеся элементы, которые представляют начало и конец каждого из интервалов, на которых определены отрезки полинома.

Коэффициенты многочленов для каждой части, возвращаемые как матрица или как массив для многомерных данных.

Количество частей полинома, описывающих сплайн, возвращаемое как скаляр или как вектор числа частей в каждой переменной для многомерных данных.

Порядок полиномиальной функции, описывающей каждый участок полинома сплайна, возвращаемый как скаляр или как вектор, содержащий порядок в каждой переменной для многомерных данных.

Размерность целевой функции, возвращаемой как скаляр.

Порядок производной функции f, задается как скаляр или вектор для многомерных функций.

Типы данных: single | double

Выходные аргументы

свернуть все

Производная функция f сплайн в ppform, B-форме или stform, возвращенный в виде структуры со следующими полями:

Форма сплайна, возвращенная как pp, B-, или tp00. Форма производной функции та же, что и форма f функция. pp указывает, что сплайн задан в кусочно-полиномиальной форме, B- указывает, что сплайн задан В-образной форме, и tp00 указывает, что сплайн задан в виде строки.

Узловые позиции сплайна, возвращаемые как вектор или как клеточный массив векторов для многомерных данных. Векторы содержат строго увеличивающиеся элементы, которые представляют начало и конец каждого из интервалов, на которых определены отрезки полинома.

Коэффициенты многочленов для каждой части, возвращаемые как матрица или как массив для многомерных данных.

Количество частей полинома, описывающих сплайн, возвращаемое как скаляр или как вектор числа частей в каждой переменной для многомерных данных.

Порядок полиномиальной функции, описывающей каждый участок полинома сплайна, возвращаемый как скаляр или как вектор, содержащий порядок в каждой переменной для многомерных данных.

Размерность целевой функции, возвращаемой как скаляр.

Ограничения

  • fnder функция не работает с рациональными сплайнами. Для работы с рациональными сплайнами используйте fntlr вместо этого функция.

  • fnder функция работает для stforms только ограниченным образом: если тип tp00, то dorder может быть [1,0] или [0,1].

Алгоритмы

Для дифференциации любой полиномиальной формы, fnder функция находит производные в кусочно-полиномиальном смысле. Функция дифференцирует каждую часть полинома отдельно и игнорирует разрывы перехода между частями полинома во время дифференциации.

Для B-формы функция использует [PGS; (X.10)] формулы для дифференциации.

Для stform дифференциация опирается на знание формулы для релевантной производной базисной функции конкретного типа.

Представлен до R2006a