4 Stimmen

Wie richte ich numerische Integration in MATLAB richtig ein?

Ich versuche, diesen Ausdruck zu integrieren:

Normal Distribution function:

Ich scheine jedoch Probleme bei der Einrichtung der Funktion zu haben. Wie beschrieben in diese MATLAB-Erklärung habe ich eine separate Funktion mit dem Namen "NDfx.m" definiert, die wie folgt aussieht:

    function [ y ] = NDfx(x)

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

    end

Wenn ich sie jedoch innerhalb meiner Hauptfunktion aufrufe, erhalte ich einen Fehler in der oben kommentierten Zeile. Meine Hauptfunktion sieht wie folgt aus:

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

Der spezifische Fehler, den ich erhalte, lautet:

Fehler in ==> mpower

Eingaben müssen ein Skalar und eine quadratische Matrix sein

5voto

James Mertz Punkte 7901

Sie haben alles korrekt für die Integration eingerichtet. Der Fehler liegt in der Definition der Funktion selbst. Wenn Sie Variablen für Funktionen verwenden, die integriert werden sollen, muss ein "." (Punkt) vor Operatoren wie ^ y * wenn sie auf die Variable angewendet werden:

function [y] = NDfx(x)

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

end

0voto

Krono und user57368 haben recht. Sie haben Ihre eigentliche Frage bereits richtig beantwortet. Meine Antwort ist lediglich eine Antwort auf die Frage, die Sie nicht gestellt haben. Nämlich, warum Sie hier überhaupt Quad verwenden. Der Punkt ist, dass viele Leute eine Funktion dieser Form integrieren wollen, und das wurde bereits getan! Verwenden Sie vorhandene Werkzeuge, um Ihre Probleme zu lösen, da diese Werkzeuge oft von jemandem geschrieben wurden, der weiß, wie man das Problem genau und effizient löst.

In diesem Fall besteht das vorhandene Werkzeug aus den Funktionen erf und erfc. Sie bieten eine genaue, effiziente, vektorisierte Lösung für Ihr Problem. Das Einzige, was Sie tun müssen, ist herauszufinden, wie Sie diese Integrale auf Ihr aktuelles Problem übertragen können, was durch eine einfache Skalierung der Eingabe von erf und der Ausgabe geschieht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X