2015-11-15 79 views
1

這是我第一次嘗試使用fittype函數來擬合自定義曲線(Birch-Murnaghan EOS)。這是我迄今爲止所做的:從工作區傳遞參數以適合MATLAB中的函數

BM = fittype((3*B0/2*((V0/V).^(7/3)-(V0/V).^(5/3))*(1+(3/4)*(B1-4)*((V0/V).^(2/3)-1))), 'coefficients',{'B0', 'B1'}, 'independent', {'V'}); 
Pres = fit(V,p,BM); 

V0是一個我以前定義的常量。壓力(因變量)和V(自變量)的數據值也已被定義。

我希望通過擬合獲得B0和B1的值。

但是,我在fittype功能得到一個錯誤:

Undefined function or variable 'B0'. 

但是,這是我想從擬合來確定係數。我是否正確使用fittype?

回答

2

您在這裏遇到兩個問題。

首先,你需要改變一些元素方式的乘法和除法(與你使用的方式相似^)。

其次,根據MATLAB文檔用於here匿名功能(搜索「創建使用匿名功能的配合型」的文檔中),如果你想從工作區傳遞參數。

嘗試這樣的:

V = rand(10, 1); 
p = rand(10, 1); 
V0 = 1; 
BM = fittype(@(B0, B1, V) (3*B0/2*((V0./V).^(7/3)-(V0./V).^(5/3)).*(1+(3/4).*(B1-4).*((V0./V).^(2/3)-1))), 'independent', {'V'}); 
fo = fitoptions('Method','NonlinearLeastSquares', 'StartPoint',[1 1]); 
Pres = fit(V,p,BM, fo); 

注:沒有指定開始點的參數是適合你得到一個警告,因爲MATLAB選擇開始點隨機。

您可以使用點符號Pres.B0Pres.B1訪問您的參數。

+0

謝謝!我現在可以運行它,但我仍然有一些問題。它說:「警告:沒有提供起點,選擇隨機起點。」 編輯:我發現我可以通過打印'Pres'來查看係數。謝謝!隨機的起點是否仍然是一個問題? –

+0

@JoelWong見編輯。 – lhcgeneva

+0

很多很多謝謝回答我的問題,我學到了很多東西! –