Hallo Forum,
ich möchte folgendes in Matlab numerisch integrieren (mit quad)
q ist ein Vektor mit ca. 500 Punkten.
Die Funktion f ist eine Funktion, die von q und mu abhängt. Gleichzeitig sind in f noch Parameter enthalten, a_i.
Bisher habe ich das immer mit bösen for-Schleifen und globalen Variabeln für die Parameter a_i gelöst.
Geht das nicht auch besser bitte?
quad will be removed in a future release. Use integral instead.
und noch was :
a_i das siht so aus als würdest du den index im namen verstecken. davon kann ich nur abraten
a(i) ist hier die weitaus bessere methode.
_________________
quad will be removed in a future release. Use integral instead.
und noch was :
a_i das siht so aus als würdest du den index im namen verstecken. davon kann ich nur abraten
a(i) ist hier die weitaus bessere methode.
Hallo Winkow.
Edit: Nein, es ist doch nicht einleuchtend.
Ist f2=f2(x), es wird aber über y=[0,1] integriert?
Bisher übergab ich an die quad-Funktion den Namen eines m-files, die Parameter wurde via globaler Variabeln übergeben. Das war sicherlich nicht gut.
Die Parameter a_i sollten verschiedene Vorfaktoren bezeichnen.
Wie z.B. a1*x+y*a2. Jeder Parameter hat im Prinzip einen anderen Namen, der Einfachheit halber habe ich die hier nur mal a_i genannt.
Eine weitere Frage:
Was passiert, wenn einer dieser Parameter ebenfalls ein Integral ist, welches weder von q noch von mu abhängt? Nennen wir dessen Integrationsvariabel r.
Wie macht man das bitte via anonymer Funktion? Natürlich hat auch dieses Integral wieder konstante Parameter. Leider ist der Ausrdruck nicht so einfach wie x+y.
??? Error using ==> times
Matrix dimensions must agree.
Error in ==>
@(q,alpha)(2.*(rho_shell_cs-rho_solvent_cs).*V_shell_cs.*sin(q.*(L_core_cs+2.*tcs)./2.*alpha)./(q.*(L_core_cs+2.*tcs)./2.*alpha).*besselj(1,q.*(r_core_cs+tcs).*sqrt(1-alpha.^2))./(q.*(r_core_cs+tcs).*sqrt(1-alpha.^2))+2.*(rho_core_cs-rho_shell_cs).*V_core_cs.*(sin(q.*L_core_cs./2.*alpha))./(q.*L_core_cs./2.*alpha).*besselj(1,q.*r_core_cs.*sqrt(1-alpha.^2))./(q.*r_core_cs.*sqrt(1-alpha.^2))).^2
Ich möchte noch anmerken, dass wenn ich f für ein bestimmtes alpha evaluiere (einfach ausrechnen lasse ohne Integration), bekomme ich die gleichen Dimensionen wie für q.
Eine anderes Integral lautet wie folgt:
Hier steht ein Text, den man im Zitat sehen kann.
Keine Ahnung, warum die Matheumgebung das jetzt nicht anzeigt. Im Editor ist der Ausdruck da.
Bekäme man sowas auch irgendwie in Matlab hin? Ich glaube, ich kann nicht die quad-Funktion nehmen, weil ich nicht an das \mu rankomme, um dies in das innere Integral zu stecken.
q ist wieder ein Vektor mit 1x20 Einträgen z.B., also muss ich für jedes q das Integral ausrechnen.
mal versucht ne schleife über da q laufen zu lassen? kann mich erinner auchmal so ein probelm gehabt zu haben. oder kommt für ein einzelnes q also f2(1) auch so ein fehler ?
_________________
mal versucht ne schleife über da q laufen zu lassen? kann mich erinner auchmal so ein probelm gehabt zu haben. oder kommt für ein einzelnes q also f2(1) auch so ein fehler ?
Ja, daran dachte ich auch gerade.
Ich habe gerade gelesen, dass die anonyme-Funktion nur einzelne Werte zurückgibt (siehe: http://pundit.pratt.duke.edu/wiki/MATLAB:Anonymous_Function
"Anonymous functions can only have one expression and can only return a single variable (though that variable can be a matrix)."
Ich verstehe nicht, warum man eine anonyme Funktion nicht mit einem Vektor füttern kann.
Damit ist das Problem aus dem ersten Beitrag gerade gelöst.
Winkow, hättest du vielleicht einen Hinweis, wie das mit der quad oder quad2d funktionieren könnte, wenn im Integranden noch ein Integral steckt, wo aber auch die Variabel des äußeren Integrals drin vorkommt?
Für f1(1,1) bekomme ich noch etwas heraus, für f2 nicht.
Die Lösung sollte eigentlich q^4/20 sein.
Aber f4 kann Matlab nicht ausrechnen.
Seht ihr zufällig den Fehler, bitte?
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.