非线性最小二乘拟合

5次观看(过去30天)
鑫
2016年11月19日
评论道: 2020年6月12日
我有一个等式:
z = A*(y^B)*exp(C*x)
x y z是我的数据点,A B C是我想要拟合的未知数。
有没有办法用最小二乘函数来拟合这些未知数。
谢谢

接受的答案

明星黾
明星黾 2016年11月19日
这里的“技巧”是创建一个矩阵 “x” 而且 “y” 将数据向量作为单个参数赋给目标函数。然后,目标函数可以引用该矩阵的适当列来使用 “x” 而且 “y” 在你的方程中正确。我创造了随机 “x” “y” , “z” 向量来测试我的代码,所以用你的数据代替它们。否则,我的代码将不会更改。估计的参数为 “B” 的输出 fminsearch 呼叫,第二个 “resnorm” 输出是残差的范数。( “resnorm” 输出不是必需的,但它有助于评估拟合程度。)
的代码 - - - - - -
% % % z = A*(y^B)*exp(C*x) %原始方程
% % %映射:b(1) = A, b(2) = b, b(3) = C
xy z_fit = @ (b)(1)。* xy(:, 2)。(2)^ b。* exp (b(3)。* xy (: 1));
X = randi(99, 1,10);%创建数据
Y = randi(99, 1,10);%创建数据
Z = randi(99, 1,10);%创建数据
Xy = [x(:), y(:)];创建列向量并连接在一个矩阵中形成自变量参数
NCF = @(b)范数(z - z_fit(b,xy));%范数成本函数
B0 = [1;2;3);初始参数估计
[B,resnorm] = fminsearch(NCF, B0);%估计参数
您可以使用 scatter3 stem3 对于您的数据,和 plot3 对于目标函数拟合。使用 持有 函数将它们画在相同的坐标轴上 网格 来显示网格线。
4评论
鑫
2020年6月12日
您还需要提供您试图适合的函数,但根据我所看到的,您有超过最大值的问题,您可以使用以下行进行修改:
options = optimoptions('fmincon','Display','iter','Algorithm','sqp');
选项。MaxFunEvals = 1e5;
然后你可以在fmincon或fminsearch中使用选项。

登录发表评论。

更多答案(0)

社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!

开始狩猎!