找回密码
 欢迎注册
查看: 41957|回复: 22

[提问] 最佳公式

[复制链接]
发表于 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次来,线性拟合加取整似乎又办不到。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-12-21 16:29:01 | 显示全部楼层
这个差值不就是闰年每个月的天数吗,参照星期几的计算公式
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-12-21 17:18:25 | 显示全部楼层
lsr314 发表于 2020-12-21 16:29
这个差值不就是闰年每个月的天数吗,参照星期几的计算公式

星期几的计算公式,貌似常见的都是把1、2月改到上一年年尾的,所以我考虑弄出一个新公式。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-12-21 18:48:04 | 显示全部楼层
本帖最后由 uk702 于 2020-12-21 19:00 编辑

这个算不算? \(1+30(x-1)+[i/2]-[10^i*1543865/731270181] 的个位数\)
其实就是将残差拼与一个12位的小数。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-12-21 19:15:54 | 显示全部楼层
uk702 发表于 2020-12-21 18:48
这个算不算? \(1+30(x-1)+-[10^i*1543865/731270181] 的个位数\)
其实就是将残差拼与一个12位的小数。

真有你的,不过看了下3好像会弄出60来
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-12-21 19:21:49 | 显示全部楼层
本帖最后由 uk702 于 2020-12-21 19:45 编辑
manthanein 发表于 2020-12-21 19:15
真有你的,不过看了下3好像会弄出60来


我用 julia 确认过了。

  1. a=[1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336]
  2. x=1; k=30; u=1; v=2
  3. for i=1:12
  4.     b=x+k*(i-1)+round(Int, u*i/v) - round(Int, 10^i*1543865/731270181)%10;
  5.     println((i, b-a[i]))
  6. end

复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-12-21 19:29:01 | 显示全部楼层
uk702 发表于 2020-12-21 19:21
我用 julia 确认过了。

a=[1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336]

奇怪,我是用excel算的

=1+30*(A1-1)+INT(A1/2)-MOD(INT(10^A1*1543865/731270181),10)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 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() 默认返回的距离最近的整数,也就是相当于四啥五入之类的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-12-21 19:51:00 | 显示全部楼层
uk702 发表于 2020-12-21 19:47
不好意思,我搞错了,round() 默认返回的距离最近的整数,也就是相当于四啥五入之类的。

四舍五入就是int(公式+0.5),试了下1的对应值就不对。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-12-21 19:59:36 | 显示全部楼层
manthanein 发表于 2020-12-21 19:51
四舍五入就是int(公式+0.5),试了下1的对应值就不对。
  1. 1+30(i-1)-[10^i*274997/247497525] % 10

  2. a=[1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336]
  3. x=1; k=30; u=1; v=2
  4. for i=1:12
  5.     b=x+k*(i-1)+floor(Int, u*i/v) - floor(Int, 10^i*274997/247497525)%10;
  6.     println((i, b-a[i]))
  7. end
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-20 07:13 , Processed in 0.049363 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表