2014-12-07 1 views
0

MATLAB에서 'trapz'명령을 사용하여 삼중 정수를 계산하려고합니다. 내 integrand는 gamma1, gamma2, s의 함수입니다 ... 나는 정수를 수치 적으로 평가하고 상징적으로 평가하지 않습니다.사각형 상자의 일부에 trapz를 사용하는 삼중 적분

syms gamma1; syms gamma2; syms s 
f=gamma1*gamma2*exp(-s*10); 
x= -20:0.3:20; 
y=linspace(0.1,100000,length(x)); 
z=linspace(0.1,100000,length(x)); 
[s,gamma1,gamma2] = ndgrid(x,y,z); 
mat=eval(f).* (gamma2>gamma1);   %MY QUESTION IS HERE 
out = trapz(x,trapz(y,trapz(z,mat,3),2),1); 

제 질문은 필자의 integrand에 대한 조건입니다. 감마 2> gamma1 일 때만 평가해야합니다. 위의 코드가 정확합니까? 즉 논리 문장을 올바르게 추가하는 방법입니까?

답변

0

예, 논리가 정확합니다. mat은 조건 gamma2>gamma1이 실패하는 0을 갖습니다.

이미 답변을 알고있는 예제를 사용하여 정확성을 직접 테스트 할 수 있습니다. 예를 들어, 각 변수의 [0,2]에 f=gamma1*gamma2*s을 통합하면 8 개 (종이와 연필로)가 제공되고 조건이 gamma2>gamma1이면 결과가 반으로 줄어 (대칭에 따라) 4가됩니다. 실제로 코드는이 함수에 대해 약 4를 반환합니다. 로


여담 : 당신이 (100000에 의해 100000 40) 크기의 차이 주어진 모든 차원에서 샘플 포인트의 같은 번호를 사용하는 바람직 함을 재고 할 수 있습니다.

+0

감사합니다. 모든 치수에서 샘플 지점 수를 다르게 선택할 수 있습니까? 하나 시도해도 오류가 있다고 생각합니다. 예를 들어주세요. – Tyrone

+0

나를위한 작업 : 예를 들어 ,'x = 0 : 0.01 : 2; y = 0 : 0.01 : 3; z = 0 : 0.01 : 5;와 나머지는 이전과 같습니다. –

+0

고마워, 나를 위해 너무 작동합니다. 당신이 한 가지 더 질문 할 마음이 없다면, 나는 내 기능의 여분의 조건을 가지고있다. 나는 항상 s가 0과 같지 않기를 바란다. 이미이 논리 연산을 추가 할 수 있습니까? – Tyrone