2017-02-15 117 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);