在 Matlab 中获取二维插值多项式
Obtaining a 2D interpolation polynomial in Matlab
我有三个向量,一个是 X 位置,另一个是 Y 位置,第三个是 f(x, y)。我想找到代数表达式插值多项式(使用 matlab),因为稍后我将在 AMPL 的优化问题中使用结果。据我所知,没有任何函数 return 插值多项式。
我已经试过了https://la.mathworks.com/help/matlab/ref/griddedinterpolant.html,但是这个函数只给出了某些点的插值。
我也试过 https://la.mathworks.com/help/matlab/ref/triscatteredinterp.html as sugested in Functional form of 2D interpolation in 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)
我想要一个输出,而不是 return 计算网格点 return 处的值,无论它用于计算所述值。我知道它可以在 mathematica 中用 https://reference.wolfram.com/language/ref/InterpolatingPolynomial.html 完成,所以我觉得 matlab 做不到很奇怪。
如果你有曲线拟合工具箱,你可以使用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
我有三个向量,一个是 X 位置,另一个是 Y 位置,第三个是 f(x, y)。我想找到代数表达式插值多项式(使用 matlab),因为稍后我将在 AMPL 的优化问题中使用结果。据我所知,没有任何函数 return 插值多项式。
我已经试过了https://la.mathworks.com/help/matlab/ref/griddedinterpolant.html,但是这个函数只给出了某些点的插值。
我也试过 https://la.mathworks.com/help/matlab/ref/triscatteredinterp.html as sugested in Functional form of 2D interpolation in 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)
我想要一个输出,而不是 return 计算网格点 return 处的值,无论它用于计算所述值。我知道它可以在 mathematica 中用 https://reference.wolfram.com/language/ref/InterpolatingPolynomial.html 完成,所以我觉得 matlab 做不到很奇怪。
如果你有曲线拟合工具箱,你可以使用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