如何将Excel中SIN函数数组与RAND函数结合添加噪声并固定随机值
将SIN与RAND函数结合生成带随机扰动的正弦趋势
一、合并为单个函数(每个单元格独立随机扰动)
要让每个正弦值对应独立的随机因子,核心是生成和正弦数组尺寸一致的随机数组。Excel 365/2021及以上版本的RANDARRAY函数可以直接生成指定大小的随机数组,和原SIN数组做元素级运算即可。
示例1:添加随机偏移扰动
=TRANSPOSE((SIN(RADIANS(SEQUENCE(31)*15)) + 1) + RANDARRAY(31, 1, -0.1, 0.1, TRUE))
SEQUENCE(31)替代原ROW(INDIRECT("1:31")),更简洁地生成1到31的序列RANDARRAY(31,1,-0.1,0.1,TRUE)生成31行1列的随机数,范围在-0.1到0.1之间(可根据需求调整范围),最后一个参数TRUE表示生成小数- 两个数组直接相加,实现每个正弦值单独叠加随机扰动
示例2:添加随机缩放因子
如果需要让正弦值的幅度有随机波动,可改用乘法:
=TRANSPOSE((SIN(RADIANS(SEQUENCE(31)*15)) + 1) * RANDARRAY(31, 1, 0.9, 1.1, TRUE))
这里随机因子范围设为0.9到1.1,让每个正弦值在原基础上有±10%的幅度变化。
二、固定随机值(无需复制粘贴为值)
方法1:启用迭代计算固定随机数组
- 打开Excel选项:文件>选项>公式,勾选「启用迭代计算」,设置迭代次数为1
- 在任意空白单元格(比如B1)输入公式,生成一次随机数组后固定:
=IF(B1="", RANDARRAY(31,1,-0.1,0.1,TRUE), B1) - 主函数引用这个固定的随机数组:
=TRANSPOSE((SIN(RADIANS(SEQUENCE(31)*15)) + 1) + B1)
- 首次计算时B1会生成随机数组,之后因迭代计算,单元格会保留当前值,不再自动更新
- 需要重新生成随机值时,删除B1内容后按回车即可
方法2:用Power Query生成静态数组
Power Query生成的数组是静态的,仅在手动刷新时更新:
- 点击「数据」选项卡>「获取数据」>「自其他来源」>「空白查询」
- 在Power Query编辑器的公式栏输入以下M代码(可调整扰动范围):
let Numbers = {1..31}, SINValues = List.Transform(Numbers, each (Sin(Radians(_*15)) + 1)), RandomValues = List.Generate(()=>0, each _ < List.Count(SINValues), each _+1, each Number.RandomBetween(-0.1,0.1)), CombinedValues = List.Zip({SINValues, RandomValues}) |> List.Transform(List.Sum), Transposed = {CombinedValues}, ResultTable = Table.FromRows(Transposed, null) in ResultTable - 点击「关闭并上载」,将结果加载到工作表。后续需要更新随机值时,右键点击生成的表>「刷新」
内容的提问来源于stack exchange,提问作者Paul Pieless
相关产品推荐
相关产品推荐

