You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:51:18