| 查看: 3212 | 回复: 7 | ||
[求助]
关于使用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 ] |
2楼2012-10-28 19:21:35
3楼2012-10-29 07:26:13
4楼2012-10-29 07:28:39

5楼2012-10-29 11:28:41
|
多谢楼上几位的建议,代码已经放入“”之间,“跪求”有心人帮助的说! “所编写程序如下: 需要输入的数据 %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” |
6楼2012-10-29 15:00:00
7楼2012-10-29 15:03:10
8楼2012-11-04 15:19:05













1*pi/180)
;
回复此楼
