fminsearch非线性回归Matlab?

时间:2016-02-13 19:28:27

标签: matlab statistics regression non-linear-regression fminsearch

有人可以向我解释如何使用Matlab命令窗口将fminsearch应用于此等式以查找K(二极管等式因子)的值。

I = 10^-9(exp(38.68V/k)-1)

Equation

我的数据值如下:

Voltage := [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]:
Current:= [0, 0, 0, 0, 0, 0, 0, 0.07, 0.92, 12.02, 158.29]:

我使用fminsearch并显示错误消息:

  

矩阵尺寸必须达成一致。

     

@(k)总和出错((I(:) - Imodel(V(:),k))。^ 2)

     

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

我使用了这个fminsearch代码:

V = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0];
I = [0, 0, 0, 0, 0, 0, 0.07 ,0.92 ,12.02 ,158.29];
Imodel = @(V,k) 1E-9*(exp(38.68*V/k)-1);
k0 = 1;
kmodel = fminsearch(@(k) sum((I(:)-Imodel(V(:),k)).^2), k0)    

请解释此代码中的问题是什么?

1 个答案:

答案 0 :(得分:2)

看起来你正在继续这篇文章:Fminsearch Matlab (Non Linear Regression )。链接的帖子试图在你的方程中找到正确的系数k,它最小化输入之间的平方误差之和,即从二极管的电流 - 电压关系预测的电流和输出之间的误差。来自二极管的电流。目前这篇帖子只是试图让它开始实现。

无论如何,这是一个非常简单的错误。您错过了当前数组I中的元素。它缺少一个0.您可以在numelV上使用I来验证这一点。基本上,VI的大小不匹配。 numel(V) == 11numel(I) == 10

您在问题顶部的定义与您定义错误的方式相比,它错过了最后一个零:

I = [0, 0, 0, 0, 0, 0, 0, 0.07, 0.92, 12.02, 158.29];
%//                    ^

当我使用这个新I运行代码时,我得到:

>> kmodel

kmodel =

    1.4999