Massively refactoring my question after @user2974951 feedback below.
I have a set of measurements (time, temperature) that correspond to a certain physical process. Both time and temperature measurements have some error.
The model of the process I'm going to use is
$f(t) = a + e^{bt}$
where $f(t)$ is the temperature, $t$ is the time, and $a$ and $b$ are some unknown coefficients.
What would be the best approach to find these unknowns?
My brute-force approach would be to iteratively bisect both $a$ and $b$ by going over the dataset multiple times, but perhaps there is a more efficient solution.
EDIT:
An example dataset would be [(3.7,15.1), (5.5,14.3), (7.1,13.6), (8.9,13.0), (9.7,12.8), ...]
and the output of the algorithm would be something like a=10, b=-0.1
. The actual output values would be similar, but not exactly what I specified.
EDIT 2:
There are typically more points in the dataset than just the 5 that I initially suggested. I would guess that we can afford at least 10 measurements, maybe more, but not arbitrarily more - PSNR drops, and we eventually measure only noise.
The error in the time variable $t$ is small, only a few milliseconds, while the whole timespan is many seconds. The error in the temperature variable is significantly larger, say 5% of the whole observed range.
EDIT 3:
It seems that I forgot about horizontal alignment and to address that I need the third unknown. Therefore the approximating formula becomes
$f(t) = a + e^{bt + c}$
which adds another level of complication to my naive brute-force approach.
EDIT 4:
My question was marked as a duplicate, but it's not the same topic as referred questions. I can't use a well-established software where I just say "make a fit" and the curve is automagically fitted for me. I have to actually implement the fit myself.
Answering a question below - if implemented on an embedded platform, then this would be C and no external libraries. If implemented server-side - then Java or Kotlin and a wide choice of what to link against.
EDIT 5:
I can't answer my own question, perhaps because it's marked as a duplicate. This is the last update.
I have settled on my bisect algorithm (first $b$, then $c$, then $a$) that gives me $O(N (logN)^2)$ complexity. It feels fast on a mac, but I have doubts if it is suitable for an embedded solution on a low-power ARM processor.