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

Matlabanfänger: Numerische Integration

 

Himalaya
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2012, 00:45     Titel: Matlabanfänger: Numerische Integration
  Antworten mit Zitat      
Hallo zusammen!

Ich beschäftige mich ganz frisch mit Matlab und versuche mich gerade an einer Aufgabe. Aber ich scheiter letztendlich an der (numerischen) Integration einer Funktion.
Da ich an sehr vielen Stellen große Fragezeichen im Kopf habe, poste ich erstmal meinen Code und stelle dann Fragen:

Code:

% Ich definiere eine Variabel t, die im weiteren stets als Buchstabe  
% mitgeführt werden soll:

syms t

% Meine Funktion in Parameterform lautet:

xh=3*cos(1/4*t)+cos((3/4)*t);
yh=3*sin(1/4*t)-sin((3/4)*t);

% Ich bilde die Ableitungen nach t mit der Funktion                                 % diff(Ausdruck,Variable):

xh1=diff(xh,t)
yh1=diff(yh,t)

% xh1 =
 
% - (3*sin(t/4))/4 - (3*sin((3*t)/4))/4
 
 
% yh1 =
 
% (3*cos(t/4))/4 - (3*cos((3*t)/4))/4

% Jetzt definiere ich eine Funktion q, in der die Ableitungen vorkommen

q=sqrt(xh1^2+yh1^2);

 


Jetzt möchte ich das Integral von q von t=0 bis t=2pi berechnen. Ich habe es zuerst mit der Matlab-Funktion int versucht, aber dann habe ich die MEldung bekommen, dass es nicht symbolisch berechnet werden kann. Also habe ich nach numerischen Integrationsverfahren gesucht und bin dann an den Matlab-Funktionen trapz und quad gescheitert. Bei quad sieht es dann so aus (zu integrierende Funktion ist sqrt((xh1^2+yh1^2)) ):

Code:

q = @(t)sqrt((xh1^2+yh1^2));
>> Q = quad(q,0,2*pi);
??? Undefined function or method 'isfinite' for input
arguments of type 'sym'.

Error in ==> quad at 81
if ~isfinite(y(1))
 


Fragen:

1)
Ist meine Grundidee das t als Variable komplett mitzuschleppen so richtig umgesetzt und möglich?

2)
Ich verstehe das Grundkonzept von Matlab noch nicht so wirklich. Es baut ja auf Matrizen auf. Wenn ich jetzt t nicht als Variable mitschleppe, sondern sage t=0:2*pi und dann z.B. xh ausgebe, dann berechnet er mit sechs konkrete Werte. Wie habe ich das zu deuten?
Und zerlegt er mir das Intervall [0;2*pi] nur in 6 Werte? Das ist ja recht wenig. Müsste man dann bei der Integration nachher mehr Unterteilungen angeben?

3)
Aufbauend auf dem Unverständnis mit der MAtrizen-Arbeitsweise:
Bei manchen Operatoren muss man einen Punkt setzen, damit das Ganze richtig Berechnet wird. Zum Beispiel sehe ich oft sowas wie "x.^2". Muss ich sowas bei meiner Rechnung beachten, und was genau sagt der Punkt dann aus?

Ich weiß, dass sind alles absolute Anfängerfragen, aber je mehr ich googel und in Foren lese, desto weniger verstehe ich. Das Grundkonzept muss mir erst einmal klar werden.

Für Antworten bedanke ich mich schon einmal !
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.04.2012, 09:54     Titel:
  Antworten mit Zitat      
zu1. versuch mal
Code:
syms t
xh=3*cos(1/4*t)+cos((3/4)*t);
yh=3*sin(1/4*t)-sin((3/4)*t);

xh1=diff(xh,t);
yh1=diff(yh,t) ;

xh2=@(t) subs(xh1,t);
yh2=@(t) subs(yh1,t);
q = @(t)sqrt((xh2(t).^2+yh2(t).^2));
Q = quad(q,0,2*pi);



zu 2.
bei 0:2pi zählt er automatisch in einer schritten. wenn du einen anderen abstand willst musst du den angeben oder den bereich mit linspace unterteilen
zu 3.
der .^ operator beziht sich darauf das elemtweise vorgegangen wird.
andernfalls wäre es zb matrix multiblikation.
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: 16.04.2012, 10:00     Titel:
  Antworten mit Zitat      
Hallo,

wenn ein symbolischer Ausdruck in ein Function Handle umgewandelt werden soll, kann auch der Befehl matlabFunction hilfreich sein.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2012, 10:19     Titel:
  Antworten mit Zitat      
Hallo

Danke für die schnelle Antwort. Hab gerade kein Matlab zur Hand und werde es später ausprobieren.

Kannst du mir diese Zeile kurz erläutern?

Code:

xh2=@(t) subs(xh1,t);
 


Ich hatte den @-Operator in meinem Code einfach übernommen aus einem Forum.
Soweit ich das gerade gegoogelt habe, kann man mit dem @-Operator eine Funktion definieren (in diesem Falle xh2), die sich dann "sehr einfach" wie eine Variable behandelt werden kann? Klingt zunächst logisch, da ich ja nachher in dem Wurzelterm die Funktionen xh2 und yh2 einsetze. Also kreiere ich eine neue Funktion xh2 mit der Variablen t. Diese neue Funktion bezieht sich auf die Funktion xh1 bzw übernimmt diese und ersetzt in xh2 t als neue symbolische Variable?
Könnte man das so grob sagen?



zu 3)
Woher weiß ich, wann ich den Punkt setzen muss, also in diesem Falle z.B. xh2.^2.
Einfach weil ich eben keine Matrizenmultiplikation durchführen möchte? Dann müsste ich bei jeder Multiplikation von Funktionswerten (in diesem Falle sind es ja die Ergebnisse von xh^2) diesen Punkt setzen, da er sonst eine Matrizenmultiplikation durchführt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Himalaya
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2012, 23:41     Titel:
  Antworten mit Zitat      
Hallo,

also das mit der quad-Funtion hat super geklappt. Zumindest kommt ein Ergebnis raus Wink

Um ein numerisches Integrations-Verfahren komme ich bei meinen Funktionen ja wahrscheinlich nicht herum.

Kann man mit der quad-Funktion auch derart integrieren, dass das Ergebnis der Integration in Abhängigkeit von t ausgegeben wird? Also dass t noch im Ergebnis als Buchstabe steht?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 17.04.2012, 10:19     Titel:
  Antworten mit Zitat      
das ist dann symbolische integration
http://www.mathworks.de/help/toolbox/symbolic/int.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Himalaya
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2012, 17:34     Titel:
  Antworten mit Zitat      
Danke!
Aber bei meinen zu integrierenden Funktionen sagt er bei der Verwendung von int, dass er das nicht symbolisch kann. Daher bin ich ja zu quad gewechselt.

Oder kann ich es trotzdem mit int machen? Vielleicht mit einem "Trick"?
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: 17.04.2012, 19:19     Titel:
  Antworten mit Zitat      
Hallo,

"numerisch" und "Buchstaben enthalten" ist widersprüchlich. So einen Trick kann es nicht geben.

Du kannst höchstens eine Tabelle aufstellen, und für verschiedene Werte von t das Integral berechnen lassen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2012, 21:32     Titel:
  Antworten mit Zitat      
Hallo,

ja da hast du natürlich Recht: Mathematisch macht das gar keinen Sinn und es sind zwei völlig verschiedene Ansätze.
Aber ich bin auf der Suche nach einer Möglichkeit die Fläche in Abhängigkeit von t darzustellen. Und das möchte mit mit int halt nicht.

Ich muss das ganze nochmal überdenken. Letztendlich soll das ganze noch geplottet werden und sich die berechnete Fläche der Funktion in Abhängigkeit des Parameters t dann visuell einfärben.
Für einen Anfänger schon anspruchsvoll vermutlich.

Vielleicht kannst du mir eine vorerst letzte kronkretere Frage beantworten:
Wenn ich die Fläche, also die integrierte Funktion, formell in Abhängigkeit von t darstellen möchte und matlab das mit int nicht schafft, gibt es keine weitere Möglichkeit?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 18.04.2012, 07:35     Titel:
  Antworten mit Zitat      
versteh immernoch nicht warum du es dann nicht symbolisch machst
Code:
syms t

xh=3*cos(1/4*t)+cos((3/4)*t);
yh=3*sin(1/4*t)-sin((3/4)*t);
xh1=diff(xh,t);
yh1=diff(yh,t);
q=matlabFunction(int(xh1^2+yh1^2,t));
 
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.