2015-02-24 50 views

回答

2

這是一種方法;但也可能是一個更清潔的一個:

讓你sf對象後,就可以訪問它的方法,像這樣:

MethodName(sf) 

爲可用的方法

列表中看到here讓我們說,你想使用手柄的情節來繪製表面:

hPlot = plot(sf) 

enter image description here

然後你可以XDataYDataZData使用手柄像這樣獲取:

X = get(hPlot,'XData') 
Y = get(hPlot,'YData') 
Z = get(hPlot,'ZData') 

可能是麻煩的一個,但它的工作原理。請注意,還可以獲取擬合面的係數,如下所示:

coeffvalues(sf) 

並用於產生它的公式:

formula(sf) 

因此你可以生成X,Y數據,並且使用創建Z值例如meshgrid,然後可以根據需要修改曲面。

編輯以下是如何使用係數和公式創建自己的曲面。在這裏我創建了一個帶有兩個輸入參數(x和y)的匿名函數,並使用它來生成z值進行繪圖。從使用plot(sf)獲得的數據我使用x = 1:0.01:0.01:1y = 500:500:3000,但你可以明顯改變它們。

我在函數句柄中手動輸入了公式,但必須有更好的方法;我有點匆忙,所以我沒有進一步研究,但是可以提取公式的每個元素,並將其乘以正確的係數以自動生成公式。

這裏是整個代碼:

clear 
clc 
close all 

load franke 
sf = fit([x, y],z,'poly23') 

c = coeffvalues(sf) 
F = formula(sf) 

%// Generate x and y values. 
[x,y] = meshgrid(500:100:3000,0.01:.01:1); 

%// There should be a better approach than manually entering the data haha. 
%// Maybe use eval or feval. 
MyFun = @(x,y) (c(1) + c(2)*x + c(3)*y +c(4)*x.^2 + c(5)*x.*y + c(6)*y.^2 + c(7)*(x.^2).*y + c(8)*x.*y.^2 + c(9)*y.^3); 

%// Generate z data to create a surface 
z = (MyFun(x,y)); 

figure 

subplot(1,2,1) 
plot(sf) 
title('Plot using sf','FontSize',18) 

subplot(1,2,2) 
surf(x,y,z) 
title('Plot using MyFun','FontSize',18) 

輸出:用於應答,我們可以定義使用下面的公式(SF)的把手功能

enter image description here

+0

由於帶參數的polynimial係數 和由網格定義的x,y?我認爲我的問題涉及你最後的陳述。你能幫忙嗎? – Darkmoor 2015-02-25 09:50:24

+0

是的,我剛剛更新了答案,請看看它效果很好! – 2015-02-25 15:07:24

+0

再次感謝您的回覆。我想再問一個問題。有沒有自動的方式 (也許是內置的matlab函數)將'公式'字符串函數轉換爲句柄函數?謝謝! – Darkmoor 2015-02-27 09:53:36