Fminsearch Matlab(非线性回归)

Saa*_*vin 2 math matlab regression linear-regression fminsearch

任何人都可以向我解释如何将非线性回归应用于此等式,使用matlab命令窗口找出K.

I = 10 ^ -9(exp(38.68V/k)-1). 方程式截图

我有如下数据值:

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]:
Run Code Online (Sandbox Code Playgroud)

方程式截图

[新]:现在我使用FminSearch作为另一种选择,并出现了另一条错误消息.

Matrix dimensions must agree.

Error in @(k)sum((I(:)-Imodel(V(:),k)).^2)

Error in fminsearch (line 189)
fv(:,1) = funfcn(x,varargin{:});
Run Code Online (Sandbox Code Playgroud)

我使用了这个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)    
>> kmodel = fminsearch(@(k) sum((I(:)-Imodel(V(:),k)).^2), k0);
Run Code Online (Sandbox Code Playgroud)

小智 5

您想要找到k最小化指数模型平方误差之和的参数(BTW,即电流/电压特性?),将当前数据I和电压数据V作为矢量:

Imodel = @(V,k) 1E-9*(exp(38.68*V/k)-1);
k0     = 1;
kmodel = fminsearch(@(k) sum((I(:)-Imodel(V(:),k)).^2), k0);

plot(V(:), I(:), 'ok', V(:), Imodel(V(:),kmodel), '-r');
Run Code Online (Sandbox Code Playgroud)

匿名函数计算平方误差之和.搜索k最小化模型错误的参数从值1开始; 请将其更改为更合适的值(如果你有一个很好的猜测).

  • @Saavin抱歉,我已经给出了解决方案.你试过吗?您是否需要更多帮助才能将其应用到您的案例中?我查看了你的个人资料,我读到你精通MATLAB,所以我认为你可以根据自己的需要调整解决方案. (6认同)
  • @Saavin我使用`fminsearch`(这是一个通用的MATLAB函数)而不是`nlinfit`(它带有统计工具箱).我问的是:你试过我发布的代码了吗? (4认同)