Уважаемые форумчане, столкнулся с проблемой. Имеется некая функция
, которая зависит от трех параметров (и времени).
Экспериментально определены значения этой функции
для ряда значений времени
. Задача состоит в том, чтобы отыскать значения коэффициентов
чтобы расхождения между экспериментальным графиком и тем, что дает уравнение выше (с найденными значениями коэффициентов), было минимально.
Для этого я использовал МНК и Scilab.
Вот код
Код:
function [zr]=G(c,z)
zr=z(2)-c(1)*(1 - ((%e^((-c(2)*z(1))/(c(3))))/(sqrt(1-(c(2)^2))))*sin(((sqrt(1-(c(2)^2)))*(z(1)/c(3))) + atan((sqrt(1-(c(2)^2)))/c(2))))
endfunction
// Исходные данные
x=[3, 6, 8, 11, 14, 18, 21, 25, 29, 32, 38, 41, 47, 52, 59, 66, 71, 77, 83, 88, 93, 100, 108, 110];
y=[5.7, 20.8, 34.7, 59.2, 86.09, 122.1, 147.3, 176.68, 199.9, 212.9, 228.6, 231.8, 231.38, 226.3, 216.4, 206.7, 201.3, 197.05, 195, 194, 195.2, 196.7, 198.6, 199];
z=[x;y];
c=[100;0.5;12]; // Начальные приближения
[a,err]=datafit(G,z,c)
Проблема в том, что Scilab находит решение лишь в том случае, когда начальные значения (С(1), С(2) и др.) заданы очень близко к истинным. Стоит начальное значение одного из коэффициентов сделать больше или меньше истинного, Scilab либо сообщает, что проиходит деление на нуль, либо, что результат является некорректным числом.
Что Вы можете мне посоветовать? Может есть другие методы и инструменты для этого случая? Я просто не знаю, что делать и куда копать. Заранее спасибо.