Я пытаюсь установить некоторые данные с помощью Matlab, используя метод наименьших квадратов.while цикл до тех пор, пока не будет выполнено определенное условие на значение функции
Я нашел наиболее подходящие параметры, и теперь я хочу определить неопределенность.
Чтобы определить неопределенность по первому параметру, скажем, мы видели, что мы должны применять вариацию к одному параметру, пока разница между функцией (оцененной при этом измене) минус исходное значение функции равно 1
То есть, у меня есть вектор под названием [bestparam]
в моем коде Matlab, содержащий четыре параметра a, b, c и d.
У меня также есть функция, определенная в другом файле, называемая chi-square
, которую я оценил с лучшими параметрами.
Теперь я хочу применить небольшое изменение к параметру a и продолжать делать это до тех пор, пока хи-квадрат (a + вариация) - chi-square = 1. Разница должна быть ровно одной. Я применил для этого следующий код:
i = 0;
a_new = a + i;
%small variation on the parameter a
new_param = [a_new b c d];
%my new parameters at which I want the function chisquare to be evaluated
newchisquare = feval(@chisquare, [new_param], X, Y, dY);
%the function value
while newchisquare - chisquarevalue ~= 1
i = i + 0.0001;
a_new = a_new + i;
new_param = [a_new b c d];
newchisquare = feval(@chisquare, [new_param], X, Y, dY);
end
disp(a_new);
disp(newchisquare);
Но когда я выполняю этот цикл, он никогда не перестает работать. Когда я меняю условие на < 1
, то есть разница должна быть больше единицы, а затем останавливается примерно через 5 секунд. Но тогда разница между значениями функций больше не является одной. Например, мое исходное значение функции - 63.5509, а новое - 64.6145, что не совсем 1 больше.
Итак, есть ли способ реализовать код и продолжать обновлять параметр a до тех пор, пока разница не будет равна одному? Помощь приветствуется.