集成用户定义函数的最佳方式



我想求一个表达式的值,它需要一个用户定义函数的积分。
我有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

感谢

对于你的第一个问题,因为*在Matlab中表示矩阵算子,所以如果不是两边的运算都是标量,那么两边都必须有适当的大小,即m-by-n matrix * n-by-p矩阵

对于第二个问题,您可以单独定义函数,然后使用垂直化而不是For循环:

J=q*mu*8*pi*sqrt(2)*m.^1.5/h^3*Farray(1,:)*integral(@(E)nrgInt(E,Farray(1,:),Barray(:)),0,Barray(:));

最新更新