ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1487|回复: 19

[原创] 序列号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-27 23:02 | 显示全部楼层 |阅读模式
本帖最后由 世界客都 于 2024-6-28 00:07 编辑

封面.jpg


引 言
  本文所写的内容为EXCEL常见序列号的延伸,大家可以稍作了解,不要求掌握。但如您对序列号有兴趣的话,可以认真阅读全文并尝试完成最后的练习题,收获将会颇丰。
  本文(含习题)为世界客都原创内容,如需转载,请注明出处,首发于EXCELHOME论坛。
前 言
  在EXCEL中,平时需要用到各种各样的序列号,例如:1,1,2,2,3,3.......或者1,2,3,1,2,3,1,2,3.....等等。这些序列号的公式比较简单,论坛也有非常多的帖子可以学习,大家都能很轻易的写出公式来。
  其实在常见的序列号公式中,简单或是复杂的序列号,本质上还是INT函数的使用。例如上述生成1,2,3,1,2,3,1,2,3........序列号的公式是:=MOD(ROW(A3),3)+1,其实其等价公式是:=ROW(A4)-3*INT(ROW(A3)/3)
  当然,没人会进行以上函数的书写,一来是长,二来是复杂。
  我只是想借此说明INT函数在常见序列号中占据着重要地位。
  INT函数有着非常多精妙且复杂的应用,在这个帖子中,我只是介绍它在序列号中的应用。
  本文的内容分4个部分:
    第一部分简单介绍一下有规律的序列号的函数公式是怎么得来的;
    第二部分简单介绍一下无规律的序列号的函数公式是怎么得来的;
    第三部分简单证明一下序列号公式等价的问题;
    第四部分是简单序列题目。
  本文所列举的序列号都是简单的,可以通过简单计算得来的。至于那些卡特兰数序列呀,斐波那契序列呀,Kolakoski序列,心电图序列等等序列,将不会做介绍,虽然这些序列号很重要,但是因为这些序列号知名度已经很高,相关介绍已很多了,我认为没有介绍的必要。
  还有一类是根据递推式求序列号的,我认为也没必要介绍它的方法。因为根据递推式求通项公式本身在EXCEL中就不是一个必选项。
  我举个例子:
  现在要生成一个序列号,第一项是1,以后的每一项都是上一项的3倍加2。下图提供了2个公式:

3333.png

  很明显,第一个公式非常容易写出来,可以说是毫不费力就能写出。
第二个公式你要写出来就不是那么容易了,需要动动笔才能得到。就算它比第一个公式要短,但是它的计算量更大,也不方便维护,实际应用中,不会被采用。况且根据递推式计算通项公式的方法比较多,不统一,有些甚至很复杂,那么采用这种方式写序列号公式,无疑是舍近求远!

  所以,一般来说,在EXCEL中遇到这种根据递推式求公式的,按照递推式直接写就好了,简简单单。
  最后,序列号千千万,各种各样的都有,本文不可能全部介绍完。

  下面我给大家推荐一个网址,绝大多数序列号都能在这个网站找到。这个网站就是:oeis.org
以下是网站首页

111.jpg
  大家在红圈输入你想查找的序列号(例如:1,1,2,3,5,8,13,21),就可以了。输入名字也可以,例如你想找斐波那契数列,输入Fibonacci 点击Search即可,或者输入A000045(A45也可以)点击Search同样可以查询到。
  然后你下拉到FORMULA这里,如下图所示:

222.jpg

  红圈部分就是这个序列号的通项公式,你照着这个公式就可以在EXCEL中写出相对应的函数公式来。
  这里我简单讲解一下通项公式上面那个写着G.f.后面有一个公式的部分(如上图所示:G.f. :x/(1-x-x^2)),这部分不是序列号的通项公式,它只是这个序列号的生成函数(Generating Function)。生成函数主要用来计数,当然在序列号处理方面也有它的独到之处。生成函数有它的一些有趣应用,比方说,我利用生成函数可以找到一些分数,它的结果是有点意思的,我简单给大家找了4个(还有很多):
1/49=0.0204081632.....(等比数列构成)
100/8991=0.0111222333444555.....(按3位递增序列构成)
100/9899=0.01010203050813213455......(斐波那契序列构成)
100/9801=0.01020304050607080910111213141516171819......(自然数序列构成)
  有兴趣的朋友可以去了解一下哈,我在这里不再过多介绍了。
  最后,请大家先认真阅读第一到第三部分,然后去完成第四部分的习题吧。
  祝各位阅读愉快,做题愉快。
   太阳.png


评分

16

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-27 23:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
第一部分:有规律的序列号公式求解
我们来看一个比较简单的序列号问题,如下图所示:
示例.png
是要在B列生成1个1,2个2,3个3,4个4,5个5.......的序列号
我们把A列序号这一列的数值记为m,B列序列号这一列的待求数值记为n。
我们现在要找到一个关系式F(Function),使得n=F(m)。
我们来看看m和n有什么样的联系。
比方说我们来看看A列的4,5,6
我们发现4是大于1+2(1,2,2一共三个数值,就是序号小于4的对应B列的序列号的数值个数)的,5,6当然也是
但是4是小于等于1+2+3(1,2,2,3,3,3一共六个数值,就是序号小于等于6的对应B列的序列号的数值个数)的,5,6也是。
也就是说,序号m它是大于1+2+3+.....(n-1)的,其中n就是m对应的序列号的数值。
同时,m它是小于等于1+2+3+.....n的,其中n就是m对应的序列号数值。
这是显而易见的。
例如:1-1<1<=1,1<2<=(1+2),1<3<=(1+2).....以此类推
所以,我们把式子写出来就是:
1+2+3+......(n-1)<m<=1+2+3+......n
即:n*(n-1)/2<m<=n*(n+1)/2   (*)
即:n^2-n<2*m<=n^2+n
即:n^2-n+1/4<2*m<n^2+n+1/4
即:(n-1/2)^2<2*m<(n+1/2)^2
即:n-1/2<(2*m)^(1/2)<n+1/2
即:n<(2*m)^(1/2)+1/2<n+1
于是就有了B列的公式:
=INT(0.5+(2*A2)^0.5)    (~)
把(2*A2)^0.5的小数部分分为[0,0.5),[0.5,1)2部分讨论,(~)式也可以写成=ROUND((2*A2)^0.5,)
是不是非常简单?
不过需要注意的是,上面这个(~)式并不是唯一的公式解,还有非常多其它解,这取决于你的计算方式。
例如上面的(*)式,这里你可以采用解二次方程的方法来求解,解出来的公式跟(~)式有细微差别,但本质不变。
解出来是这样的:
-1/2+(1/4+2*m)^0.5<=n<1/2+(1/4+2*m)^0.5
因为1/2+(1/4+2*m)^0.5-(-1/2+(1/4+2*m)^0.5)等于1
就是n卡在了长度小于1的区间内。
所以只需要对-1/2+(1/4+2*m)^0.5向上取整即可,于是公式又可以写成:
=-INT(0.5-(2*A2+1/4)^0.5)
(这里考考大家,为什么向下取整
=INT(0.5+(1/4+2*A2)^0.5)是错误的公式?为什么一定要左区间值向上取整呢?不能右区间值向下取整呢?简单思考一下)
如果把(*)式改为n*(n-1)/2+1<=m<=n*(n+1)/2
求解二次方程,公式又可以再次写成以下形式:
=INT((2*A2-7/4)^0.5+0.5)
我之所以采用最初的这种放缩的方式来解,目的是为了让大家看得清楚,且非常直观,如果你采用上述的这种解方程的形式来做,是比较麻烦的。用放缩法,就是最终把关于m的式子((2*m)^(1/2)+1/2)卡在2个连续的自然数(n和n+1)之间(注意是之间,左右两边均不能取等号),那么用INT向下取整就一定会得到n。比方说一个数在4,5之间,向下取整就是5,如果可以取到5,向下取整就有可能是5,而不是4(上面提到的不能向下取整就是这么一个道理).如果这个数在4,6之间,那么向下取整可能是4,也可能是5。
上面给出了4个公式来生成序列号1,2,2,3,3,3,4,4,4,4,5,5,5,5,5..........
大家可以体会一下,理解一下各中差别。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-27 23:11 | 显示全部楼层
第二部分:无规律的序列号公式求解
我们来看一个比较简单的序列号问题,如下图所示:
示例2.png
是要在B列生成1个1,4个2,6个3,8个4,10个5,12个6.......的序列号
在第一部分中1个,2个,3个,4个是比较规律的,那么这个序列号是1个1,接着就变成了4个2了,是没有规律的
不过从第3个数开始又变得有规律了,那这种序列应该如何解决呢?(这个序列号在oeis.org也没收录有,自己发现的)
我们看看B列的个数的累加值
1,1+4,1+4+6,1+4+6+8,1+4+6+8+10,.1+4+6+8+10+12
结果是1,5,11,19,29,41....我们发现1=1*2-1,5=2*3-1,11=3*4-1,19=4*5-1.......
于是,根据第一部分的方法,马上就有:
n*(n-1)<=m<n*(n+1),即:
m<=(n+1/4)^0.5+0.5<m+1
于是就有了B列的公式:=INT(0.5+(A2+1/4)^0.5),简单吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-27 23:12 | 显示全部楼层
第三部分:简单证明一下序列号公式等价的问题
我们在第一部分用公式:=INT(0.5+(2*A2)^0.5)证明了可以生成序列号1,2,2,3,3,3,4,4,4,4,5,5,5,5,5.........
我们有一个疑问,就是2*A2这里如果加上一个数值,会不会对结果有什么影响。
于是我们在表格用以下几个公式试一下:
=INT(0.5+(2*A2+1/8)^0.5)
=INT(0.5+(2*A2+1/7)^0.5)
=INT(0.5+(2*A2+1/6)^0.5)
=INT(0.5+(2*A2+1/5)^0.5)
=INT(0.5+(2*A2+1/4)^0.5)
下拉,我们发现,当2*A2是加1/4的时候,第一个数值就出了问题,如果是加1/8,1/7,1/6,1/5的话,在前45项得出的结果都跟
=INT(0.5+(2*A2)^0.5)得出的结果是一样的。那是不是就可以肯定,只要2*A2加上一个大于0小于1/4的数,得出的结果都一样呢?换句话说:
就是INT(0.5+(2*n)^0.5)一定会等于INT(0.5+(2*n+p)^0.5)呢?
其中n是1,2,3,4,5.......,0<p<1/4。
靠几十个数值的验证肯定是不能保证的,需要有严格的证明才可以。
下面我给出一种自己的证明(网络上暂时还没搜到我这种解法):
证明:
如果INT(0.5+(2*n)^0.5)<>INT(0.5+(2*n+p)^0.5)  (#)
则一定可以找到一个自然数m使得
0.5+(2*n+p)^0.5>=m>0.5+(2*n)^0.5
化简有:2*n+p>=m^2-m+1/4>2*n
一方面因为m^2-m是自然数,2*n也是,所以有m^2-m>=2*n
另外一方面有:2*n+p-1/4>=m^2-m,因为p-1/4是小于0的
所以有2*n>2*n+p-1/4>=m^2-m>=2*n
推出2*n大于2*n,矛盾!这个矛盾是我们假设(#)式成立引发的。所以(#)式它肯定不成立,于是一定有INT(0.5+(2*n)^0.5)=INT(0.5+(2*n+p)^0.5) 其中0<p<1/4

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-27 23:13 | 显示全部楼层
本帖最后由 世界客都 于 2024-6-28 00:08 编辑

第四部分:简单序列题目(一共10题)
这一部分的序列号题目呢都是一些非常简单的题目,稍微动动手即可解决。原本我加了一些需要解高次方程(3,4次)才能得出公式的题目,但是后来删除了,因为解高次方程计算量非常大,我觉得大家可能会很吃力,而且在EXCEL中开高次方容易出现浮点误差。
  另外,这些题目的答案要靠自己去写,自己去想,如果靠搜,搜出来的答案对自己又有啥帮助呢?是吧。
要学会一项技能,看是看不会的,学了就要做,做了,才会有印象,就好像最近的高考热点话题一样,如何能获取高分,只能刷题,不断的刷。
序列号题目.zip (125.85 KB, 下载次数: 80)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-27 23:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
给你点个赞  支持下

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-28 00:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-28 08:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-28 08:56 | 显示全部楼层
感谢分享,原创不易!提供了很好的思路和方法。
循环函数给填充序列号提供了很大便利,2楼、第一部分的序列号,可以使用循环函数为:
  1. =DROP(REDUCE(0,SEQUENCE(6),LAMBDA(x,y,VSTACK(x-1,MAKEARRAY(y,1,LAMBDA(m,n,6))))),1)
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-28 16:08 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
收藏慢慢学!

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-27 06:28 , Processed in 0.049240 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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