MatLab逻辑曲线拟合异常:给定函数拟合失效原因咨询
问题分析与解决办法
你的拟合失败主要有两个核心问题:
1. 逻辑曲线模型缺少关键参数
你使用的模型1/(1+exp(-k*Dose))是简化版逻辑模型,它强制曲线在Dose=0时Response=0.5,但你的数据中Dose=0时Response为0,且曲线中点(Response=0.5对应的Dose)在2.56e4左右,必须使用包含中点剂量参数的完整逻辑模型才能匹配数据分布:
ft = fittype( '1/(1+exp(-k*(Dose - x0)))', 'independent', 'Dose', 'dependent', 'Response' );
这个模型里,x0是Response达到0.5时的Dose值,k控制曲线陡峭程度,两个参数才能贴合你的数据趋势。
2. 初始参数设置不合理
你设置的StartPoint = 0.0755269568571602完全不匹配当前数据量级:Dose是1e4级别,k取0.0755的话,k*Dose会达到755以上,exp(-k*Dose)趋近于0,模型输出几乎全为1,和实际数据偏差极大,导致拟合算法无法收敛到正确值。
针对双参数模型,建议设置合理初始值:
x0取Response接近0.5对应的Dose(约2.56e4);k取较小值(比如1e-4,确保k*Dose落在exp函数有效区间内)。
修改后的参数设置代码:
opts.StartPoint = [1e-4, 2.56e4]; % 对应k和x0的初始值
完整修正后的代码
function [fitresult, gof] = createFit1(Dose, Response) %CREATEFIT1(DOSE,RESPONSE) % Create a fit. % % Data for 'untitled fit 1' fit: % X Input : Dose % Y Output: Response % Output: % fitresult : a fit object representing the fit. % gof : structure with goodness-of fit info. % % See also FIT, CFIT, SFIT. % Auto-generated by MATLAB on 08-Sep-2022 20:16:26 %% Fit: 'untitled fit 1'. Dose = [1.6*10^4;1.84*10^4;2.08*10^4;2.32*10^4; 2.56*10^4;2.8*10^4;3.04*10^4;3.28*10^4;3.52*10^4;3.76*10^4;4*10^4;4.24*10^4]; Response = [0;0.1004;0.2830;0.4338;0.5638;0.6834;0.8030;0.8680;0.9294;0.9614;0.9978;1]; [xData, yData] = prepareCurveData( Dose, Response ); % Set up fittype and options. ft = fittype( '1/(1+exp(-k*(Dose - x0)))', 'independent', 'Dose', 'dependent', 'Response' ); opts = fitoptions( 'Method', 'NonlinearLeastSquares' ); opts.Display = 'Off'; opts.StartPoint = [1e-4, 2.56e4]; % 修正初始参数 % 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, 'Response vs. Dose', 'untitled fit 1', 'Location', 'NorthEast', 'Interpreter', 'none' ); % Label axes xlabel( 'Dose', 'Interpreter', 'none' ); ylabel( 'Response', 'Interpreter', 'none' ); grid on end
额外说明
运行修正后的代码后,会得到与数据匹配度极高的S型拟合曲线。如果需要更精准的初始值,可先通过数据大致估算:比如找Response=0.5对应的Dose作为x0,再根据曲线陡峭程度调整k的量级。
内容的提问来源于stack exchange,提问作者user19953929
相关产品推荐
相关产品推荐

