ファイル交換にはもっと良い機能があるかもしれませんが、手動で行う 1 つの方法は次のとおりです。
x = a(:); %make column vectors
y = b(:);
z = c(:);
%first order fit
M = [ones(size(x)), x, y];
k1 = M\z;
%least square solution of z = M * k1, so z = k1(1) + k1(2) * x + k1(3) * y
同様に、2 次近似を行うことができます。
%second order fit
M = [ones(size(x)), x, y, x.^2, x.*y, y.^2];
k2 = M\z;
あなたが与えた限られたデータセットに対して数値的な問題があるようです。help mldivide
詳細については、入力してください。
通常のグリッドを補間するには、次のようにします。
ngrid = 20;
[A,B] = meshgrid(linspace(min(a), max(a), ngrid), ...
linspace(min(b), max(b), ngrid));
M = [ones(numel(A),1), A(:), B(:), A(:).^2, A(:).*B(:), B(:).^2];
C2_fit = reshape(M * k2, size(A)); % = k2(1) + k2(2)*A + k2(3)*B + k2(4)*A.^2 + ...
%plot to compare fit with original data
surfl(A,B,C2_fit);shading flat;colormap gray
hold on
plot3(a,b,c, '.r')
以下の TryHard で与えられた式を使用して 3 次の近似を行うことができますが、次数が増えると、式はすぐに面倒になります。M
与えられx
たy
を構築できる関数を作成order
したほうがよいでしょう。それを複数回行う必要がある場合。