Я хотел бы оценить выражение, которое требует интеграла от определяемой пользователем функции.
У меня есть 3 входа для интегрального выражения, E, F и B. F и B - значения, хранящиеся в отдельных массивах. E - параметр, который я хотел бы интегрировать, начиная с значения 0 и заканчивая значением B. Я пытаюсь использовать интегральную функцию с пользовательской функцией, хотя я продолжаю получать ошибку измерения матрицы, которой я не занимаюсь понимают, что все значения для F, B (я думал) передаются как скалярные входы.Лучший способ интегрировать определенную пользователем функцию
Однако я понимаю, что для каждой итерации цикла я определяю новую функцию, это кажется «неэлегантным». Любые советы относительно 1. Почему он не будет работать как есть (т. Е. Ошибка с использованием *, размеры внутренней матрицы должны совпадать) 2. Любое более элегантное решение?
Вот петля
for i=1:51
% DEFINE energy integrand, without prefixes
[email protected](E,F,B) sqrt(E)*exp(-8*pi*(m*q)^(0.5)*(B-E)/(3*h*F))/(exp(E/(k*Temp))+1);
% Integrate over energy range, store
J(i)=q*mu*8*pi*sqrt(2)*m.^1.5/h^3*Farray(1,i)*integral(@(E)nrgInt(E,Farray(1,i),Barray(i)),0,Barray(i));
clear nrgInt
end
Высокую оценку
Спасибо, я понимаю, что * был для матрицы, но я думал, что передаю ему только скаляры. Я продолжу свое решение, кажется, лучше, но мне любопытно, почему это дало мне ошибку *, если E, F и B были скалярами. – daFireman
Привет, опять же, это не работает, и, похоже, оно связано с интегральной функцией. Если я просто определяю свой nrgInt и вызываю его из командной строки, он отлично работает, но если я попытаюсь его интегрировать, это дает мне проблему *, даже если я НЕ пропускаю матрицы. Как я могу интегрировать свою функцию? 'nrgInt = @ (E, F, B) sqrt (E) * exp (-8 * pi * (m * q)^(0,5) * (BE)/(3 * h * F))/(exp (E/(k * Temp)) + 1); ' ' интеграл (@ (E) nrgInt (E, 0,1,1), 0,1) Ошибка при использовании * Размеры внутренней матрицы должны совпадать. ' – daFireman
Nevermind, решение менее интересно, чем я думал. Integral должен использовать операции массива по определению, я пытался заставить матричные операции использовать * вместо. * И/вместо ./. RTFM на помощь. – daFireman