WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

variable durch Integration(quad) eliminieren

 

S3r4
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 20.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2014, 14:59     Titel: variable durch Integration(quad) eliminieren
  Antworten mit Zitat      
Hi

ich habe schon seit einer weile ein Problem mit der Integration mithilfe von quad:

Ich möchte in einer Funktion  f(F,x) worin F ein skalar (wahre anomalie (Orbitmechanik)) und x ein Vektor (ähnlich den Kepplerelementen)
von \left(-\pi ,\pi \right) Integrieren sodas F eliminiert wird.

Ich kann f berechnen lassen, es kommt auch ein Skalar raus. f ruft viele unterfunktionen auf, aber wie gesagt f hat einen skalaren Wert, sprich ist richtig implementiert.

Wenn ich nun mit hilfen von quad diese operation durchführen will:

quad(@(F) f(F,x),-pi,pi)

dann gibt er mir einen Dimension fehler in einer Unterfunktion

Error using /
Matrix dimensions must agree.

Error in dX1dk (line 10)
out=-x(1)*((x(2)*x(3)*b^3)/(1-b)*(x(2)*cF-x(3)*sF)+1+x(1)/r*sF*(-x(2)*b+sF));

Wie gesagt einfach nur ausgewertet funktionieren alle Funktionen wunderbar. Jemand eine Idee woran das liegen kann? Bzw wie ich es umgehen kann.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.02.2014, 17:27     Titel:
  Antworten mit Zitat      
Hallo,

quad versucht, die Funktion für einen Vektor von F-Werten auszuwerten. Deine Funktion ist vermutlich nicht dafür geeignet.

Vorschlag:
Code:
quad(@(F) arrayfun(@(a) f(a,x), F),-pi,pi)


Falls ich damit einen Knoten in mein und/oder dein Gehirn gemacht habe, hier eine etwas ausführlichere Alternative des Gedankens: definiere eine Funktion g folgendermaßen:
Code:
function y = g(F,x)
y = zeros(size(F));
for I=1:numel(F)
y(I) = f(F(I), x);
end

und ersetze dann in deinem Befehl f durch dieses g.

Es kann wie gesagt sein, dass ich beim ersten Ansatz einen Denkfehler drin habe. Von meiner Idee her sollte aber beides gleichwertig sein.

Übrigens: seit ein paar Releases gibt es integral als Nachfolgefunktion zu quad. Sofern integral im verwendeten Release verfügbar ist, sollte man das nutzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
S3r4
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 20.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2014, 18:19     Titel:
  Antworten mit Zitat      
hm ich verstehe nicht ganz was du da tun willst. ;(

du wertest die Funktion an einer Reihe von F werten aus?
Um damit eine Summe zu bilden???
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.02.2014, 19:07     Titel:
  Antworten mit Zitat      
Hallo,

nein, keine Summe. Wo sollte die auch sein?

quad erwartet wie gesagt eine Funktion, die einen Vektor von F-Werten entgegennehmen kann und dann einen Vektor entsprechender Funktionswerte zurückgibt - das ist deine Funktion f wohl nicht, aber man kann leicht eine Funktion g schreiben, die das erfüllt.

Probier das doch mal aus. Wenn es funktioniert, kann ich gerne weitere Erläuterungen geben. Wenn nicht, poste bitte, welche Fehlermeldung du erhältest.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
S3r4
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 20.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2014, 21:17     Titel:
  Antworten mit Zitat      
Top danke ja werde es morgen versuchen wollte nur, damit ich was lerne, wissen was die idee ist. Danke für die Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.