我有一组不规则的数据点,采用笛卡尔坐标,使用MATLAB cftool可以转化为曲面(见下文)。
有没有人知道如何访问MATLAB生成的笛卡尔坐标矩阵,以便绘制这个曲面?
为此图形生成的代码(如下所示)无法访问必须生成以适合曲面的任何其他插值点。
%% Fit: 'untitled fit 1'.
[xData, yData, zData] = prepareSurfaceData( x1, y1, z1 );
% Set up fittype and options.
ft = 'linearinterp';
% Fit model to data.
[fitresult, gof] = fit( [xData, yData], zData, ft, 'Normalize', 'on' );
% Plot fit with data.
figure( 'Name', 'untitled fit 1' );
h = plot( fitresult, [xData, yData], zData );
legend( h, 'untitled fit 1', 'z1 vs. x1, y1', 'Location', 'NorthEast' );
% Label axes
xlabel x1
ylabel y1
zlabel z1
grid on
提前致谢
答案 0 :(得分:1)
可能的解决方法(可能效率不高)是绘制拟合的输出(fitresult
)并获取XData
,YData
和ZData
属性绘制的表面。
例如,在执行虚拟拟合之后:
hP = plot(fitresult)
为hP
生成这些属性:
Surface (curvefit.gui.FunctionSurface) with properties:
EdgeColor: [0 0 0]
LineStyle: '-'
FaceColor: 'flat'
FaceLighting: 'flat'
FaceAlpha: 1
XData: [51x49 double]
YData: [51x49 double]
ZData: [51x49 double]
CData: [51x49 double]
所以你可以检索它们。
<强> ALTERNATIVE 强>
作为替代方案,您可以使用cftool
生成的代码为函数提供其他输出参数(称为createFit
或somethinbg)。因此,当您使用足够的参数调用函数时,您将直接获得这些坐标。
示例:
更改生成函数的标题,如下所示:
[fitresult, gof,a,b,c] = createFit1(x, y, z)
然后在函数体中:
a = xData;
b = yData;
c = zData;
例如,在命令窗口中调用该函数会在a
,b
和c
中生成正确的坐标。