Как сказать gnuplot игнорировать не сходящиеся припадки - PullRequest
0 голосов
/ 08 марта 2020

У меня есть некоторые проблемы с поиском хороших начальных условий для подгонки, которая просто не будет себя вести. Так что у меня возникла идея перебить его, вставив его в al oop, который говорит gnuplot продолжать подгонку, пока он не получит относительное отклонение менее 100% при случайном изменении начальных значений при каждом запуске l oop , я написал что-то вроде этого:

while(abs(m_err/m) > 1){
    m = rand(0)*0.3
    k = rand(0)
    x_0 = 15 + rand(0)*10 
    fit logi(x) 'data.csv' u 1:8 via m,k,x_0
}   

я умножаю функцию rand так, чтобы получить значения, близкие к значению, которое, как я ожидаю, будет подходящим для подгонки.

Этот метод, очевидно, приводит к большим приступов, не сходящихся и не останавливающих сценарий в середине l oop. Как я могу сказать gnuplot просто проигнорировать это и просто повторно запустить рандомизацию и подгонку l oop, если подгонка не сходится или она дает особую матрицу?

1 Ответ

1 голос
/ 09 марта 2020

Может помочь узнать, какую версию gnuplot вы используете. Насколько я знаю, не сходимость не является фатальной ошибкой в ​​текущем gnuplot. Он печатает сообщение об ошибке, но все равно должен продолжить. Если это не так, вы можете попытаться установить максимальное количество итераций, а затем самостоятельно протестировать сходимость, когда совпадение вернется. Например,

set fit maxiter 100   # no limit by default
set fit limit 1.e-5   # this is the default convergence criterion
do for [i=1:100] {
  a = something + i*0.01
  b = something_else
  fit f(x) 'datafile' using 1:2 via a, b
  if (FIT_ITER < 100) break;   # It converged!
}
if (FIT_ITER >= 100) {
  print "No starting point led to convergence."
  exit
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...