首页 文章

matlab曲线拟合:对参数的限制

提问于
浏览
0

我有5个非参数模型,都有5到8个参数 . 该模型用于拟合纵向数据y(t),其中t为时间 . 所有5个模型都适合每个数据文件进行比较 . 模型本身不能改变 .

对于拟合,使用起始值,并使用levenberg-marquardt algortihm将这些值拟合到lsqcurvefit模型中 . 所以我为几个模型编写了一个脚本,为曲线拟合编写了一个函数

如果我执行曲线拟合,很多起始值都会徘徊到极值 . 这是我想要避免的事情,因为这些参数应该保持在它的起始值附近并且应该仅在明确定义的范围之间变化,或者仅包括在标准偏差内的曲线拟合 . 这里重要的是注意这个限制应该在曲线拟合(迭代数字技术)期间施加,而不是之后 .

我写的功能是为了使模型适应高度:

% Fit a specific model for all valid persons
    try
        opts = optimoptions(@lsqcurvefit, 'Algorithm', 'levenberg-marquardt'); 
        [personalParams,personalRes,personalResidual] = lsqcurvefit(heightModel,initialValues,personalData(:,1),personalData(:,2),[],[],opts);
    catch
        x=1;
    end

我为我的一个模特写的功能

elseif strcmpi(model,'jpss')
    % y = h_1(1-(1/(1+((t+0.75)^c_1/d_1)+((t+0.75)^c_2/d_2)+((t+0.75)^c_3/d_3)))
%     heightModel = @(params,ages) params(1).*(1-1./(1+((ages+0.75).^params(2))./params(3) + ((ages+0.75).^params(4))./params(5) + ((ages+0.75).^params(6))./params(7)));
    heightModel = @(params,ages) params(1).*(1-1./(1+(((ages+0.75)./params(3)).^params(2)) + (((ages+0.75)./params(5)).^params(4)) + ((ages+0.75)./params(7)).^params(6))); % Adapted 25/07
    modelStrings = {'h1','c1','d1','c2','d2','c3','d3'};

    % Define initial values
if strcmpi('male',gender)
    initialValues = [174.8 0.6109 2.9743 3.614 9.88 22.393 13.59];
else
    initialValues = [162.7 0.6546 2.43 4.011 8.579 18.394 11.846];
end

我想做什么:

是否可以对每个起始值@initial值设置限制?我认为对lsqcurvefit施加限制并不是一个好主意,因为有不同的模型具有不同的起始值和允许的不同范围 .

我脑子里有两件事:1 . 使用范围并将其置于初始值initialValues = [162.7 0.6546 2.43 4.011 8.579 18.394 11.846]`如果范围a1 = [150,180];范围a2 = [0.3,0.8]等等

  • 如果Heightmodel = 'name model'初始值* 1.2和lb =初始值* 0.8,则lsqcurvefit之间的所有初始值上单独限制lb和ub限制

有人可以给我一些提示或指示,因为我无法使它工作 .

提前致谢

露西

有人能帮助我吗?

1 回答

  • 0

    您声明:有不同的模型具有不同的起始值和 different ranges that are allowed. 这是您可以使用 ublb 的地方 . 如何执行此操作在 lsqcurvefit 文档中概述:

    X = LSQCURVEFIT(FUN,X0,XDATA,YDATA,LB,UB)定义了一组较低的和
    设计变量X的上限,以便解决方案在
    范围LB <= X <= UB . 如果没有边界,则对LB和UB使用空矩阵
    存在 . 如果X(i)在下面没有界限,则设置LB(i)= -Inf;设置UB(i)= Inf if
    X(i)在上面是无界限的 .

    例如,在以下示例中,参数在拟合期间被限制在限制内 . 下限( lb )和上限( ub )分别设置为低于和高于起始值的20% .

    heightModel = @(params,ages) abs(params(1).*(1-1./(1+(params(2).* (ages+params(8) )).^params(5) +(params(3).* (ages+params(8) )).^params(6) +(params(4) .*(ages+params(8) )).^params(7) )));
    initialValues = [161.92 0.4173 0.1354 0.090 0.540 2.87 14.281 0.3701];
    lb = 0.8*initialValues; % <-- lower bound is 20% smaller than initial par values
    ub = 1.2*initialValues;
    [parsout,resnorm,residual] = lsqcurvefit(heightModel,initialValues,t,ht,lb,ub);
    

相关问题