Делайте кусочный полином
Создайте кусочный полином, который имеет кубический полином в интервале [0,4], квадратичный полином в интервале [4,10] и квартальный полином в интервале [10,15].
breaks = [0 4 10 15]; coefs = [0 1 -1 1 1; 0 0 1 -2 53; -1 6 1 4 77]; pp = mkpp(breaks,coefs)
pp = struct with fields:
form: 'pp'
breaks: [0 4 10 15]
coefs: [3x5 double]
pieces: 3
order: 5
dim: 1
Оцените кусочный полином во многих точках интервала [0,15] и постройте график результатов. Постройте график вертикальных штриховых линий в точках пропуска, где сходятся полиномы.
xq = 0:0.01:15; plot(xq,ppval(pp,xq)) line([4 4],ylim,'LineStyle','--','Color','k') line([10 10],ylim,'LineStyle','--','Color','k')
Создайте и постройте график кусочного полинома с четырьмя интервалами, которые чередуются между двумя квадратичными полиномами.
Первые два подграфиков показывают квадратичный полином, и его отрицание сместилось на интервалы [-8, -4] и [-4,0]. Полином следующий
Третий подграфик показывает кусочный полином, построенную путем чередования этих двух квадратичных частей на четырех интервалах. Вертикальные линии добавляются, чтобы показать точки, где полиномы встречаются.
subplot(2,2,1) cc = [-1/4 1 0]; pp1 = mkpp([-8 -4],cc); xx1 = -8:0.1:-4; plot(xx1,ppval(pp1,xx1),'k-') subplot(2,2,2) pp2 = mkpp([-4 0],-cc); xx2 = -4:0.1:0; plot(xx2,ppval(pp2,xx2),'k-') subplot(2,1,2) pp = mkpp([-8 -4 0 4 8],[cc;-cc;cc;-cc]); xx = -8:0.1:8; plot(xx,ppval(pp,xx),'k-') hold on line([-4 -4],ylim,'LineStyle','--') line([0 0],ylim,'LineStyle','--') line([4 4],ylim,'LineStyle','--') hold off
breaks
- ПропускиПропуски, заданные как вектор длины L+1
со строго увеличивающимися элементами, которые представляют начало и конец каждого из L
интервалы.
Типы данных: single
| double
coefs
- Полиномиальные коэффициентыПолиномиальные коэффициенты, заданные как L
-by- k
матрица с i-й строкой coefs(i,:)
содержит локальные коэффициенты порядка k
полином i-го интервала, [breaks(i), breaks(i+1)]
. Другими словами, полином coefs(i,1)*(X-breaks(i))^(k-1) + coefs(i,2)*(X-breaks(i))^(k-2) + ... + coefs(i,k-1)*(X-breaks(i)) + coefs(i,k)
.
Типы данных: single
| double
d
- РазмерностьРазмерность, заданная как скаляр или вектор целых чисел. Задайте d
чтобы обозначить, что кусочный полином имеет значения коэффициентов размера d
.
Типы данных: single
| double
pp
- Кусочно-полиномиальныйКусочный полином, возвращается как структура. Используйте эту структуру с ppval
функция для вычисления кусочного полинома в одной или нескольких точках запроса. Структура имеет эти поля.
Область | Описание |
---|---|
form |
|
breaks | Вектор длины |
coefs |
|
pieces | Количество штук, |
order | Порядок полиномов |
dim | Размерность цели |
Поскольку полиномиальные коэффициенты в coefs
являются локальными коэффициентами для каждого интервала, необходимо вычесть нижнюю конечную точку соответствующего узлового интервала, чтобы использовать коэффициенты в обычном полиномиальном уравнении. Другими словами, для коэффициентов [a,b,c,d]
по интервалу [x1,x2]
, соответствующий полином является
Указания и ограничения по применению:
Область структуры output pp
отличается от pp
структура в MATLAB®. В MATLAB, ppval
невозможно использовать pp
структура от генератора кода. Для генерации кода, ppval
невозможно использовать pp
структура, созданная MATLAB. unmkpp
может использовать MATLAB pp
структура для генерации кода.
Создание pp
MATLAB структура из
pp
структура, созданная генератором кода:
В генерации кода используйте unmkpp
чтобы вернуть кусочно-полиномиальные детали в MATLAB.
В MATLAB используйте mkpp
чтобы создать pp
структура.
Если вы не предоставляете d
, затем coefs
должен быть двумерным и иметь фиксированное количество столбцов. В этом случае количество столбцов соответствует порядку.
Чтобы задать кусочно-постоянный полином, coefs
должен быть вектор-столбец или d
должен иметь не менее двух элементов.
Если вы предоставляете d
и d
является 1
, затем d
должно быть константой. В противном случае, если вход в ppval
является нескалярным, тогда форма выхода ppval
может отличаться от ppval
в MATLAB.
Если вы предоставляете d
тогда он должен иметь фиксированную длину. Один из следующих наборов операторов должен быть true:
Предположим, что m = length(d)
и npieces = length(breaks) - 1
.
size(coefs,j) = d(j) size(coefs,m+1) = npieces size(coefs,m+2) = order
j
= 1,2,..., м. Размерность m+2
должна быть фиксированной длины.Предположим, что m = length(d)
и npieces = length(breaks) - 1
.
size(coefs,1) = prod(d)*npieces size(coefs,2) = order
Если вы не предоставляете d
, тогда следующие операторы должны быть true:
Предположим, что m = length(d)
и npieces = length(breaks) - 1
.
size(coefs,1) = prod(d)*npieces size(coefs,2) = order
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.