回 帖 发 新 帖 刷新版面

主题:紧急求助

各位大虾,你们好!
本人刚接触matlab,有个问题请教各位高手:
想用方程 y=(((p1-x1)^2+(p2-x2)^2+p3^2)^0.5-(p1^2+p2^2+p3^2)^0.5 )/3.0/10^8;去拟合下面的数据该怎么写程序,其中 p1,p2,p3 是待求的参数
     y                       x1               x2
-0.0000186035     -5717.58488    2370.324421
-0.0000264823     -5562.536517    9435.84915
-0.0000266359     -7113.138626    4903.552391
-0.0000110103     -856.3107484    7710.138294
-0.0000119875     -1958.724367    3953.578012
-0.0000077267     -7358.1438             -2449.331531

回复列表 (共3个回复)

沙发

可有倡提供代码解决方案

板凳

用lsqcurefit可实现非线性拟合
先建立目标函数的M文件:
function y=myfun(p,xdata)
   y=(((p(1)-xdata(1)).^2+(p(2)-xdata(2)).^2+p(3).^2).^0.5-(p(1).^2+p(2).^2+p(3).^2).^0.5 )/3.0/10^8;
于命令窗中输入:
>>ydata=[-0.0000186035    -0.0000264823     -0.0000266359   -0.0000110103     -0.0000119875     -0.0000077267   ];
>>xdata=[  -5717.58488    2370.324421
   -5562.536517    9435.84915
   -7113.138626    4903.552391
   -856.3107484    7710.138294
   -1958.724367    3953.578012
   -7358.1438     -2449.331531
];
>>p0=[1 1 1 ]; %参数初值
>>[p,r]=lsqcurefit('myfun',p0,xdata,ydata)

%由于本机上未装MATLAB故程序未经调试,有问题QQ(315007939)或EMAIL(zgp8584@163.com)联系!

3 楼

以初值p0=[-11129.50727,  8433.334539,  3316.182666]试试!
另,只有6个点作曲面拟合不太合理,应有足够多的数据点才较合适。
又及:方程似乎也不太合理。

我来回复

您尚未登录,请登录后再回复。点此登录或注册