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

时间:2015-05-19 17:36:54

标签: matlab integral

我想评估一个需要用户定义函数的积分的表达式 我有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

非常感谢

1 个答案:

答案 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(:));