我想评估一个需要用户定义函数的积分的表达式 我有3个输入到积分表达式E,F和B.F和B是存储在单独数组中的值。 E是我想要整合的参数,从0到B的值。 我试图使用带有用户定义函数的积分函数,虽然我不断得到矩阵维度错误,我不理解,因为F,B(我认为)的所有值都作为标量输入传递。
然而,我意识到,对于循环的每次迭代,我都在定义一个新函数,这看起来“不优雅”。任何建议 1.为什么它不会按原样运行(即使用*的错误,内部矩阵尺寸必须一致) 2.更优雅的解决方案?
这是循环
for i=1:51
% DEFINE energy integrand, without prefixes
nrgInt=@(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
非常感谢
答案 0 :(得分:1)
对于你的第一个问题,因为Matlab中的*
代表矩阵运算符,所以如果不是操作的两边都是标量,那么两者都必须具有适当的大小,即m-by-n matrix * n-by-p
矩阵
对于第二个问题,你可以单独定义函数,然后使用vertorizing而不是for-loop:
J=q*mu*8*pi*sqrt(2)*m.^1.5/h^3*Farray(1,:)*integral(@(E)nrgInt(E,Farray(1,:),Barray(:)),0,Barray(:));