2009-06-02 6 views
1

확인. 그래서 저는 MatLab에서 서로를 호출하는 두 가지 기능을 가지고 있습니다.MatLab 재귀 오류 (초급)

Riemann.m

function I = Riemann(f, dx, a, b) 
    x = a:dx:b; 
    fx = f(x).*dx; 
    I = sum(fx); 

및 myfunc.m

function f = myfunc(x) 
    f = sin(1./x); 
    for n=1:100 
     I = Riemann(@myfunc, 0.001, 1/n, 1); 
    end 
    plot(I) 

문제는 그 실행지고 있습니다. myfunc를 호출하여 그 밖의 것을 얻으려면 어떻게해야합니까? 내가 시도한 모든 것은 끝없는 재귀 호출 스택에서 끝난다.

+0

이 문제는 Matlab에서가 아니라 함수 자체에서 발생합니다. 의사 코드로 수학 함수로 다시 쓸 수 있습니까? 그래서 우리는 당신이 성취하고자하는 것을 볼 수 있습니까? – rodion

답변

4

당신의 문제는 당신의 함수의 정의에 있습니다 : 재귀 적 정의로 작업 할 수 있으려면 이 최소한 두 값 중 하나를 계산할 수 있어야합니다. 이어야하며 모든 계산이 재귀없이 얻을 수있는 결과에 의존하게됩니다.

특정 문제에 대해 f (x) = sin (1./x) 함수를 통합하려는 느낌이 들었습니다. 그렇다면 두 번째 함수의 코드는 다음과 같아야합니다.

function f = myfunc(x) 
    fct = @(x) sin(1./x); 
    f = fct(x); 
    for n=1:100 
     I = Riemann(fct, 0.001, 1/n, 1); 
    end 
    plot(I) 
+0

감사합니다. 그렇게하는 방법입니다. 또한 myfunc.m에서 for 루프를 분리하면 문제가 해결됩니다. 그런 간단한 일. –

0

myFunc가 Riemann 호출을 중지 할 때 입력 x에 대한 최종 조건이 필요합니다. 또한 Riemann에게 실제 함수 (이 경우 sin)를 보내는 것은 myFunc를 호출하는 것보다 더 좋은 아이디어입니다.

0

함수 myfunc는 f = sin(1./x); 이후에 끝나지 않습니다. 그곳에서 함수를 종료하고 다른 곳에서 플로팅 코드를 호출하십시오 (별도의 파일).

설명서에서 : 대부분의 경우 end 문을 사용하여 모든 기능을 종료 할 수 있지만 선택 사항입니다. end 문은 하나 이상의 중첩 된 함수를 사용하는 M 파일에서만 필요합니다. 이러한 M- 파일 내에서 모든 함수 (기본, 중첩, 개인 및 하위 함수 포함)는 종료 문으로 종료되어야합니다. 끝으로 모든 함수 유형을 종료 할 수 있지만 M- 파일에 중첩 된 함수가 포함되어 있지 않으면 필요하지 않습니다.