2017-02-15 62 views
0

我用Matlab做以下数值积分:Matlab中的数值积分:矩阵的维数必须一致吗?

LB=0.3; 
p_old=0.26; 
C_TT_old=0.03; 
r=0.63; 
m=5.02; 

[email protected](d)(((r*m).^(r+1)*(r+1))/((d+r*m).^(r+2)))*(m.^2*C_TT_old*(1+(2*d*(1+r))/(m))-p_old*d+r*m*(log(d/(r*m)+1))*(p_old/r+p_old-2*C_TT_old*m*(1+r)))/((d+m)*(d+m-1)/2); 
C_old=integral(integrand,LB,Inf); 

然而,MATLAB给我下面的错误

Error using/
Matrix dimensions must agree. 

Error in 
@(d)(((r*m).^(r+1)*(r+1))/((d+r*m).^(r+2)))*(m.^2*C_TT_old*(1+(2*d*(1+r))/(m))-p_old*d+r*m*(log(d/(r*m)+1))*(p_old/r+p_old-2*C_TT_old*m*(1+r)))/((d+m)*(d+m-1)/2) 


Error in integralCalc/iterateScalarValued (line 314) 
       fx = FUN(t); 

Error in integralCalc/vadapt (line 132) 
      [q,errbnd] = 
      iterateScalarValued(u,tinterval,pathlen); 

Error in integralCalc (line 83) 
     [q,errbnd] = vadapt(@AToInfInvTransform,interval); 

Error in integral (line 88) 
Q = integralCalc(fun,a,b,opstruct); 

能不能帮我修复代码?我不明白错误的来源,因为在我的代码中,所有东西都是标量的。

+2

您可能需要使用标量分割'。/'而不是矩阵分割'/'。乘法相同。当我在代码中进行更改时,我得到0.0539 –

+1

请参见:[整型文档](https://www.mathworks.com/help/matlab/ref/integral.html#inputarg_fun):'对于标量问题,函数y = fun(x)必须接受向量参数x,并返回向量结果y。这通常意味着乐趣必须使用数组运算符而不是矩阵运算符 – excaza

回答

1

您必须以将它作为向量处理参数'd'的方式编写被积函数。 matlab将用矢量计算inegrand,而不是用标量。 所以灵魂是使用'。'当你使用'd'时,在'./'和'。*'和'。^'中使用符号:

[email protected](d)(((r*m)^(r+1)*(r+1))./((d+r*m).^(r+2))).*(m^2*C_TT_old*(1+(2*d.*(1+r))/m)-p_old*d+r*m*(log(d/(r*m)+1))*(p_old/r+p_old-2*C_TT_old*m*(1+r)))./((d+m).*(d+m-1)/2);