非线性最小二乘拟合
5次观看(过去30天)
显示旧注释
接受的答案
明星黾
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
对于目标函数拟合。使用
持有
函数将它们画在相同的坐标轴上
网格
来显示网格线。