Как я могу написать bash-скрипт для вычисления интеграла? - PullRequest
2 голосов
/ 24 апреля 2019

Я хочу написать скрипт bash. Скрипт должен прочитать файл, содержащий две колонки. Он должен прочитать первую строку первого столбца (скажем, x1). Затем он должен прочитать второй ряд (скажем, v2) и первый ряд (скажем, v1) второго столбца. Затем он должен вычислить значение x1-y1, где y1 = v2-v1. Все это для каждой строки первого столбца до конца файла и возврата всех значений на выход.

Для моего личного и базового опыта реальная трудность - вызвать переменные, как я описал. Как написано в заголовке, операция заключается в оценке интеграла.

Если у вас есть какие-либо предложения, например, написать тот же скрипт на python, потому что проще. Это будет хорошо для меня.

Я действительно благодарю вас всех.

UPDATE Я пытался с Python. У меня есть некоторые трудности, чтобы получить итерационный скрипт. Вот что у меня есть:

import sys
import numpy as np

for i in range(0, 99):
xvals=np.loadtxt("pos{}.txt".format(i), float)
yvals=np.loadtxt("forc{}.txt".format(i), float)

if (len(xvals) != len(yvals)):
print ("Error bla bla")
sys.exit()

integr = 0

for i in range (1, len(xvals), 1):
integr = integr + yvals[i]*(xvals[i] - xvals[i-1])

integr=np.savetxt("work{}.txt".format(i), integr.reshape(1,), fmt='%1.5f')

Спасибо всем еще раз.

1 Ответ

1 голос
/ 24 апреля 2019

Я думаю, вам нужно взглянуть на массивы bash, поэтому вот пример, с которого можно начать:

#!/bin/bash

# Declare two arrays
declare -a x
declare -a y

# Read two values from each line of input file and append to arrays "x" and "y"
while read c1 c2 ; do
   x+=($c1)
   y+=($c2)
   echo "read c1=$c1 and c2=$c2"
   # Demonstrate some maths - a simple difference
   ((diff=c2-c1))
   echo "difference: $diff"
done < file.txt

# Print a couple of elements to see how to access them
echo "x[0]=${x[0]}"
echo "y[2]=${y[2]}"

Если я использую это как file.txt:

10 20
11 21
12 22

Я получаю это:

read c1=10 and c2=20
difference: 10
read c1=11 and c2=21
difference: 10
read c1=12 and c2=22
difference: 10
x[0]=10
y[2]=22

Надеюсь, этого достаточно, чтобы вы начали.Как я упоминал в комментариях, bash не может выполнять математические операции с плавающей запятой, поэтому, если ваши данные с плавающей запятой, вам, вероятно, потребуется использовать awk или Python.

...