非线性参数搜索

时间:2013-12-07 13:30:43

标签: matlab parameters nonlinear-functions

需要找到一组系统的最优参数P = P(1)* exp(-P(2)* x) - P(3)* x其中x和y是实验值。我定义了我的功能

f = @(P) P(1)*exp(-P(2)*x) - P(3)*x

guess = [1, 1, 1]

并尝试了

P = fminsearch(f,guess)

根据帮助。我收到错误

  

订阅的分配维度不匹配。

     

fminsearch出错(第191行)   fv(:,1)= funfcn(x,varargin {:});

我不太明白我的y值会落在哪里,以及函数从哪里获取P。遗憾的是,我无法访问nlinfit或优化工具箱。

1 个答案:

答案 0 :(得分:0)

你应该尝试matlab函数 lsqnonlin(@testfun,[1; 1; 1]) 但是首先创建一个函数并保存在包含所有数据点的m文件中,假设你的y是A而x是x,如下所示:

function F = testfun(P)
A = [1;2;3;7;30;100];
x = [1;2;3;4;5;6];
F = A-P(1)*exp(-P(2)*x) - P(3)*x;

这最小化了2-norm end为您提供了最佳参数。