我使用從描述爲fit的網站取得的以下示例。返回一個 對象。是否有可能採用涉及擬合曲面的數據?從擬合對象中取得擬合數據
load franke
sf = fit([x, y],z,'poly23')
plot(sf,[x,y],z)
謝謝!
我使用從描述爲fit的網站取得的以下示例。返回一個 對象。是否有可能採用涉及擬合曲面的數據?從擬合對象中取得擬合數據
load franke
sf = fit([x, y],z,'poly23')
plot(sf,[x,y],z)
謝謝!
這是一種方法;但也可能是一個更清潔的一個:
讓你sf
對象後,就可以訪問它的方法,像這樣:
MethodName(sf)
爲可用的方法
列表中看到here讓我們說,你想使用手柄的情節來繪製表面:
hPlot = plot(sf)
然後你可以XData
,YData
和ZData
使用手柄像這樣獲取:
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:1
和y = 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)的把手功能
由於帶參數的polynimial係數 和由網格定義的x,y?我認爲我的問題涉及你最後的陳述。你能幫忙嗎? – Darkmoor 2015-02-25 09:50:24
是的,我剛剛更新了答案,請看看它效果很好! – 2015-02-25 15:07:24
再次感謝您的回覆。我想再問一個問題。有沒有自動的方式 (也許是內置的matlab函數)將'公式'字符串函數轉換爲句柄函數?謝謝! – Darkmoor 2015-02-27 09:53:36