legendshao 发表于 2006-10-15 17:04

请教一个数据拟合的问题!

现有一组测量数据xi、yi,
要把他们拟合到直线上,拟合的要求是:
yi=k*xi+N*0.2 ,这就是说,对应于每一点,都要确定一个未知数N,才能将它们拟合到直线上。
同时,要求拟合的残差最小。
请教各位牛人,这个程序怎么编,我就是搞不定啊........:'(

dingd 发表于 2006-10-15 18:22

N相当于一个中间未知变量,这类问题已有解决的案例。把数据贴出来。

legendshao 发表于 2006-10-15 19:50

回复 #2 dingd 的帖子

请多指教。我第一次碰到这个问题,感觉不好解决,挺急的。数据如下:
xi= 0.2253    0.2801    0.3840    0.8087
yi=0.0047    0.0431    -0.0700    -0.0718
这个中间未知变量的问题,有没有什么例子可以参考?

zk1985 发表于 2006-10-15 20:11

我拟合得到的系数都感觉有问题,更郁闷。

legendshao 发表于 2006-10-15 20:20

回复 #1 legendshao 的帖子

这里的N是整数,可以设定范围在 [-10,10]之间。

dingd 发表于 2006-10-15 21:49

如果N不为整数的话,会有很多组解,如为整数,有一组解如下:
n1: 1
n2: 1
n3: 2
n4: 4
k: 0.891646373890498
不知对否?自己验证一下。

dingd 发表于 2006-10-15 21:53

对不起,符号弄错一个,结果应为:
n1: -1
n2: -1
n3: -2
n4: -4
k: 0.891646373563659

legendshao 发表于 2006-10-15 22:13

回复 #7 dingd 的帖子

谢谢!你是用搜索的方法吗?用for循环?
是否可以提供代码?供我研究一下啊,我还没有很好的思路。

dingd 发表于 2006-10-26 10:49

用循环效率低不实用.
这道题是用最新1stOpt测试版算的.对这类缺乏中间变量值的特殊拟合问题,1stOpt现可以很容易设定求解,代码如下:

Algorithm = SM3;
Parameter k;
Variable x, y;
ParVariable N[-10,10,0];
Function y=k*x+N*0.2;
Data;
0.2253        0.0047
0.2801        0.0431
0.3840        -0.0700
0.8087        -0.0718

结果:
k                  0.891646373688953
n0                 -1
n1                 -1
n2                 -2
n3                 -4

legendshao 发表于 2006-11-8 08:45

回复 #9 dingd 的帖子

看来这位坛友很推崇1stopt,不知这个东东有没有好的教程。
我下载了一个1.5的绿色版,不知功能是否齐全。请给于指点。
另外,我把你上面的代码直接copy进去,怎么不给出 n0 n1 n2 n3? 请指教。

dingd 发表于 2006-11-8 09:51

1:1.5的绿色版,被破解的千疮百孔,连最重要的编程模式都无法用了,其它还不知有什么毛病。
2:新版2.0都已出来了, 1.5就...
3:缺乏中间变量特殊拟合功能,是最新测试版的,只有极少老注册用户才能得到,2.0也无该功能,1.5就更无法运行上面的代码了。
4:毕竟是不错的国产数值计算软件,有能力的话,还是支持一下好。

legendshao 发表于 2006-11-8 10:44

回复 #11 dingd 的帖子

原来是这样!
看来阁下一定是老用户,或者本身就是该公司的人。
小声问一下:怎么才能得到该软件?
页: [1]
查看完整版本: 请教一个数据拟合的问题!