Полиномы Бернстайна
bernstein(f,n,t)
bernstein(g,n,t)
bernstein(g,var,n,t)
bernstein(
с указателем на функцию f
,n
,t
)f
возвращает th-порядок n
полином Бернстайна symsum(nchoosek(n,k)*t^k*(1-t)^(n-k)*f(k/n),k,0,n)
, оцененный в точке t
. Этот полином аппроксимирует функциональный f
на интервале [0,1]
.
bernstein(
с символьным выражением или функциональным g
,n
,t
)g
возвращает th-порядок n
полином Бернстайна, оцененный в точке t
. Этот синтаксис рассматривает g
как одномерную функцию переменной, определенной symvar(g,1)
.
Если какой-либо аргумент является символьным, bernstein
преобразовывает все аргументы кроме указателя на функцию к символьному, и преобразовывает результаты указателя на функцию в символьный.
Аппроксимируйте синусоидальную функцию 10-м и 100-й степенью полиномы Бернстайна:
syms t b10 = bernstein(@(t) sin(2*pi*t), 10, t); b100 = bernstein(@(t) sin(2*pi*t), 100, t);
Постройте sin(2*pi*t)
и его приближения:
fplot(sin(2*pi*t),[0,1]) hold on fplot(b10,[0,1]) fplot(b100,[0,1]) legend('sine function','10th-degree polynomial',... '100th-degree polynomial') title('Bernstein polynomials') hold off
Аппроксимируйте показательную функцию полиномом Бернстайна второго порядка в переменной t
:
syms x t bernstein(exp(x), 2, t)
ans = (t - 1)^2 + t^2*exp(1) - 2*t*exp(1/2)*(t - 1)
Аппроксимируйте многомерную показательную функцию. Когда вы аппроксимируете многомерную функцию, bernstein
рассматривает ее как одномерную функцию переменной по умолчанию, определенной symvar
. Переменной по умолчанию для выражения y*exp(x*y)
является x
:
syms x y t symvar(y*exp(x*y), 1)
ans = x
bernstein
обрабатывает это выражение как одномерную функцию x
:
bernstein(y*exp(x*y), 2, t)
ans = y*(t - 1)^2 + t^2*y*exp(y) - 2*t*y*exp(y/2)*(t - 1)
Чтобы обработать y*exp(x*y)
как функцию переменной y
, задайте переменную явным образом:
bernstein(y*exp(x*y), y, 2, t)
ans = t^2*exp(x) - t*exp(x/2)*(t - 1)
Аппроксимированный функциональный f
, представляющий линейный пандус согласно пятому порядку полиномы Бернстайна в переменной t
:
syms f(t) f(t) = triangularPulse(1/4, 3/4, Inf, t); p = bernstein(f, 5, t)
p = 7*t^3*(t - 1)^2 - 3*t^2*(t - 1)^3 - 5*t^4*(t - 1) + t^5
Упростите результат:
simplify(p)
ans = -t^2*(2*t - 3)
Когда вы упрощаете старший символьный полином Бернстайна, результат часто не может оцениваться численно стабильным способом.
Аппроксимируйте эту функцию меандра 100-й степенью полином Бернстайна, и затем упростите результат:
f = @(x)rectangularPulse(1/4,3/4,x); b1 = bernstein(f, 100, sym('t')); b2 = simplify(b1);
Преобразуйте полиномиальный b1
и упрощенный полиномиальный b2
к функциям MATLAB®:
f1 = matlabFunction(b1); f2 = matlabFunction(b2);
Сравните график исходной функции меандра, ее численно стабильное представление Бернстайна f1
и ее упрощенная версия f2
. Упрощенная версия не численно стабильна.
t = 0:0.001:1; plot(t, f(t), t, f1(t), t, f2(t)) hold on legend('original function','Bernstein polynomial',... 'simplified Bernstein polynomial') hold off
Символьные полиномы, возвращенные для символьного t
, численно стабильны при замене численными значениями между 0
и 1
для t
.
Если вы упрощаете символьный полином Бернстайна, результат может быть нестабильным при заменении численными значениями параметр кривой t
.
bernsteinMatrix
| formula
| nchoosek
| symsum
| symvar