Как правильно настроить интеграцию чисел в MATLAB? - PullRequest
4 голосов
/ 24 февраля 2011

Я хочу интегрировать это выражение:

Normal Distribution function:

Однако у меня, похоже, возникают проблемы при настройке функции.Как указано в этом объяснении 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

Входные данные должны быть скалярнымии квадратная матрица

Ответы [ 2 ]

5 голосов
/ 24 февраля 2011

Вы правильно настроили все для интеграции.Ошибка в определении самой функции.При использовании переменных для функции, которая будет интегрирована, "."(точка) должна предшествовать операторам, таким как ^ и *, когда они применяются к переменной:

function [y] = NDfx(x)

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

end
0 голосов
/ 24 февраля 2011

Krono и user57368 верны.Они уже правильно ответили на ваш актуальный вопрос.Мой ответ - просто ответить на вопрос, который вы не задавали.То есть, почему вы вообще используете здесь?Дело в том, что многие люди хотят интегрировать функцию этой формы, и это уже сделано!Используйте существующие инструменты для решения ваших проблем, так как эти инструменты часто написаны кем-то, кто знает, как решить проблему точно и эффективно.

В этом случае существующий инструмент состоит из функций erf и erfc,Они обеспечивают точное, эффективное векторизованное решение вашей проблемы.Единственное, что вам нужно сделать, - это выяснить, как преобразовать эти интегралы в текущую задачу, путем простого масштабирования ввода в erf и вывода.

...