2011-02-24 2 views
4

나는이 표현을 통합 찾고 있어요 :MATLAB에서 수치 적분을 어떻게 올바르게 설정합니까?

Normal Distribution function:

그러나 나는 기능을 설정하는 데 문제가 될 것 같다. this MATLAB 설명에 명시된 바와 같이,이처럼 보이는 'NDfx.m'라는 별도의 함수를 정의했습니다 :

function [ y ] = NDfx(x) 

    y = (1/sqrt(2*pi))*exp(-.5*x^2); % Error occurs here 

    end 

을 그러나 나는 위의 주석 줄에서 오류가 내 주요 함수 내에서 호출 할 때 . 내 주요 기능은 다음과 같습니다 : 내가 얻을

function[P] = NormalDistro(u,o2,x) 

delta = x-u; 
dev = abs((delta)/o2);   % Normalizes the parameters entered into function 
P_inner = quad(@NDfx,-dev,dev); % Integrates function NDfx from -dev to dev (error here) 
P_outer = 1 - P_inner;   % Calculation of outer bounds of the integral 

if delta > 0 
    P = P_inner + (P_outer/2); 

elseif delta < 0 
    P = P_outer/2; 

elseif dev == 0 
    P = .5; 

end 
end 

특정 오류 : ==에

오류> MPower에서는

입력 스칼라와 정방 행렬이어야합니다

+0

또는 Mathematica로 전환 할 수 있습니다. 예를 들어 대답은 www.wolframalpha.com/input/?i=Integrate[e^(-x^2/2)/Sqrt[2Pi],x] – Margus

+0

입니다. 나는 MATLAB에서 이것을 사용하는 다른 사람들을위한 함수를 작성하고있다. – KronoS

답변

5

통합을 위해 모든 것을 올바르게 설정했습니다. 오류는 함수 자체의 정의에 있습니다. 통합 될 함수에 변수를 사용할 때 "." 그들은 변수에 적용될 때 ^* 같은 연산자를 앞에 와야합니다 (기간) :

function [y] = NDfx(x) 

    y = (1/sqrt(2*pi))*exp(-.5*(x.^2)); 

end 
+4

점은 지수를 힘 단위로 올리려고하는 것이 아니라 요소 단위로 행해진 다. 연산자'. ^'는 연산자'^'와 다릅니다). 이것은 수치 적 적분기가 값의 벡터를'NDfx '로 전달할 것이고 함수가 전달 된 것과 동일한 모양의 벡터로 반환 된 결과와 함께 개별적으로 각 값에 적용되어야하기 때문에 필요합니다. * vectorized * 함수로 알려진 것이고, 그것은 새로운 값을 계산할 때마다 함수를 다시 호출하는 것보다 효율적입니다. – user57368

+0

설명해 주셔서 감사합니다. @ user57368 – KronoS

0

Krono 및 user57368는 정확합니다. 그들은 이미 당신의 실제 질문에 정확하게 대답했습니다. 제 대답은 단지 당신이 묻지 않은 질문에 대답하는 것입니다. 즉, 쿼드를 사용하는 이유는 무엇입니까? 요점은 많은 사람들이 그 형식의 기능을 통합하고자하며 이미 완료된 것입니다! 문제를 정확하고 효율적으로 해결하는 방법을 알고있는 사람이 도구를 작성하기 때문에 기존 도구를 사용하여 문제를 해결하십시오.

이 경우 기존 도구는 erf 및 erfc 함수로 구성됩니다. 이들은 문제에 대한 정확하고 효율적인 벡터화 된 솔루션을 제공합니다. 당신이해야 할 일은 erf와 출력에 대한 입력의 단순한 조정만으로 현재의 문제로 그 통합을 변환하는 방법을 파악하는 것입니다.

+1

어떻게 작동합니까? –

+0

MATLAB 내에서 수치 적분을 설정하는 방법을 설명하는 질문을 올리려고했습니다. 이전에 제대로 처리하지 못했기 때문입니다. 이제 MATLAB에서 필수 요소를 설정하려는 사용자는 여기에서 쉽게 찾을 수 있습니다. – KronoS

관련 문제