Ответ 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
).