我安装了曲线拟合工具箱,我正在尝试将扩散数据拟合到特定函数。
该函数是以下形式的误差函数:
y = 3500 - 2500 * erf( ( x-x0 ) / ( 2 * sqrt( D * t )) )
我希望应用程序为我提供合理的
D
x0
我知道
和
x0约为0.0014
但函数本身无法找到这些解决方案。Matlab输出误差“
输入必须真实且完整。
“尝试使用曲线拟合应用程序的默认参数时。
D
我需要在方程中设置一个预因子,如本例所示(
1e-12
y = erf( ( x-x0 ) / ( 2 * sqrt( 1e-12 * D * t )) )
通过这种方式,matlab找到了正确的解决方案,但仅适用于1e-10到1e-13之间的预因子。
这是一个很大的问题,因为D的正确解决方案将在1e-3和1e-15之间变化,这取决于我将使用的数据集。x0的值也会有所不同。因此,以这种方式,我无法实现一个通用的解决方案。
下面是我正在使用的示例数据集:
y = [6000 6000 6000 6000 6000 6000 6000 6000 6000 5750 5500 5250 5000 4500 4000 3250 2750 2250 1750 1500 1400 1250 1250 1150];
x = [0:0.0001:0.0023];
当在方程中使用以下固定参数时,得到的直线非常适合数据点。但是matlab找不到它们。
D = 7.1e-11;
t = 900;
x0 = 0.0015;
任何帮助都会很棒!非常感谢你。
%% Fit: 'untitled fit 1'.
% Input data
C = [6000 6000 6000 6000 6000 6000 6000 6000 6000 5750 5500 5250 5000 4500 4000 3250 2750 2250 1750 1500 1400 1250 1250 1150]';
x = [0:0.0001:0.0023]';
[xData, yData] = prepareCurveData( x, C );
% Set up fittype and options.
ft = fittype( '3500-2500*erf((x-x0)/(2*sqrt(1e-10*D*900)))', 'independent', 'x', 'dependent', 'y' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Display = 'Off';
opts.MaxIter = 4000;
opts.StartPoint = [0.5 0.0014];
opts.Upper = [1 Inf];
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts )
% Plot fit with data.
figure( 'Name', 'untitled fit 1' );
h = plot( fitresult, xData, yData );
legend( h, 'C vs. x', 'untitled fit 1', 'Location', 'NorthEast' );
% Label axes
xlabel x
ylabel C
grid on
(绘图仅为方便起见)