2015-04-13 1 views
0

У меня есть набор данных, который имеет X количество точек, и я хочу изменить размер этого числа на x + n.reizing данные столбца с tcl

Мне нужно сделать это с помощью 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 

Я изо всех сил, чтобы построить цикл, который будет, взять первое значение и вычитать его из дельты создать второе значение. Впоследствии возьмите второй и вычтите его из дельта, чтобы создать третий и т. Д. И так далее.

Дано:

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 

Может кто-то пожалуйста, дайте мне несколько советов.

+0

Любые попытки до сих пор? Кроме того, вы могли бы дать значение delta, чтобы кто-то мог проверить свой скрипт на вход, чтобы получить результат? – Jerry

+0

Извиняюсь, вот информация: – ArunM

+0

Очки 19 Мин \t: -0,3925 Макс \t: 0,3925 Delta: 0,04361 – ArunM

ответ

1

Есть несколько ключевых моментов при выполнении такого рода вещей (и они применимы и к языкам, отличным от Tcl). Во-первых, вы должны вычислить дельту из диапазона, который вы хотите, и количества шагов, которые вы хотите. Во-вторых, вы должны: сохранить свой инкремент и управление контуром, используя целые числа, если вы можете, чтобы избежать ошибок заграждения, вызванных округлением; вместо этого вычислить значение для итерации цикла путем умножения дельта на счетчик циклов и добавления к исходному значению. В-третьих, вы должны подумать о том, что правильно точность при печати результатов; в 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 
+0

Привет Донал, Спасибо за ответ. Я сделал то же самое в excel (без цикла for), а в Matlab он немного проще (s = (min: delta: max)). В TCl я не принимал продукт $ i и $ delta. Но это очень полезно. Спасибо снова – ArunM

Смежные вопросы