2013-10-31 2 views
1

링크의 문제 : http://i.imgur.com/4w9YWTb.png은 분석적으로 통합 될 수 있으며 대답은 4입니다. 그러나 Matlab을 사용하여 수치 적으로 통합하는 데 관심이 있습니다. 양식에서 통합 할 수없는 문제와 유사하기 때문에 분석적으로. 수치 적분의 어려움은 두 개의 내부 적분의 함수가 x, yzz의 함수이므로 고려할 수 없습니다.중첩 된 수치 적분

+1

안녕하세요. :-) 나를 믿지 않았다, 그렇지? 어쩌면 누군가 해결책을 내놓을 것입니다. 하나의 설명 : 아무 것도 x에 의존하지 않으므로 내부 통합 중 하나를 삭제할 수 있습니다. \ int_0^1 dx = 1. 그래도 문제는 변하지 않습니다. –

+0

정확히 답이 아닌 내 대답을 삭제했습니다. 심볼릭 수학 도구 상자를 사용하여'syms yz'를 정의하면 int (z * exp (int (1/(y + z), y, 0, 1)), z에 대해 4를 얻는다는 주석으로 지적하는 것이 더 낫습니다. 0, 2)'이고, 그렇지 않으면'integral2'는 여기에 적용되지 않습니다. –

+0

@ A.Donda 사실, 내 목표는 문제를 일반화하기 위해이 방법으로 작성했습니다. 나는 여기 누군가가 우아한 해결책을 찾길 바란다. –

답변

0

음보다 더 나은 뭔가를 사용하여 더 나은 솔루션을 받아야합니다,이 포스터의 유사 이전 질문에 내가 주장 때문에이 Guddu의 대답 나는 보았다 한 후 지금 수행 될 수없는, 이상하다 그 복잡하지 않다는 것을 깨달으십시오. 이전에 썼던 것은 수치 적 통합으로 인해 숫자가 나오지만 함수가 아니라는 것이 사실입니다. 그러나 요점은 다음과 같습니다. 모든 주어진 매개 변수에 대해 적분을 평가하는 함수를 정의하면 효과적으로 하나의 에 포함됩니다. 수치 적분의 결과로서의 기능.

어쨌든, 여기 간다 :

function q = outer 

    f = @(z) (z .* exp(inner(z))); 
    q = quad(f, eps, 2); 

end 

function qs = inner(zs) 
% compute \int_0^1 1/(y + z) dy for given z 

    qs = nan(size(zs)); 
    for i = 1 : numel(zs) 
     z = zs(i); 
     f = @(y) (1 ./ (y + z)); 
     qs(i) = quad(f, 0 , 1); 
    end 

end 

나는 X를 제거 댓글에 자신에 의해 제안 단순화를 적용했다. inner 함수는 y에 대한 내부 적분 값을 z의 함수로 계산합니다. 그런 다음 함수 outer는 z에 대한 외부 적분을 계산합니다. I는 결과가

4.00000013663955 

innerquad 요구에 부여 된 기능을 리턴 할 수 있기 때문에 for 루프를 사용하여 구현 될 필요가있다 eps 아니라 0부터 통합 실행 시켜서 Z = 0에서의 자극을 피하기 그 값은 여러 인수 값에 대해 동시에 나타납니다.

+0

답변 해 주셔서 감사합니다. –

+0

@Guddu 답변 해 주셔서 감사합니다. –

1

이것은 결코 우아하지 않습니다. 누군가가 나를보다 matlab에 기능을 더 잘 활용할 수 있기를 바랍니다. 나는 수치 적 통합을 연습하기 위해 무차별 방식으로 노력했다. 나는 그것이 z로 곱해진다는 사실을 이용함으로써 z = 0에서의 내부 적분의 극을 피하려고 노력했다. 나는 3.9993을 얻는다. 사람이 사다리꼴 규칙

function []=sofn 
clear all 

global x y z xx yy zz dx dy 

dx=0.05; 
x=0:dx:1; 
dy=0.002; 
dz=0.002; 
y=0:dy:1; 
z=0:dz:2; 

xx=length(x); 
yy=length(y); 
zz=length(z); 

s1=0; 
for i=1:zz-1 
    s1=s1+0.5*dz*(z(i+1)*exp(inte1(z(i+1)))+z(i)*exp(inte1(z(i)))); 
end 
s1 

end 

function s2=inte1(localz) 
global y yy dy 

if localz==0 
    s2=0; 
else 
s2=0; 
for j=1:yy-1 
    s2=s2+0.5*dy*(inte2(y(j),localz)+inte2(y(j+1),localz)); 
end 
end 

end 

function s3=inte2(localy,localz) 
global x xx dx 

s3=0; 
for k=1:xx-1 
    s3=s3+0.5*dx*(2/(localy+localz)); 
end 

end