введите здесь описание изображения. Я не знаю, как выбрать lb
и ub
для lsqcurvefit
в MATLAB, а также x0
, чтобы подогнать мою функцию к данным, я имею в виду, что у меня есть некоторые выходные данные, но они неверны,
Вот мои данные:
xdata= [22.8700000000000;7.92000000000000;3.45000000000000;1.78000000000000;
1.57000000000000;6.41000000000000;12.9000000000000;1.82000000000000;
1.86000000000000;3.71000000000000;12.0900000000000;15.9900000000000;
18.9600000000000;23.1500000000000;23.4500000000000;24.8200000000000;
25.0700000000000;13.2800000000000];
ydata= [8.44300000000000;7.92100000000000;7.64600000000000;7.51600000000000;
7.47100000000000;7.82100000000000;8.03200000000000;7.76200000000000;
7.77400000000000;7.87800000000000;8.07000000000000;8.26000000000000;
8.40000000000000;8.52000000000000;8.52000000000000;8.57000000000000;
8.58000000000000;8.03200000000000];
и тогда у меня будет myfunc в отдельном файле m:
function F = myfun(x,xdata)
F=x(1)*(1-x(2)^2)./((1+x(2)^2+2*x(2)*cosd(xdata)).^1.5);
У меня есть x(1)
и x(2)
, неизвестные, которые я люблю оценивать после подгонки к моим данным, и я знаю, что k x(2)
не будет отрицательным значением.
Поэтому я установил lsqcurvefit
следующим образом:
[x, resnorm]=lsqcurvefit(@myfun,[-0.5:0.5], xdata, ydata, 0, 1.5, options)
И это результат:
x = 1,5000 -0,4945
resnorm = 52,1739
который показывает отрицательное значение для x(2)
!
Не могли бы вы мне помочь?
Большое спасибо за ответ на мой вопрос, и теперь, когда команда вычислила x и resnorm, я использую результаты в своей функции, это означает, что я использовал x (1) = 92,8054 x (2) = 0,7427
so;
F=92,8054*(1-(0,7427)^2)./((1-0,7427)^2+2*(0,7427)*cosd(xdata)).^1,5;
теперь у меня есть вектор F , когда я рисую свои данные и результаты, plot(xdata, ydata, 'o', xdata, F, '*')
Я не понимаю, почему диапазон оси y такой разный! может быть, мне нужно добавить x (3) к моей функции.
Я прикрепил рисунок.