请教matlab非线性拟合结果不唯一的问题

供稿:hz-xin.com     日期:2025-01-18
大家好 想请教大家一个问题 我正在用matlab作一组数据的非线性拟合

rA = [3.86 3.90 4.17 4.22 4.23 4.23 4.26 4.24 4.26 4.28];
x = [2.48 2.45 2.08 2.00 1.98 1.97 1.91 1.94 1.92 1.90];
y = [5.43 5.47 5.84 5.91 5.93 5.95 6.01 5.97 5.99 6.02];
z = [6.75 6.79 7.25 7.34 7.37 7.39 7.46 7.42 7.44 7.48];
f=@(p,x)(p(1)*x(1,:)-4*x(2,:).*x(3,:))./(1+p(2)*x(2,:)).^2;
p=lsqcurvefit(f,rand(1,2),[x;y;z],rA);
k=p(1)
m=p(2)

但是随着初始参数的不同,拟合结果不同,需要调整初始参数

x=[];for i=1:10 x=[x;(i:10:10000)];%产生从i开始,步长为10,的自然数,最大值为10000。即得到关于x的10×1000的矩阵end y=x./(0.1152+0.0845*x);%得到矩阵y hold on; y1=normrnd(y,y*0.2,10,1000);%生成以y为均值,标准差为y*0.2的呈高斯分布的10×1000随机数矩阵 plot(x,y1,' .g') %描散点 plot(x,y,'b*');%描y点ys=[]; for i=1:10 %%%%我怀疑是这中间有问题%%%%%%% b=polyfit(x(i,:),y1(i,:),4);%拟合曲线参数,使用多项式拟合函数] ys=[ys;polyval(b,x(i,:))];%求解拟合y值 %%%%%%%%%%%%%%%%%%%%% end plot(x,ys,'-r');%画出每一条拟合曲线 hold on; for i=1:10 %以下为验证通过拟合曲线得到的y值得离散度确实是0.2 p1=ys(i,:)-y(i,:); p1=p1.^2; s=sqrt(sum(p1)/1000); smx(i,:)=s;%得到一组离散度的矩阵,如果结论正确,矩阵用元素应在0.2上下浮动 endsmx

首先你生成的矩阵是1*1000的,我改了下,现在是10*1000的了
其次normrnd函数的参数你理解有误,第二个参数是标准差,是变化的数值,不是比例
现在这个运行出来每次都不一样,有的离散度只有0.11左右,大部分是0.2左右的;
由于生成的y最后基本都等于11多了,所以前几组含显著小于11的数的离散值就偏大,而后面几组基本从头到尾都等于11多,就容易偏小。


b=polyfit(x(i,:),y1(i,:),6); %这里拟合的阶数越高,拟合曲线越弯来拐去的贴合数据值,就会增大拟合出来数值的离散度。

在用matlab的lsqcurvefit( )或nlinfit( )函数进行非线性拟合时,往往不是一次运行就成功的,其结果是不唯一的,其问题在很大程度与初值的选定有较大的关系。

可以调整x0的初值,当exitflag=1时(或相关系数R²≈1),说明求解成功。

调整x0的初值最有效的方法,就是使用随机函数rand()。



请教matlab非线性拟合结果不唯一的问题
在用matlab的lsqcurvefit( )或nlinfit( )函数进行非线性拟合时,往往不是一次运行就成功的,其结果是不唯一的,其问题在很大程度与初值的选定有较大的关系。可以调整x0的初值,当exitflag=1时(或相关系数R²≈1),说明求解成功。调整x0的初值最有效的方法,就是使用随机函数rand()。

matlab 自定义隐函数进行非线性拟合
通过拟合,给出的拟合函数有点不靠谱。当a,b为如下值时,其相关系数为R² = 0.6753(拟合精度)。a = 0.0000000000000000000099999999999999994515327145421,b = 0.00000000010000000000000000364321973155

matlab多元函数非线性拟合问题
1、你的数据有问题:x1、x2都是13个点,而y是12个点。我暂时按照舍去x最后那个点处理。2、从现在的情况看,效果不好,这和你的数据是否适合所给拟合公式有关。尤其y第5个点感觉比较怪异。3、拟合问题和初值关系很大,如果你能知道拟合参数的大概范围会对尽快得到理想的结果有帮助。function zd501259...

太郁闷了,为什么matlab自己算的和自己算的都不一样?
拟合的结果不是唯一的,而自己的公式唯一的。要验证,不人偏信matlab。它毕竟是功能强大的软件,不是自己写的公式。

函数模型已知,matlab拟合效果不好,参数初值选取困难,求高手解决啊...
这个明显是一个最小二乘估计问题。如果你就是用的最小二乘估计的话,问题可能出在两个地方:1、如果数据点含有非高斯白噪声分布的干扰,那么从理论上它就不是无偏估计和一致估计,也就是说就算理论上讲它的效果都非常差。2、估计未工作在适应状态,样本点信息不够欠拟合或者过多导致了过拟合,试着...

MATLAB拟合曲线,为什么结果不对?
MATLAB拟合曲线,为什么结果不对?不对的原因是选择的数学模型不符,所以应调整数学函数表达式。拟合好坏可以通过数理分析计算,R²是否接近于1.

MATLAB中使用出错 lsqcurvefit函数进行非线性拟合出现错误,求教_百度...
function [ F ] = myfun5( x,xdata )中F不是返回值,不用[],直接是function F = myfun5( x,xdata )

Matlab不确定度验证及非线性拟合的问题
现在这个运行出来每次都不一样,有的离散度只有0.11左右,大部分是0.2左右的;由于生成的y最后基本都等于11多了,所以前几组含显著小于11的数的离散值就偏大,而后面几组基本从头到尾都等于11多,就容易偏小。b=polyfit(x(i,:),y1(i,:),6); %这里拟合的阶数越高,拟合曲线越弯来拐去的...

matlab的lsqcurvefit函数的九元的非线性拟合不行啊!
1、所有的x1-x9后面都有一个点“.”,导致出现“.+”、“.-”、“.)”等莫名其妙的符号;2、括号不匹配,多出一个右括号来。改后可以进行拟合,但结果不理想,得到的系数a都是复数,可能的原因:1、上面说到的表达式括号不匹配,我删掉的括号不一定符合你的本意,建议再仔细核对一下;2、曲线...

MATLAB的lsqcurvefit函数拟合非线性式子中的未知参数
在实际问题中,经常遇到包含exp(x)、lnx、sinx等函数组合的复杂非线性经验公式。针对这类问题,我们可以利用MATLAB中的lsqcurvefit函数进行求解。该函数采用非线性最小二乘法,其损失函数与优化算法类似,通过给定参数的初始值,不断优化参数以达到最佳拟合效果。以下为非线性最小二乘模型的目标函数示例。lsqc...