matlab非线性最小二乘拟合

我有801个点是由实验测得的数据。现有公式
U1=1+((wd^2)*xd0*(wd^2-w^2))/((wd^2-w^2)^2+w^2*b^2)+xs0*ws^2*((ws^2-w^2)^2+w^2*a^2)
其中U1是测量值(因变量),w是自变量,也是已知条件。
其他六个未知数需要通过最小二乘拟合同时得到最优值。

我是菜鸟,所以希望大牛们能说清楚一些。
最好是能给出程序框架,我自己吧自变量因变量带进去搞出来。
搞定之后追加分.
先谢谢啦
有问题麻烦用qq问我278663192
非线性的
有人做出来拟合结果了
只是我查不到程序

你说得很对,我也发现结果是初值敏感的。
但这是所不希望的。能不能有更好的解决方法呢?帮帮忙吧!
谢谢你啦

MATLAB的最优化工具箱中提供了lsqcurvefit()函数,可以解决最小二乘曲线拟合的问题,改函数的调用格式为:
[a,J]=lsqcurvefit(Fun,a0,x,y)
其中,Fun未原型函数的MATLAB表示,a0未最优化的初值,x,y为原始输入输出数据向量,调用该函数将可以返回待定系数向量a以及在此待定系数下的目标函数的值J.(详细可以输入 help lsqcurvefit)
具体做法是:
>>U1=inline('f(a,w)','a','w') %用a(i)分别代替六个未知数,i=1~6.
>>[xx,res]=lsqcurvefit(U1,[1 1 1 1 1 1],w,U); xx' % w和U是你试验得出来的数据向量。

结果应该会出现一个ans 向量(6维),分别就是你所要待定的系数a(i)了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-28
我给你个用lsqcurvefit作非线性拟合的例子,你自己照着改一下吧
另外,拟合结果是初值敏感的,因为找到的不一定是全局最优而可能是初值附近的局部最优

function Untitled3

clc

xi=[0.019,0.023,0.027]; % x data
yi=[430,380,256]; % y data
abc0=[4,0.5,5]; % initial values
abc = lsqcurvefit(@fun,abc0,xi,yi)

% target function
function y = fun(abc,x)
y = (abc(1)*(1-x/abc(2))+x/abc(2)).^abc(3);

abc =

31.2588 -3.9585 1.7033
第2个回答  2019-04-13
程序为:
x=[15,30,45,60,75,90,105,120,135,150,165,180,195,210,225,240,255,270];
y=[7,7.9,8.8,10,11,12.6,14,14.6,15.2,15.7,16.2,16.4,16.7,17,17.3,17.5,17.7,18.0];
p=polyfit(x,y,2)
x2=0:300;
y2=polyval(p,x2);
plot(x,y,'o',x2,y2)
结果为:
p
=
-0.000193441119138
0.098295493636051
5.181372549019607
p所得三个值就是对应你要求的m(1)
,m(2),m(3)三个系数
第3个回答  2020-06-11
NU=(a+b/d).^0.5;
应改为:
NU=(a+b./d).^0.5;
b后面有一个点。