用tcl重新调整列数据的大小

时间:2015-04-13 17:32:17

标签: for-loop tcl

我有一组具有X个点的数据,我想将其调整为x + n个点。

我需要用tcl来做这件事,并且在最后一部分中苦苦挣扎。

我知道将数据重新调整到所需点数所需的最大值,最小值和增量值。

原始数据:

-0.3925
-0.262
-0.1965
-0.026
-0.013
-0.0065
-0.0026
0
0.0026
0.0065
0.013
0.026
0.1965
0.262
0.3925

我正在努力构建一个for循环,它将获取第一个值并从delta中减去它以创建第二个值。随后取第二个并从delta中减去它以创建第三个,依此类推。依此类推。

鉴于:

Points 19 
Min : -0.3925 
Max :0.3925 
Delta : 0.04361

结果列数据如下所示:

-0.3925
-0.348888889
-0.305277778
-0.261666667
-0.218055556
-0.174444444
-0.130833333
-0.087222222
-0.043611111
-6.93889E-17
0.043611111
0.087222222
0.130833333
0.174444444
0.218055556
0.261666667
0.305277778
0.348888889
0.3925

有人可以给我一些建议。

1 个答案:

答案 0 :(得分:1)

执行此类操作时有几个关键点(这些也适用于Tcl以外的语言)。首先,您应该计算所需范围内的增量以及所需的步数。其次,如果可以,你应该使用整数来保持递增和循环控制,以避免因舍入而导致的fencepost错误;而是通过将delta乘以循环计数器并添加到原始值来计算循环迭代的值。第三,在打印结果时,您应该考虑正确的精度;在Tcl中,这往往意味着将format%f转换和适当的宽度说明符一起使用。

set from -0.3925
set to 0.3925
set points 19

set delta [expr {($to-$from) / double($points-1)}]

for {set i 0} {$i<$points} {incr i} {
    set x [expr {$from + $i*$delta}]
    puts [format "%.5f" $x]
}

这会产生此输出:

-0.39250
-0.34889
-0.30528
-0.26167
-0.21806
-0.17444
-0.13083
-0.08722
-0.04361
0.00000
0.04361
0.08722
0.13083
0.17444
0.21806
0.26167
0.30528
0.34889
0.39250