manthanein 发表于 2020-12-21 15:51:48

最佳公式

给定数据:
x      y
1        1
2        32
3        61
4        92
5        122
6        153
7        183
8        214
9        245
10        275
11        306
12        336

要求找出最好的使得f(x)=y的公式,允许使用取整函数等等,越简单越好。
插值法会弄出11次来,线性拟合加取整似乎又办不到。

lsr314 发表于 2020-12-21 16:29:01

这个差值不就是闰年每个月的天数吗,参照星期几的计算公式

manthanein 发表于 2020-12-21 17:18:25

lsr314 发表于 2020-12-21 16:29
这个差值不就是闰年每个月的天数吗,参照星期几的计算公式

星期几的计算公式,貌似常见的都是把1、2月改到上一年年尾的,所以我考虑弄出一个新公式。

uk702 发表于 2020-12-21 18:48:04

本帖最后由 uk702 于 2020-12-21 19:00 编辑

这个算不算? \(1+30(x-1)+- 的个位数\)
其实就是将残差拼与一个12位的小数。

manthanein 发表于 2020-12-21 19:15:54

uk702 发表于 2020-12-21 18:48
这个算不算? \(1+30(x-1)+- 的个位数\)
其实就是将残差拼与一个12位的小数。

真有你的,不过看了下3好像会弄出60来

uk702 发表于 2020-12-21 19:21:49

本帖最后由 uk702 于 2020-12-21 19:45 编辑

manthanein 发表于 2020-12-21 19:15
真有你的,不过看了下3好像会弄出60来

我用 julia 确认过了。

a=
x=1; k=30; u=1; v=2
for i=1:12
    b=x+k*(i-1)+round(Int, u*i/v) - round(Int, 10^i*1543865/731270181)%10;
    println((i, b-a))
end

manthanein 发表于 2020-12-21 19:29:01

uk702 发表于 2020-12-21 19:21
我用 julia 确认过了。

a=


奇怪,我是用excel算的

=1+30*(A1-1)+INT(A1/2)-MOD(INT(10^A1*1543865/731270181),10)

uk702 发表于 2020-12-21 19:47:39

manthanein 发表于 2020-12-21 19:29
奇怪,我是用excel算的

=1+30*(A1-1)+INT(A1/2)-MOD(INT(10^A1*1543865/731270181),10)

不好意思,我搞错了,round() 默认返回的距离最近的整数,也就是相当于四啥五入之类的。

manthanein 发表于 2020-12-21 19:51:00

uk702 发表于 2020-12-21 19:47
不好意思,我搞错了,round() 默认返回的距离最近的整数,也就是相当于四啥五入之类的。

四舍五入就是int(公式+0.5),试了下1的对应值就不对。

uk702 发表于 2020-12-21 19:59:36

manthanein 发表于 2020-12-21 19:51
四舍五入就是int(公式+0.5),试了下1的对应值就不对。

1+30(i-1)- % 10

a=
x=1; k=30; u=1; v=2
for i=1:12
    b=x+k*(i-1)+floor(Int, u*i/v) - floor(Int, 10^i*274997/247497525)%10;
    println((i, b-a))
end
页: [1] 2 3
查看完整版本: 最佳公式