Matlab lsqcurvefit对多个参数进行拟合

由来

今天老师讲了Malthus模型对人口进行预测. 留了一个实现Logistic模型对人口进行预测的作业.
Malthus只有一个人口增长率参数 rate. 而Logistic则在Malthus的基础上加了一个环境最大可承载的人口数参数 population_max.


%Malthus 人口增长模型
function result = malthus(rate, years)
    global population;
    result = population(1) * exp (rate * (years - years(1)));
end

%Logistic 人口增长模型
function result = logistic(arguments, years)
    global population;

    population_max = arguments(1);
    rate = arguments(2);

    result = population_max ./ (1 + (population_max / population(1) - 1) * exp(-rate * (years - years(1))));
end

解决

lsqcurvefit的第二个参数可以是一个vector, 包含模型中的多个参数


function main()
    %原始数据
    global population;

    years = [1982 ...];
    population = [10.1654 ...];

    %使用前一部分数据进行预测
    forecast = 1:16; 

    %参数估计
    population_max = 36;
    rate = 0.2;

    %参数拟合
    arguments = lsqcurvefit(@logistic, [population_max rate], years(forecast), population(forecast));

    %拟合结果显示
    disp(arguments);

    %命令窗口输出 `17.1854    0.0386`  (分别是 population_max rate)
end

你可能感兴趣的:(matlab,lsqcurvefit)