Подгонка Gnuplot: особая матрица в заданном или особая матрица в обратном ртр
Я хотел бы объединить данные с gnuplot с параметром подгонки, который является интервалом подгонки. Это не работает даже на моем собственном примере:
Вот мой код:
fichier="test_fit_droite"
f1(x)=a1-b1*x
#f2(x)=a2-b2*log(1-x/Tc)
#f(x)=x<Tc ? f1(x):f2(x)
f(x)=f1(x)
Tc=8
w1=33
w2=2
a1=1
a2=1
b1=1
b2=1
plot fichier using ($1):($2)
fit [0:w1] f(x) fichier using ($1):($2) via w1, a1, b1
Вот мои данные:
1 9.3
2 12.8
3 15
4 18
5 21
6 24
7 27
8 30
9 33.2
10 36
11 39
12 42
13 45.9
14 48
15 51
16 54
17 59
18 60
19 63
20 66
21 69
22 72
23 75
24 78
25 81
26 84
27 87
28 90
29 115
30 20
31 320
32 40
33 23
И ошибка:
введите описание изображения здесь
Фактически у меня есть почти кривая y=3*x+6 для x<28, и после того, как я поместил данные, которые делают что-то совершенно случайное и неподходящее для y=3*x+6
Я хочу, чтобы gnuplot обнаружил, что должен остановить примерку после x=28, но не находит его.
Когда я ставлю a1=3, b1=-6, и я просто помещаю w1, gnuplot говорит "особая матрица в числах" и ничего не делает (останавливается на шаге 0)
Не могли бы вы помочь мне?
Спасибо!!
================== EDIT ========================
Теперь я хочу поместить свою функцию в объединение двух интервалов.
Вот мой код:
f(x)=(x<Tc0-w1|x>Tc0+w2)?exp(a2)*1/((abs(x-(Tc0))**b2)):1/0
plot f(x), fichier_cv using (Tc0-w1 < $1 && $1 < Tc0+w2 ? 1/0 : $1):($2)
pause -1
fit f(x) fichier_cv using (Tc0-w1 < $1 && $1 < Tc0+w2 ? 1/0 : $1):($2) via Tc0, a2, b2
Я определил мои переменные Tc0 и т. Д. Выше.
Первые две строки работают отлично (я вижу график с "разрезом" посередине).
Но припадок возвращает мне это:
Максимум. количество точек данных, увеличенных до: 3072 Макс. количество точек данных, увеличенных до: 4608 Неопределенное значение во время оценки функции "fit_en_cours", строка 37: ошибка во время подгонки
Я не понимаю "неопределенное значение", потому что график работает отлично, и мой файл содержит значения за пределами [Tc0-w1;Tc0+w2]
Более того, я сделал это:
fit [7.56:12.9] f(x) fichier_cv using (Tc0-w1 < $1 && $1 < Tc0+w2 && $1 < 12 && $1 > 7.55 ? 1/0 : $1):($2) via Tc0, a2, b2
(7.55 и 12 - это минимальные и максимальные значения x моего файла данных), но он возвращает мне ту же ошибку.
Спасибо вам