Как показать уравнение в наборе инструментов Matlab?

Я использую набор инструментов для подбора кривой Matlab, чтобы подогнать кривую к моим данным. Я использовал кубический сплайн, на графике он хорошо вписывается, но я хотел бы увидеть используемое уравнение. Есть ли способ сделать это?

Кроме того, есть ли способ показать код? Я имею в виду, что код использовался для подгонки кривой с помощью панели инструментов?

Изменить: мне удалось получить код следующим образом: файл-> сгенерировать код. Но все же мне нужно найти уравнение, может ли кто-нибудь сказать мне, как я могу это сделать?

Спасибо.


person Dania    schedule 21.06.2015    source источник


Ответы (1)


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

% returns the piecewise polynomial form of the cubic spline interpolant
pp = spline(x,Y)
% use unmkpp(pp) to get the piecewise polynomial details
[breaks,coefs,l,k,d] = unmkpp(pp)

Обратите внимание, что у вас будет набор коэффициентов для каждой части кусочного многочлена. Например:

x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
% cs stores the piecewise polynomial
cs = spline(x,[0 y 0]);
% extract the coefficients
[breaks,coefs,l,k,d] = unmkpp(cs)
% the endpoints of each of the polynomial pieces
breaks =
  -4  -3  -2  -1   0   1   2   3   4
% 8 sets of coefficients (each set of 4 coefficients for one polynomial piece)
coefs =
   0.20344  -0.05344   0.00000   0.00000
  -0.09033   0.55689   0.50344   0.15000
  -0.39211   0.28589   1.34622   1.12000
   0.14878  -0.89045   0.74167   2.36000
   0.13699  -0.44411  -0.59289   2.36000
   0.13325  -0.03313  -1.07012   1.46000
  -0.05998   0.36661  -0.73663   0.49000
  -0.06334   0.18668  -0.18334   0.06000
% the number of pieces is 8
l =  8
% order is 4 (so 4 coefficients)
k =  4
d =  1
% plot the interpolation
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');
person Special Sauce    schedule 21.06.2015
comment
Спасибо, я сделал это в командном окне, и вот как это сработало, pp=spline (Depth, CNCF) pp=form: 'pp' breaks: [1x4427 double] coefs: [4426x4 double] штук: 4426 order: 4 dim:1 Вроде бы это инфа о данных, но как получить уравнение? Я добавил эту строку, [breaks,coefs,l,k,d] = unmkpp(pp), но я получаю много строк данных, каждая из которых содержит 11 значений, это коэффициенты? - person Dania; 21.06.2015
comment
У вас есть 4426 отдельных полиномиальных частей. Каждая часть представляет собой кубический многочлен с 4 соответствующими коэффициентами. Это не одно уравнение: у вас есть 4426 отдельных уравнений, которые сегментированы вместе. Вот почему ваша посадка выглядит такой гладкой; каждая полиномиальная часть соответствует только очень небольшому сегменту ваших данных! - person Special Sauce; 21.06.2015
comment
Большое спасибо, это отличное объяснение, но не могли бы вы помочь мне в этом, я не уверен, как интерпретировать коэффициенты. Это пересечение, x ^ 1, x ^ 2, x ^ 3 справа налево? Спасибо. - person Dania; 21.06.2015
comment
@Dania Возможно, вы захотите изучить команду spap2, которая позволяет аппроксимировать сплайн методом наименьших квадратов. Например, вы можете вызвать spl2 = spap2(4, 4, x, y), который создаст кубический сплайн всего из 4 частей. Это не подойдет так же хорошо, как 4426 отдельных частей, но обобщит гораздо лучше и, вероятно, приблизит вас к тому, что вы ищете. - person Special Sauce; 21.06.2015
comment
@Dania Чтобы понять, как Matlab применяет кубические сплайны, см. этот ответ SO: stackoverflow.com/a/18982222/1911540 Это немного сложно. - person Special Sauce; 21.06.2015
comment
Спасибо, я пишу это, сплайн = spap2 (4,4, Глубина, CNCF), но я получаю 7 разных коэффициентов, [20,2245 4,2883 17,9042 15,6914 18,6387 21,2175 0,2035], как их интерпретировать, так как я должен иметь только 4 хз и 4 коэффициента? - person Dania; 21.06.2015
comment
@Dania Команда spap2 выводит другую форму сплайна, называемую сплайном B-form. Вы можете преобразовать его обратно в форму pp (кусочно-полиномиальный) с помощью команды fn2fm. Например, ppForm = fn2fm(spline, 'pp'), который, я считаю, должен дать вам ожидаемые коэффициенты 4x4=16. - person Special Sauce; 21.06.2015
comment
Большое спасибо, но я получил только разрывы, параметры не были указаны, это то, что я написал, ppform = fn2fm (spline, 'pp') Я получил это, ppform = form: 'pp' breaks: [0 737.6667 1.1065e +03 1.4753e+03 2213] коэф.: [4x4 двойной] штук: 4 порядок: 4 размер: 1 - person Dania; 21.06.2015
comment
@Dania Похоже, это сработало. Массив breaks содержит конечные точки 4 различных полиномиальных сегментов (например, 0-738, 738-1107, 1107-1475, 1475-2213). Матрица coefs содержит 4 коэффициента кубического полинома для каждого из этих сегментов. Если вы хотите выполнить интерполяцию вне Matlab, вам все равно нужно будет применить математику в соответствии с инструкциями в том другом сообщении SO, на которое я ранее ссылался. - person Special Sauce; 21.06.2015