Нужна помощь в GNU octave
#!/usr/bin/awk -f
# reads a file with data and returns coefficients of
# least square approximation
# nstart is a number of the first row to use
# Usage:
# seq 10 | awk '{print sin($1)}' | ./fdnq.awk
# seq 10 | awk '{print sin($1)}' | ./fdnq.awk -v nstart=4
NR>nstart{
if (NF>1) {
x = $1
y = $2
}
else {
x = NR-1
y = $1
}
x1 += x
y1 += y
x2 += x*x
y2 += y*y
xy += x*y
n ++
}
END{
if( n > 1 ) {
a = (xy - x1*y1/n ) / ( x2 - x1*x1/n )
b = (y1 - a * x1 ) / n
r = (xy - x1*y1 /n ) / sqrt( x2 - x1*x1 / n) / sqrt ( y2 - y1*y1 /n)
# slope, b, correlation
print a, b, r
} else {
print "must be at least two points" > "/dev/stderr"
exit (-1)
}
}
a = (xy - x1*y1/n ) / ( x2 - x1*x1/n )Вот в этой строчке выдаёт
awk: cmd. line:13: (FILENAME=- FNR=15) fatal: division by zero attempted
не для всех точек, правда.
очень не пойму, почему это так.
дал больше точек, прошло. Только не пойму, что значит "FILENAME=- "
Только не пойму, что значит "FILENAME=- "[telepathy mode] stdin [/telepathy mode]
Оставить комментарий
Dmitry08
Есть куча текстовых файлов (2 столбца данных надо часть этих столбцов (с определённой строчки заданное количество) аппроксимировать прямой по мнк (ну и представить в каком-нибудь ps/png формате). Построить можно и gnuplot'ом используя маленький скриптик, проблема в аппроксимации. Слышал про octave (типа клона матлаба но диагональное чтение документации пока не дало ответа на вопросы:1. Каким образом можно передать в octave данные из sh скрипта.
2. Каким образом заданные точки аппроксимировать прямой линией y=ax+b
3. Как вернуть из octave коээфициенты a и b в шеллскрипт.
Буду крайне рад ответу.