这是我第一次尝试使用fittype函数来拟合自定义曲线(Birch-Murnaghan EOS)。这就是我到目前为止所做的:
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?
答案 0 :(得分: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.B0
或Pres.B1
来访问参数。