2015-01-29 4 views
0

У меня есть два массива:Кривая Место для уравнения с двумя параметрами

E= [6656400; 
    13322500; 
    19980900; 
    26625600; 
    33292900; 
    39942400; 
    46648900; 
    53290000] 

и

J=[0.0000000021; 
    0.0000000047; 
    0.0000000128; 
    0.0000000201; 
    0.0000000659; 
    0.0000000748; 
    0.0000001143; 
    0.0000001397] 

Хочу найти соответствующую кривую фитинг для приведенных выше данных, применяя это уравнение:

J=A0.*(298).^2.*exp(-(W-((((1.6e-19)^3)/(4*pi*2.3*8.854e-12))^0.5).*E.^0.5)./((1.38e-23).*298)) 

Я хочу выбрать начальное значение W из 1e-19

Я пробовал инструменты для подгонки кривой, но это не помогает мне решить эту проблему!

Затем я выбрал некоторые случайные значения A0 = 1.2e9 и W = 2.243e-19, это дало мне лучшие результаты. Но я хочу найти правильные значения, используя код (а не приложение для подбора кривой).

Помогите мне пожалуйста?

+0

Вы можете использовать этот пост для вдохновения: http://stackoverflow.com/questions/28112559/exponential-curve-fit-matlab/28113190#28113190 - По существу, вы должны взять 'журнал' уравнения так, чтобы оно становится линейным в пространстве «log», а затем вычисляет коэффициенты линейной регрессией. – rayryeng

ответ

1

Быстрое (и потенциально простое) решение будет заключаться в том, чтобы сфокусировать кривую как проблему минимизации.

Определить корреляционную функцию, которая принимает уложения параметров в качестве аргумента:

% x(1) == A0; x(2) == W 
Jfunc = @(x) x(1).*(298).^2.*exp(-(x(2)-((((1.6e-19)^3)/(4*pi*2.3*8.854e-12))^0.5).*E.^0.5)./((1.38e-23).*298)); 

Тогда целевая функция свести к минимуму. Поскольку у вас есть данные J мы минимизировать сумм квадратов разности между данными и корреляции:

Objective = @(x) sum((Jfunc(x) - J).^2); 

, а затем попытаться свести к минимуму цели использования fminsearch:

x0 = [1.2E9;2.243E-19]; 
sol = fminsearch(Objective,x0); 

I использовал догадки, которые вы дали. Для нелинейных решений для сходимости часто важно хорошее предположение.

Если у вас есть панель инструментов оптимизации, вы также можете попробовать lsqcurvefit или lsqnonlin (fminsearch - vanilla MATLAB).

+0

Спасибо! Ваш гений :) –

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

  • Нет связанных вопросов^_^