集成用户定义功能的最佳方式

Best way to integrate user defined function

我想计算一个需要用户定义函数积分的表达式。
我有 3 个积分表达式输入,E、F 和 B。F 和 B 是存储在单独数组中的值。 E 是我想要积分的参数,从 0 到 B 的值。 我正在尝试将积分函数与用户定义的函数一起使用,尽管我不断收到矩阵维数错误,我不理解这是因为 F、B(我认为)的所有值都作为标量输入传递。

但是,我意识到对于循环的每次迭代我都在定义一个新函数,这似乎 "inelegant"。任何建议 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矩阵

对于第二个问题,你可以单独定义函数,然后使用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(:));