Ну это еще сложно понять. Но тем не менее, позвольте мне попробовать и будем надеяться, что мы приближаемся к тому, что вы хотите.
В целях иллюстрации и для облегчения понимания значения в приведенных ниже примерах матриц выбраны следующим образом: <MatrixNo><RowNo><ColNo>
. После ваших комментариев теперь это матрицы 3x2.
Данные:
# Matrix1
111 112
121 122
131 132
# Matrix2
211 212
221 222
231 232
# Matrix3
311 312
321 322
331 332
# Matrix4
411 412
421 422
431 432
# Matrix5
511 512
521 522
531 532
Я думаю, что приведенные выше данные, вероятно, были бы лучше организованы так, как в примере код ниже. Конечно, вы можете переформатировать данные с помощью внешнего инструмента или даже с помощью gnuplot. Затем вы делаете подгонки в пределах al oop. Чтобы запомнить значения подходящих параметров, я использовал массивы (мне кажется, требуется gnuplot 5.0 или 5.2). В консоли gnuplot, например, введите help fit
или любое другое ключевое слово, чтобы получить дополнительную информацию.
Код: (Отредактировано для матриц I x J)
### fits in a loop
reset session
$Data <<EOD
0 111 112 121 122 131 132
1 211 212 221 222 231 232
2 311 312 321 322 331 332
4 411 412 421 422 431 432
8 511 512 521 522 531 532
EOD
M = 5 # number of matrices
I = 3 # number of rows of each matrix
J = 2 # number of columns of each matrix
N = I*J # number of y values
array aList[N]
array bList[N]
# fitting in a loop
f(x,a,b) = a*sqrt(x) + b
set fit nolog quiet
do for [i=1:N] {
fit f(x,a,b) $Data u 1:(column(i+1)) via a,b
aList[i] = a
bList[i] = b
}
# prepare the matrix output
do for [i=1:I] {
line = ''
do for [j=1:J] {
line = line.sprintf("%g ",bList[(i-1)*J+j])
}
print line
}
set key bottom right
plot for [i=1:N] $Data u 1:(column(i+1)) w p ti sprintf("Values %d",i), \
for [i=1:N] f(x,aList[i],bList[i]) w l ti sprintf("Fit %d",i)
### end of code
Результат:
97.1388 98.1388
107.139 108.139
117.139 118.139
Участок:
введите описание изображения здесь