2015-11-01 3 views
0

У меня есть некоторые данные (два одинаковых вектора размера X и Y) и хотелось бы сопоставлять экспоненциальную функцию как f(x)=a+(b-a)*exp(-c*x) с этими данными MATLAB. Моя цель - найти коэффициенты a, b и c.Экспоненциальная кривая с 3 коэффициентами

Я нашел fit(X,Y,'exp2') и fit(X,Y,'exp1','StartPoint',[x0,y0]) в руководстве MATLAB, которые немного отличаются от того, что я ищу.

ответ

2

Можно подогнать с помощью custom equation:

f = fit(x, y, 'a+(b-a)*exp(-c*x)') 
+0

Спасибо! Я сделал это, но получил предупреждение о начальной точке, которая выбрана случайным образом! Это сообщение: Внимание: стартовая точка не указана, выбор случайного запуска пункт. > Предупреждение> Warning.throw at 30 In fit> iFit at 299 В соответствии с 108 – Amir

+1

@Amir Вы прочитали связанную документацию? вы можете указать начальную точку, используя 'fit (x, y, 'a + (b-a) * exp (-c * x)', 'StartPoint', [x0, y0])' –

+0

Да. Но я не уверен в выборе точки или какой точки моего набора данных. Это просто полезный момент для ускорения интерполяции (как первоначальное предположение для итераций)? Или это может повлиять на приведенную функцию и важно? – Amir

1

Одна великая вещь, что вы можете сделать, это использовать «Curve фитинг» App в Matlab. вы можете найти его в APPS, в разделе «Математика, статистика и оптимизация».

там вы можете выбрать свои данные x и y и функцию, которую вы хотите поместить над ними (экспоненциально или даже обычай).

Затем вы можете увидеть результаты фитинга на графике, а также параметры подгонки.

Если вы были удовлетворены результатами и хотите использовать их внутри кода, просто нажмите на код генерации под вкладкой «Файл». Curve fitting app

вы можете увидеть подробности на этом скриншоте, который я взял. после нажатия кнопки генерации кода, Matlab создаст fuction, который даст тот же результат. то, что я хотел бы сделать, это просто скопировать части мне нужно в этом случае:

 enter code here 
    [xData, yData] = prepareCurveData(x, y); 

    % Set up fittype and options. 
    ft = fittype('a +(b-a)*exp(-c*x)', 'independent', 'x', 'dependent', 'y'); 
    opts = fitoptions('Method', 'NonlinearLeastSquares'); 
    opts.Display = 'Off'; 
    opts.StartPoint = [0.957166948242946 0.485375648722841 0.8002804688888]; 

    % Fit model to data. 
    [fitresult, gof] = fit(xData, yData, ft, opts); 

, как вы можете увидеть MATLAB добавляет необходимые детали, и теперь вы можете получить доступ к подгоночным параметрам с помощью fitresult. например-> fitresult.a

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