1

任何人都可以向我解释如何使用 Matlab 命令窗口fminsearch将这个方程应用到 (Diode Equality Factor) 的值。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]:

我用过fminsearch,出现错误信息:

矩阵尺寸必须一致。

@(k)sum((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)    

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

4

1 回答 1

2

看起来您正在继续这篇文章:Fminsearch Matlab (Non Linear Regression)。链接的帖子试图k在您的方程中找到正确的系数,以最小化输入之间的平方误差之和,输入是根据二极管的电流 - 电压关系预测的电流,输出是二极管的测量电流。目前的这篇文章只是试图让这一点起步。

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

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

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

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

>> kmodel

kmodel =

    1.4999
于 2016-02-13T21:40:54.370 回答