Параметры gnuplot- распечатывают автоматически

В gnuplot существует ли способ автоматически распечатать параметры подгонки на сгенерированном рисунке? Например, если я подхожу к таблице данных

1   1
2   2
3   3

с помощью:

a=1
b=1
f(x) = a*x + b
fit f(x) 'data' using 1:2 via a, b

Я получаю результат a=1 и b=0. Я хочу напечатать их, используя что-то вроде

set label 'a=$a, b=$b' at (1,1)
show label

$трюк не работает, поэтому я надеялся, что вы можете дать мне несколько советов...

Ответ 1

То, что вы пытаетесь сделать, очень хорошо. Проблема, с которой вы сталкиваетесь, заключается в том, что ваш алгоритм фитинга падает из-за сингулярной инверсии матрицы. Вы можете решить эту проблему несколькими способами. Проще всего ограничить количество итераций, чтобы найти подходящую кривую. Итак, это script:

a=1
b=1
FIT_MAXITER = 1
f(x) = a*x + b
ti = sprintf("%.2fx+%.2f", a, b)
fit f(x) 'data' using 1:2 via a, b
plot [0:3] f(x) t ti, "data" w l

должен делать именно то, к чему вы стремитесь.

Обратите внимание, что проблема с сингулярной матричной инверсией не возникает, если ваши данные шумные, или ваша функция установки не имеет точной структуры в качестве ваших данных. Например, это

f(x) = a*x**2 + b
Функция

должна работать нормально, не ограничивая число итераций.

Дальнейшие способы управления процессом подгонки описаны в документации gnuplot (gnuplot.pdf или help set fit).

Ответ 2

Я нашел что-то очень интересное, которое может решить вашу проблему здесь. Кажется, что решение использует функцию sprintf и обычный синтаксис C для печати в строке. I. E., как в ссылке:

f(x) = m*x + c
fit f(x) "file" using 3:1 via m,c
set label 1 sprintf("m = %3.4f",m) at 510,75 font ",18"
set label 2 sprintf("c = %3.4f",c) at 510,70 font ",18"