MATLAB中非线性拟合nlinfit问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

自学数据拟合,应用nlinfit,出现解处的 Jacobian 矩阵为病态或者秩亏。

一、数据

读入表格数据,第一列和第二列为自变量,第三列为目标值。

188.8383188.81910
188.8383188.81580
188.8355188.81520
188.8355188.81250
188.8388188.81190
188.8355188.81190
188.835188.80590
188.8322188.80590
188.8284188.80530
188.8289188.80260
197.024196.92780
197.024196.93130
197.0206196.93150
197.024196.93130
197.0206196.93130
197.0241196.92780
197.024196.92810
197.024196.92780
197.024196.92780
197.024196.92440
182.5096182.3810
182.5096182.37580
182.5159182.39680
182.5191182.38730
182.5223182.40320
182.5255182.39810
182.5287182.39170
182.5318182.39370
182.535182.39170
182.5382182.40130

二、代码

代码如下

clc;clear;close all;
%% data1-H4348070  Sheet1原始线性数据17个,Sheet2原始零点数据30 Sheet3 原始零点+个线性数据
datatable = xlsread('data1', 'sheet2','A:C'); % 读取Excel表格数据,--必须在运行目录
%% 选择零点
x0=1:30;
x1=datatable(:,1);%对应c1
x2=datatable(:,2);%对应c2
x=[x1,x2];
x3=datatable(:,3);%对应标准压力百分比
y=2*(x1-x2)./(x1+x2); %压力计算公式

%% 非线性回归
beta0=[0.01;0.05;1;2];
[beta,r,J] = nlinfit(x,x3, 'bian', beta0);
%显示回归系数
fprintf('回归系数为:\nb(1)=%.4f\nb(2)=%.4f\nb(3)=%.4f\nb(4)=%.4f\n', beta);
%预测 
[Ypred,delta]=nlpredci('bian', x, beta, r, 'Jacobian', J);%Ypred预测值,dalta预测区间

三、问题

出现问题如下

3.1  警告: 解处的 Jacobian 矩阵为病态,而且某些模型参数的估计值可能不准确(不可识别)。进行预测时要谨慎。 
> 位置:nlinfit (第 384 行)
位置: nihe0 (第 15 行) 

此时 beta0=[0.01;0.05;1;2];

3.2警告: 秩亏,秩 = 3,tol =  9.944571e-15。 

> 位置:nlinfit>LMfit (第 587 行)
位置: nlinfit (第 284 行)
位置: nihe0 (第 16 行)
 
警告: Jacobian 的某些列在解处实际上为零,表明模型对它的某些参数不敏感。这可能是由于这些参数不在模型中或者不影响预测值造成的。也可能是由于模型函数中的数值下溢造成的,这种情况有时可以通过选择更合适的初始参数值或者通过重新调整尺度或调整中心位置来避免。参数估计值可能不可靠。

此时beta0=[0.1; 0.2;0.1;0.2];


总结

不确定其初值原则,怎么定初值?迷惑?不同初始值,回归系数也不同

有人说是预期值附近选值就可,有人直接写入1;

也有人提议:但初始值选择实际是有一定的难度,一般方法也是最有效的方法,用随机函数rand()来初定初始值,看相关系数是否接近于1,如不行,再调整初始值,rand()*某个数的倍数,再拟合,或作图看原始点是否在拟合曲线附近,直到相关系数接近于1,结束拟合

也不知哪位高手能指点下,到底怎么取值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值