ich bin noch recht neu bei Matlab und habe einige Schwierigkeiten mit dem folgenden:
Ich habe eine mathematische Funktion g(x) definiert. Nun möchte ich eine weitere Funktion definieren, die wie folgt aussieht:
yWertephi = zeros(1,300); %Platzhalter für yWerte, da dynamisches wachsen lassen des Vektors länger dauert
xWertephi = zeros(1,300); %Platzhalter für xWerte, da dynamisches wachsen lassen des Vektors länger dauert
xWerteh = zeros(1,150); %Platzhalter für xWerte zum spiegeln
yWerteh = zeros(1,150); %Platzhalter für xWerte zum spiegeln
i=1;
z=0;
while z<1.51 yWertephi(i)=quadv(g,0,z);
xWerteh(i)=z;
yWerteh(i)=quadv(g_2,0,z);
xWerteh(j)=z;
z=z+0.01;
i=i+1;
end
Dies liefert zwar das gewünschte Ergebnis und lässt sich natürlich auch plotten, dauert jedoch sehr lang. Das liegt an der Schleife, wie ich bereits herausgefunden habe. Mir ist jedoch keine bessere Idee gekommen die Funktion h zu realisieren.
Außerdem muss ich h nun mit einer weiteren Funktion verketten und anschließend mit einer dritten multiplizieren. Das ist so nur sehr umständlich realisierbar.
Ich habe bereits versucht g als function handle zu definieren, dann kann ich aber trotzdem h nicht als
Hallo Harald,
danke für deine Antwort. Die Möglichkeit klappt, wenn ich einfache Funktionen (bspw. Sinus, Cosinus, Polynome, etc.) verwende.
Wenn ich allerdings die Funktion, die ich benötige, verwende, bekomme ich als Ausgabe nicht das Richtige.
Ich poste mal meinen Code und die Ausgabe
Code:
syms f_2(x) g(z) z x
f_2(x) = piecewise(abs(x-0.75)<1/4,exp(-1/(1/16-(x-0.75)^2)), 0);
g(z) =1-int(f_2,0,z);
Der zweite Ausdruck ist insofern korrekt als das erkannt wird, dass nur von 1/2 bis 1 integriert werden muss, da der Wert des Integrals von 0 bis 1/2 null ist. Allerdings wird der Wert des Integrals nicht ausgegeben.
Ich vermute, dass es daran liegt, dass die Stammfunktion nicht einfach hingeschrieben werden kann mit herkömmlichen Funktionen oder mache ich einen anderen Fehler?
Habe sonst schon überlegt, ob es funktioniert eine function zu schreiben bei der ich den Wert übergebe bis zu dem ich integrieren möchte und dann numerisch integriere. Ich denke aber, dass das nicht die optimale Lösung ist.
Hast du noch andere Ideen? Bin für jeden Ansatz dankbar.
Gruß Pacusch
der einzige Vorschlag, den ich dann noch hätte: du integrierst jedes Mal von 0. Wenn du aber das Integral für ein neues z haben möchtest, dann reicht ja die Integration über einen kleineren Bereich:
%xWerte für h und phi
xWerteh = (0.01:0.01:1.5);
xWertephi = (-1.5:0.01:1.5);
%Platzhalter für yWerte von h und phi, um dynamisches wachsen lassen zu
%vermeiden
yWertephi = zeros(1,301);
yWerteh = zeros(1,150);
yWertehnull = 1; %nullte Stelle besetzen, da sonst doppelt bei Spiegelung
yWerteh(1)= 1-quadv(g_2,0,0.01); %erste Stelle belegen, damit man in Schleife für j=1 nicht in yWerte(0) reinläuft
j=2;
z=0.02;
while z<1.5 %Schleife zum berechen von h_2(x)=1-Int(0,z)(g_2(x))
yWerteh(j)=yWerteh(j-1)-quadv(g_2,z-0.01,z); %Stück des Integrals hinzufügen
j=j+1;
z=z+0.01;
end
yWertehminus = fliplr(yWerteh); %spiegeln der yWerte von h
yWertephi = horzcat(yWertehminus,yWertehnull, yWerteh); %spiegeln von h
yWertephiquad = yWertephi.^2; %quadrieren von psi
Integralphi = trapz(xWertephi,yWertephiquad); %Berechnung des Integralquadrats von h_2
wenn ich nur quadv durch int ersetze, ist es deutlich schneller.
Grüße,
Harald
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.