适用于 Linux 的周期性函数生成器



在我的工作中,我需要文本流形式的数学函数样本。例如,我需要一个程序,它在离散时间点生成正弦函数的值并将其打印到stdout中。然后我需要以某种形式组合这些样本,例如将两个按某个阶段移动的样本相加。所以我可以将我的问题分成两部分:

  1. 有没有一种非常标准的方法可以生成数学函数的样本,例如正弦,具有给定参数 - 频率,相位,幅度,时间步长 - 以具有两列的简单文本流的形式:时间和函数值?我知道Perl/Tcl中的简单脚本可以完成这项工作,但是我想知道老年解决方案。

  2. 哪些程序可以操作这些流?我知道awk,但是当我有多个流作为输入时,我该怎么办awk?例如,如何使两个或三个正弦样本的总和或乘积?

使用的是Debian Linux,我更喜欢Unix方式,当每个程序只做简单的任务并且做得很完美时,单独程序的结果可以由另一个程序组合。

谢谢。

您可以使用 bc 进行简单的数值计算。请参见手册页。更复杂的计算可以用octave来完成,这是一个免费的Matlab克隆。

例如,这将计算间隔的值:

$ octave -q --eval 'printf ("%fn", [0:0.1:pi/2])'|nl|tee x.txt
 1  0.000000
 2  0.100000
 3  0.200000
 4  0.300000
 5  0.400000
 6  0.500000
 7  0.600000
 8  0.700000
 9  0.800000
10  0.900000
11  1.000000
12  1.100000
13  1.200000
14  1.300000
15  1.400000
16  1.500000

这将计算罪恶值:

$ octave -q --eval 'printf ("%fn", sin([0:0.1:pi/2]))'|nl|tee y.txt
 1  0.000000
 2  0.099833
 3  0.198669
 4  0.295520
 5  0.389418
 6  0.479426
 7  0.564642
 8  0.644218
 9  0.717356
10  0.783327
11  0.841471
12  0.891207
13  0.932039
14  0.963558
15  0.985450
16  0.997495

join命令可用于连接两个文件:

$ join -1 1 -2 1 -o 1.2 2.2 x.txt y.txt 
0.000000 0.000000
0.100000 0.099833
0.200000 0.198669
0.300000 0.295520
0.400000 0.389418
0.500000 0.479426
0.600000 0.564642
0.700000 0.644218
0.800000 0.717356
0.900000 0.783327
1.000000 0.841471
1.100000 0.891207
1.200000 0.932039
1.300000 0.963558
1.400000 0.985450
1.500000 0.997495

但在整个计算过程中最好留在 Octave 中:

$ octave -q --eval 'for x = .1:0.1:pi/2 ; printf ("%f %fn", x, sin(x)); end'
0.100000 0.099833
0.200000 0.198669
0.300000 0.295520
0.400000 0.389418
0.500000 0.479426
0.600000 0.564642
0.700000 0.644218
0.800000 0.717356
0.900000 0.783327
1.000000 0.841471
1.100000 0.891207
1.200000 0.932039
1.300000 0.963558
1.400000 0.985450
1.500000 0.997495

有用的常规文本处理程序:

  • 粘贴或加入(将两个文件合并在一起)
  • 合并(对文件中的行进行类似预制棒集的操作)
  • colrm (删除列)
  • 排序
  • (常规排序)
  • sed(搜索和替换以及其他 ed 命令)
  • grep (搜索)
  • awk(常规文本操作)
  • 三通(丁字形结。虽然如果你需要这个,你可能正在做一些太复杂的事情,应该分解它。

我认为使用 perl 脚本生成值没有问题。当然,使用 bc 脚本也是一种选择。

你有没有看过 bc ?

最新更新