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

Numerische Integration bis unendlich

 

AlC
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 21.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2014, 11:39     Titel: Numerische Integration bis unendlich
  Antworten mit Zitat      
Hallo Forum,

ich muss folgende Funktion über w von 0 bis unendlich integrieren:

f(w)=a*cos(w*t)*w^b

mit t>0 und -1<b<0 .

Das integral stellt eine TraFo von vom Frequenz- (w) in den Zeitbereich (t) dar.

So wie ich das sehe ist das Integral nicht analytisch lösbar, ist das richtig?
Wie würdet ihr da vorgehen?

Ich habe mir überlegt das ganze numerisch zu Integrieren, z.B. mit der Trapezregel.
Die untere Grenze 0 sollte kein Problem sein, da f(w=0)=a definiert ist.
Bei der oberen Grenze hatte ich mir gedachte, das ganze in eine for-Schleife zu packen mit verschiedenen oberen grenzen (z.B. w_end=[1 10 100 1000]) und zu überprüfen, wie das Integral konvergiert. Das gleiche hätte ich mit der Schrittweite danach gemacht.

Bin ich da auf dem richtigen Weg? Habe nicht viel Ahnung von numerischer Integration.

Hier mein Code

Code:
load interpolation % lädt die a_long und b_long
t=[0 0.1 1 5 10]; %in s


omega_end=[1 10 100 1000 10000 100000]; % vektor mit verschiedenen oberen Integrationsgrenzen

figure(1)
set(gca, 'FontSize', 16)
hold on
title('T = 45 °C')
xlabel('\omega_end in [Hz]')
ylabel('A_L')
for k=1:length(omega_end)
    omega=0:0.1:omega_end(k);

            f_L=((a_long(2,1)/((2*pi)^(b_long(2,1))))*omega.^(b_long(2,1))).*cos(omega*t(4)); % zu integrierende funktion, jetzt erstmal für t=5s.
A_L(k)=trapz(f_L, omega); % integration mit Trapezregel
   
end

plot(omega_end, A_L) % plotte Integral über obere Integrationsgrenze
hold off
 


Jetzt bekomme ich hier aber für die Integrale unendlich...? Das kann ja eigentlich nicht sein, wo ist da mein Fehler?

Vielleicht könnt ihr mir ja helfen, das wäre klasse!

Beste Grüße

Alex
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: 27.04.2014, 12:36     Titel:
  Antworten mit Zitat      
Hallo,

verwende doch die Funktion integral. Die macht das automatisch :)
Code:


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 21.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2014, 14:05     Titel:
  Antworten mit Zitat      
Super, das vereinfacht so einiges =)

ich bekomme folgende Meldung:

"Warning: Reached the limit on the maximum number of
intervals in use. Approximate bound on error is
9.0e+09. The integral may not exist, or it may be
difficult to approximate numerically to the requested
accuracy. "

Hört sich nicht so gut an... Kann man das mit Einer höheren Rechnerleistung verbessern? Wahrscheinlich nicht... Und wenn man das mit Matlab nicht machen kann, wie dann? Smile

Besten Dank,

Alex
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: 27.04.2014, 14:33     Titel:
  Antworten mit Zitat      
Hallo,

bitte angeben, was du jetzt genau machst.
Wie von der Fehlermeldung angedeutet ist die erste Frage, ob das Integral überhaupt existiert (d.h. endlich ist).

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 21.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2014, 16:12     Titel:
  Antworten mit Zitat      
Gern.

Hier mein Code:

Code:

load interpolation % load a_long and b_long

time=0:0.1:2; % in [s]
G=zeros(length(time),1);
p_long=zeros(4,1);

figure(1)
color=[1 0 1; 0 1 0; 0 1 1; 0 0 1; 1 0 0];
set(gca, 'FontSize', 16)
hold on
title('Time-curves of shear moduli')
xlabel('time in [s]')
ylabel('Shear modulus in [N/mm^2]')

for T=1:4 % plot of shear moduli for the 4 different temperatures

for t=1:length(time) % determination of shear modulus for each time-step
    f_L = @(omega) ((a_long(T,1)/((2*pi)^(b_long(T,1))))*omega.^(b_long(T,1))).*cos(omega*time(t));
    G(t)=integral(f_L, 0 , inf)*2/pi;
end

p_long(T)=plot(time, G);

set(p_long(T), 'Linewidth', 2, 'color', [color(T,:)]);

end

legend(p_long, {'T = 25 °C', 'T = 45 °C', 'T = 65 °C', 'T = 85 °C'})
 


Wie gesagt, die b_long haben werte zwischen -1 und 0, die a_long sind positiv.

Schönen Gruß

Alex
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: 27.04.2014, 16:17     Titel:
  Antworten mit Zitat      
Hallo,

tritt die Warnung für jedes t auf?
Für jede Kombination von a und b?

Ich würde dem ja gerne nachgehen. Das geht aber nur, wenn ich die vollständigen Informationen habe. Poste also doch bitte noch die je vier Werte von a_long und b_long.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 21.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2014, 16:25     Titel:
  Antworten mit Zitat      
Hier mögliche Werte:

a_long= [165347.6, 40759.7, 17765.4, 9835.4]
b_long= [-0.7291, -0.7011, -0.7659, -0.8145]

Viele Grüße

Alex
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: 27.04.2014, 16:53     Titel:
  Antworten mit Zitat      
Hallo,

ich fürchte, die Integrale sind numerisch schwierig auszuwerden.
Symbolisch klappts aber:

Code:
syms a t b w
assume(t>0)
assume(b<0)
assumeAlso(b>-1)

f = int(a*cos(w*t)*w^b , w, 0, inf)


Grüße,
Harald
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.