Получение 2D интерполяционного полинома в Matlab - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть три вектора, один из X местоположений, другой из Y местоположений, а третий - af (x, y). Я хочу найти полином алгебраического выражения для интерполяции (используя matlab), поскольку позже я буду использовать результат в задаче оптимизации в AMPL. Насколько я знаю, нет никаких функций, которые возвращают интерполяционный полином.

Я пробовал https://la.mathworks.com/help/matlab/ref/griddedinterpolant.html,, но эта функция дает интерполированные значения только в определенных точках.

Я также пробовал https://la.mathworks.com/help/matlab/ref/triscatteredinterp.html, как предложено в Функциональная форма 2D-интерполяции в Matlab , но выходные данные не являются коэффициентами полинома. Я не вижу его, кажется, он заперт внутри странной переменной.

Это небольшая программа, которую я сделал, чтобы проверить, что я делаю:

close all
clear
clc

[X,Y] = ndgrid(1:10,1:10);
V = X.^2 + 3*(Y).^2;
F = griddedInterpolant(X,Y,V,'cubic');
[Xq,Yq] = ndgrid(1:0.5:10,1:0.5:10);
Vq = F(Xq,Yq);
mesh(Xq,Yq,Vq)
figure
mesh(X, Y, V)

Я хочу вывод, который вместо возврата значения в точках сетки возвращает то, к чему он привыкрассчитать указанные значения. Я знаю, что это может быть сделано в mathematica с https://reference.wolfram.com/language/ref/InterpolatingPolynomial.html,, поэтому я нахожу странным, что Matlab не может.

1 Ответ

2 голосов
/ 30 сентября 2019

Вы можете использовать fit, если у вас есть набор инструментов для подгонки кривой.

Если это не так, вы можете использовать простую регрессию, если я возьму ваш пример:

% The example data
[X,Y] = ndgrid(1:10,1:10);
V = X.^2 + 3*(Y).^2;

% The size of X
s = size(X(:),1);

% Let's suppose that you want to fit a polynome of degree 2.
% Create all the possible combination for a polynome of degree 2
%        cst     x     y     x^2       y^2       x*y
A = [ones(s,1), X(:), Y(:), X(:).^2, Y(:).^2, X(:).*Y(:)]

% Then using mldivide
p = A\V(:)

% We obtain:

p = 
    0  % cst
    0  % x
    0  % y
    1  % x^2
    3  % y^2
    0  % x*y
...