24小时热门版块排行榜    

查看: 3206  |  回复: 7
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

zheyi-1984

铜虫 (小有名气)

[求助] 关于使用lsqcurvefit进行最小二乘曲线拟合时候出现的误差巨大问题求助!!!

所编写程序如下:
需要输入的数据
%testinputdata
%Angular distribution input data
x=[(1*pi/180)1*pi/180)180*pi/180);
   (1*pi/180)1*pi/180)180*pi/180);
   (1*pi/180)1*pi/180)180*pi/180);];
y=ang180';
c0=[0.44 0.1 0];%所希望拟合数据的初始值猜测
lup=[1 1 1];  % 这里可以不用
ldown=[0 0 0];

拟合所用的函数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function F=fittingfunction(c,x)
x1=x(1,;
x2=x(2,;
x3=x(3,;
F=1+c(1)*(1/2)*(3*(cos(x1)).^2-1)+c(2)*(1/8)*(63*(cos(x2)).^5-70*(cos(x2)).^3+15*(cos(x2)))+c(3)*(1/16)*(231*(cos(x3)).^6-315*(cos(x3)).^4+105*(cos(x3)).^2-5);

主程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
testinputdata
[c,renorm]=lsqcurvefit(@fittingfunction,c0,x,y,ldown,lup)


数据y的具体数值如下:
432.566950000000    416.920840000000    428.946100000000    433.053000000000    422.072450000000    428.162070000000    437.013270000000    426.751340000000    429.561780000000    425.763280000000    439.139480000000    425.480800000000    429.461310000000    419.672230000000    420.245560000000    427.193010000000    421.941920000000    422.916680000000    419.172600000000    426.356640000000    417.627120000000    420.576520000000    419.312750000000    417.820550000000    412.241250000000    417.973460000000    421.155510000000    420.329720000000    424.538270000000    414.565690000000    419.184860000000    417.904280000000    423.277490000000    420.463540000000    421.824140000000    417.933560000000    414.354910000000    414.106710000000    422.038680000000    417.209890000000    422.252760000000    417.202880000000    417.861040000000    419.148860000000    415.500790000000    423.182760000000    410.352220000000    418.970570000000    414.258190000000    414.768140000000    421.373230000000    419.670000000000    417.689380000000    416.945940000000    418.924440000000    413.251710000000    421.376270000000    418.567780000000    416.737390000000    421.627380000000    410.248860000000    413.871680000000    412.041020000000    417.244790000000    416.846830000000    418.066840000000    408.823080000000    416.875210000000    432.661280000000    415.876350000000    410.174940000000    402.669780000000    413.330730000000    407.934270000000    404.469130000000    408.634240000000    409.460610000000    403.576070000000    413.147640000000    410.905870000000    417.493510000000    418.093370000000    408.392450000000    412.877850000000    412.443730000000    398.812310000000    409.211240000000    412.151020000000    413.395380000000    409.491270000000    413.395380000000    412.151020000000    409.211240000000    398.812310000000    412.443730000000    412.877850000000    408.392450000000    418.093370000000    417.493510000000    410.905870000000    413.147640000000    403.576070000000    409.460610000000    408.634240000000    404.469130000000    407.934270000000    413.330730000000    402.669780000000    410.174940000000    415.876350000000    432.661280000000    416.875210000000    408.823080000000    418.066840000000    416.846830000000    417.244790000000    412.041020000000    413.871680000000    410.248860000000    421.627380000000    416.737390000000    418.567780000000    421.376270000000    413.251710000000    418.924440000000    416.945940000000    417.689380000000    419.670000000000    421.373230000000    414.768140000000    414.258190000000    418.970570000000    410.352220000000    423.182760000000    415.500790000000    419.148860000000    417.861040000000    417.202880000000    422.252760000000    417.209890000000    422.038680000000    414.106710000000    414.354910000000    417.933560000000    421.824140000000    420.463540000000    423.277490000000    417.904280000000    419.184860000000    414.565690000000    424.538270000000    420.329720000000    421.155510000000    417.973460000000    412.241250000000    417.820550000000    419.312750000000    420.576520000000    417.627120000000    426.356640000000    419.172600000000    422.916680000000    421.941920000000    427.193010000000    420.245560000000    419.672230000000    429.461310000000    425.480800000000    439.139480000000    425.763280000000    429.561780000000    426.751340000000    437.013270000000    428.162070000000    422.072450000000    433.053000000000    428.946100000000    416.920840000000    432.566950000000    397.985250000000

运行程序后没有出现报错,出现结果如下:

Local minimum found.

Optimization completed because the size of the gradient is less than
the default value of the function tolerance.




c =

    1.0000    0.0000    1.0000


renorm =

  3.1256e+007

看这个彪悍的误差。。。。

拟合所得的曲线与实际数据简直是天地之差。。。

尝试过调整c的初始取值,不管怎么调整,结果不变。

尝试过把y数据归一化,拟合结果好看了那么一点点,但是还是差十万八千里,so黔驴技穷了。。。

刚接触matlab,不知道这种问题该如何解决?求大侠们帮助的说。

[ Last edited by zheyi-1984 on 2012-10-28 at 19:20 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gilderf

金虫 (小有名气)

【答案】应助回帖

★ ★
xiegangmai: 金币+2, 谢谢应助 2012-11-04 19:37:16
lsqcurvefit有默认的精度,确定计算需要的精度后设置一下会有帮助。
如果改变函数结构能减低精度要求也可以试试。
8楼2012-11-04 15:19:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 8 个回答

zheyi-1984

铜虫 (小有名气)

额,不知道怎么把自动插入的表情符号改掉。。。
2楼2012-10-28 19:21:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zsy312

银虫 (小有名气)

代码应该写到"
CODE:
"到"

"之间, 不然可能会有笑脸, 代码也被打乱.
3楼2012-10-29 07:26:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zsy312

银虫 (小有名气)


xiegangmai: 金币+1, 谢谢参与 2012-10-29 20:09:38
代码应该写到:
中括号code中括号



另外一边也是 中括号/code中括号
之间, 不然可能会有笑脸, 代码也被打乱.我不能直接输入, 输入就成了楼上的情况了.
4楼2012-10-29 07:28:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见