Подгонка кривой с использованием уравнения, включающего интеграл, который невозможно решить аналитически? - PullRequest
1 голос
/ 08 июля 2011

Я пытаюсь за 2 дня подгонять некоторые данные, которые у меня есть, используя это уравнение

f = @(x) ((x.^4) .* exp(x)) ./((exp(x)-1).^2);
gama*x + 9*R*((x/a)^3)*quad(f,0,a/x);

Здесь x - независимая переменная, а a неизвестно, gama известна. Я попробовал следующую процедуру с наибольшим успехом.

function C=myquad(a,T)
C = zeros(size(T));
gama = 20 * 1e-3;
R = 8.314;
f = @(x) ((x.^4) .* exp(x)) ./((exp(x)-1).^2);
for n = 1:length(T)
    C(n) = gama*T(n) + 9*R*((T(n)/a)^3)*quad(f,0,a/T(n));
end


>>fit(T_0,C_0,fittype('myquad(a,x)'));

Возвращена следующая ошибка

??? NaN рассчитывается по модельной функции, примерка не может быть продолжена. Попробуйте использовать или ужесточить верхнюю и нижнюю границы коэффициентов.

Ошибка в ==> соответствует 443 errstr = handleerr (errid, errmsg, suppresserr);

Не знаю, что делать. Пожалуйста, руководство ..

1 Ответ

2 голосов
/ 08 июля 2011

Узнайте, почему ваша функция возвращает NaN. NaN результат деления 0 на 0 или других причин .

Ваша функция f(x) будет вычислять 0/0 для x=0:

>> f = @(x) ((x.^4) .* exp(x)) ./((exp(x)-1).^2);
>> f(0)

ans =

   NaN

Измените свои пределы интеграции, чтобы вы не включали 0, или переопределите вашу функцию f, чтобы лучше вести себя при 0.

...