2013-10-26 2 views
0

나는 Simpson의 규칙에 함수를 작성하여 복제하려고합니다. 그러나 MatLab에서 문자열을 실제 함수로 변환하는 데 eval을 사용하는 방법이 아직 명확하지 않습니다.Simpson의 규칙, eval과의 오류를 복제하십시오.

기능은 다음과 같습니다

function result = simpson(fun, x0, xn, n) 
    f = eval(fun); 
    h = (xn-x0)/2; 
    xstart = f(x0) + f(xn); 
    x1 = 0; 
    x2 = 0; 

    for i = 1:n-1 
     x = x0 + h*i; 
     if (mod(i,2) == 0) 
      x2 = x2 + f(x); 
     else 
      x1 = x1 + f(x); 
     end 
    end 

    result = h*(xstart + 2*x2 + 4*x1)/3; 

보고 된 오류가

Error using eval 
Undefined function or variable 'x' 

가 어떻게 함수의 스트링 형태로 X를 전달할 수있다?

답변

1

깨끗한 방법 : 함수 핸들을 사용하여 eval을 피하십시오.

기능 핸들은 여기에 설명되어 있습니다 : 함수

sqr = @(x) x.^2; 

를 다음 호출 : http://www.mathworks.de/de/help/matlab/ref/function_handle.html

이처럼 정의 함수 내에서

simpson(sqr, 1, 2, 3); 

을, 당신이 호출 할 수 전자해야 fun (3) 결과적으로 9 점을 얻습니다. simpson('@(x) x.^2')가 (평가가 적절한 기능 핸들을 생성)

  • 더러운 방법 :

    1. 부적 절한 방법 : 당신이 평가를 사용해야 할 경우


      , 나는 두 가지 솔루션을 볼 수 있었다 :

      function result = simpson(fun) 
          x = 4; 
          f = eval(fun); 
          result = f; 
          return; 
      end 
      

    이처럼 전화 : simpson('x.^2')

  • +0

    감사하지만 내 질문에 대답하지 않았다. 함수 핸들을 사용하는 법을 알고 있습니다. eval()을 사용하여이 문제를 해결하도록 요청 받았습니다. – user2431438

    1

    문제는 여기에 eval가 사용되는 방법입니다. documentation은 사용자의 예에서 출력 f이 함수 핸들 (코드에서 사용하는 방식으로 예상 됨)이 아니라 fun 함수의 출력임을 나타냅니다.

    따라서 eval 기능을 작동 시키려면 입력을 제공해야합니다. 예를 들어

    : 한마디로 f == 16

    에서

    fun = 'x.^2';  
    x = 4;  
    f = eval(fun); 
    

    결과, 언제든지 당신은 당신이 적절한 값으로 x을 설정 평가를 호출하고 결과를 저장해야 fun를 호출하고 싶습니다.

    예를 들어, 코드 :

    f = eval(fun); 
    h = (xn-x0)/2; 
    xstart = f(x0) + f(xn); 
    

    이 될 것입니다 :

    h = (xn-x0)/2; 
    x = x0; 
    fx0 = eval(fun); 
    x = xn; 
    fxn = eval(fun); 
    xstart = fx0 + fxn; 
    

    나는 기능이 구현의 안전하고 쉬운 방법으로 처리하는 것이 좋습니다,하지만 코멘트에서 언급 한 것이 귀하의 경우에는 허용되지 않습니다.

    관련 문제