0

Мне нужно, чтобы данные, данные в Runreg.m, находились в уравнении, приведенном в CalculateTime.m, но значение resnorm довольно велико, и я не могу получить хорошую форму.Использование lsqcurvefit, как я могу улучшить установку

С полученными значениями A и sigma, если I CalculateTime сильно отличается от фактического времени.

CalculateTime.m

function [ Ta] = CalculateTime(par_fit,n) 
    T1=484.437812; 
    sigma = par_fit(1); 
    A= par_fit(2); 
    const1= sigma*(T1-T1/(2*A)); 
    const2= T1/A -T1*sigma/(2*A); 
    Ta = n.^(-1)*const1 + const2; 
end 

Runreg.m

n=[1.0000  1.5000 2.0000 2.5000 3.0000 4.0000]; 
Ta=[484.437812 424.2085 382.3534 352.1422 311.6865 253.5879]; 
plot(n,Ta,'o') 
par_fit=[0.8,2]; 
options = optimset('Display','iter','TolX', 1e-10, 'TolFun', 1e-10, 'MaxFunEvals', 4000, 'MaxIter', 4000); 
[x,resnorm,residual]=lsqcurvefit(@CalculateTime,par_fit,n,Ta,[0 1],[1 Inf],options); 
hold on 
plot(n,CalculateTime(x,n)) 
hold off 
+0

@HighPerformanceMark: Просто обновил вопрос. – Biparite

ответ

0

То, что вы, вероятно, следует сделать в первую очередь, это изменить TolX и TolFun некоторых более разумных значений. Установив их на 1e-100, это не улучшит результат, а просто вызовет больше итераций, чем необходимо. Я приложил график результата подгонки, используя 1e-10 для обеих допусков. Параметры, которые я получаю, - sigma=0.9881 и A=1.0000, и пригонка выглядит вполне приемлемой. resnorm - 483.2636, который может выглядеть высоко, но помните, что это сумма квадратов остатков, поэтому средний остаток равен приблизительно 13, что кажется вполне приемлемым.

Я думаю, что вы должны спросить себя: sigma и A находятся в пределах допустимого диапазона для параметров, которые вы пытаетесь подобрать, и подумайте немного больше о проблеме, которую вы пытаетесь решить. Может быть, еще несколько точек данных могут помочь лучше подойти? Возможно, ваши исходные значения или границы ваших параметров могут быть скорректированы? На мой взгляд, lsqcurvefit делает именно то, что он должен делать, и ваша фактическая проблема - это что-то еще.

Result of lsqcurvefit

+0

Я добавил больше данных. пригодность подходит для меньших значений n, но идея состоит в том, чтобы использовать эту модель для больших значений n, которые она терпит неудачу. Как вы упомянули «Возможно, ваши исходные значения или границы для ваших параметров могут быть скорректированы», можете ли вы это объяснить. – Biparite

+0

Я пробовал его с большим количеством точек данных, и кажется, что функция, которую вы пытаетесь подобрать к данным, может не точно описать ее. Не могли бы вы рассказать нам больше о процессе, который вы измеряете, и о уравнениях, которые вы используете? Мой комментарий о начальных значениях/границах означает, что иногда результат подгонки может зависеть от начальных параметров, когда решатель застревает в локальном минимуме, но это, вероятно, не так. – magnetometer

+0

Это модель для прогнозирования времени выполнения на любом количестве узлов. 'tn = σ (T1 -T1/2A)/n + T1/A -T1σ/2A; A Biparite

Смежные вопросы