最新提问版本:matlab 曲面拟合 求参数 有四个参数需要求解,不知道MAT...
发布网友
发布时间:2024-03-29 22:05
我来回答
共3个回答
热心网友
时间:2024-10-03 08:19
注:百度知道的换行存在问题,改了很多次始终不行,请从参考资料的链接到我的空间去看。
% 1、拟合和很多因素有关,比如初值、拟合函数的选择、算法设置等。% 2、从结果看,不算很理想,这可能是因为原始数据与拟合函数的形式不很匹配。
% 3、考虑到初值对拟合结果的影响,这里尝试随机生成多组初值,比较拟合结果(根据误差范数)。
% 多数情况下都收敛到相同的结果。您可以自己试一试增加次数或修改随机数的范围。
% 4、需要特别说明:为保证根号下的值为正,需要对待拟合参数q的范围进行限制。
% 5、目前得到的结果是:m = 0.7257, n = -0.0332, p = 5.4417, q = -1.6。
x= [-2.9, -4.2, -7.2, -7.7, -2.8, -2.7, -1.6, -4.9, -4.4, -5.6, -7.2, -6.8, -6.9, -7, -6.3, -7.4, -6.4, -5.4, -5.5, -6.6, -11.3, -8.6, -11.1, -9.3, -8.9, -7, -4.6, -7.4, -8.8, -6.5, -5.1, -10.2, -8.6, -11.1, -11, -14.3, -11.5, -6.2, -7.3, -7.7, -5, -5.6, -9.6, -9.8, -9.2, -10.3, -12.1, -11.4, -13.7];y= [0.05477, 0.06325, 0.07746, 0.07071, 0.07071, 0.07071, 0.03162, 0.04472, 0.07071, 0.06325, 0.05477, 0.07746, 0.05477, 0.07071, 0.03162, 0.10488, 0.07071, 0.06325, 0.06325, 0.07071, 0.07071, 0.1, 0.08944, 0.04472, 0.05477, 0.06325, 0.06325, 0.05477, 0.04472, 0.04472, 0.06325, 0.07746, 0.08367, 0.1, 0.07071, 0.06325, 0.08367, 0.07071, 0.07071, 0.07071, 0.07071, 0.07071, 0.08944, 0.1, 0.07746, 0.07071, 0.07071, 0.06325, 0.06325];
z= [0.88, 1.17, 0.89, 0.91, 1.25, 0.84, 0.61, 1.23, 1, 1.11, 1, 0.83, 0.97, 1.6, 0.98, 1, 1.14, 1.52, 1.48, 1.54, 1.55, 1.51, 0.91, 1.02, 1.13, 1.56, 0.9, 1, 0.97, 0.98, 0.85, 1.11, 1.91, 2.75, 2.02, 1.72, 1.61, 2.62, 1.99, 1.8, 1.76, 1.73, 0.8, 1.74, 1.73, 1.97, 1.51, 1.72, 1.78];
% 拟合函数
f = inline('(c(1)+c(2)*x(1,:)).*exp(c(3)*x(2,:).*sqrt(1-c(4)./x(1,:)))','c','x');
% 优化设置:不显示优化的过程及结果(直接利用返回的参数)
opt = optimset('TolFun',1e-15,'Display','none');
% 限制根号下为正:1-q/x>=0,即q/x<=1,又x<0,所以q>=x
qmin = max(x);
% 通过循环,随机生成多组初值,比较各次拟合的结果,选择其中效果最佳者resnorm = inf;
for i=1:50
% 随机生成初值(注意对参数q的限制)
c0 = rand(1,4)*200-100;
c0(4) = max(qmin, c0(4));
% 最小二乘拟合(注意参数范围)
[c, resn] = lsqcurvefit(f, c0, [x;y], z,[-inf -inf -inf qmin],[inf inf inf inf],opt);
% 保留最佳拟合结果 if resn < resnorm
resnorm = resn;
copt = c;
end
% 提示信息,包括循环次数、误差范数、拟合参数的值 fprintf('\n%i\t%.3g\t%s', i, resn, mat2str(c));
end
% 提取并显示最佳拟合结果c = copt;
fprintf('\n\nm = %g, n = %g, p = %g, q = %g\n', c);
% 把拟合结果与原始数据对照n=length(z);
plot(1:n, z, '-o', 1:n, f(c, [x;y]), 'r:x');
legend('原始数据', '拟合函数',0)
热心网友
时间:2024-10-03 08:22
我可以做,但是100分,有点少
热心网友
时间:2024-10-03 08:21
经拟合,其参数近似为
m =
0.71391213296595412707290506659774
n =
-0.035870000183231394441651929128057
p =
5.2612761961087022299921045487281
q =
-1.6000000481710545674474133193144