2017-02-15 4 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를 반환해야합니다. 이것은 일반적으로 fun가 행렬 연산자 대신 배열 연산자를 사용해야 함을 의미합니다 .' – 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);