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

Integral berechnen zwischen Nullstellen einer Funktion

 

La Machina
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 26.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2018, 09:37     Titel: Integral berechnen zwischen Nullstellen einer Funktion
  Antworten mit Zitat      
Hallo zusammen,

erneut benötige ich euren weisen Rat!
Wie berechne die Integralfunktionen zwischen den Nullstellen einer Kurve?
Ich möchte das Integral zwischen den Nullstellen, allerdings nicht den Wert des Flächeninhaltes sondern die Funktion und diese anschließend plotten.

Gruß Maik
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.02.2018, 10:13     Titel:
  Antworten mit Zitat      
Hallo,

wo genau liegt das Problem?
Zunächst die Nullstellen bestimmen, z.B. indem man nach Vorzeichenwechsel sucht, und dann wie in deinen vorherigen Beiträgen mit cumtrapz.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 26.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2018, 10:20     Titel:
  Antworten mit Zitat      
Hallo Harald,

Wie sucht man nach einem Vorzeichenwechsel? (Ich habe nur einen Vektor keine Funktion)
Und wenn ich dann meine Nullstellen habe, sagen wir mal ich habe 15 Nullstellen bzw. die Anzahl an Nullstellen ist variabel, wo setze ich dann meine Nullstellen als Stützstellen bei cumtrapz?

Gruß Maik
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.02.2018, 10:47     Titel:
  Antworten mit Zitat      
Hallo,

gerne die Suchfunktion verwenden. Vorzeichenwechsel liefert hier 47 Treffer, da sollte schon das passende dabei sein.

Code:
wechsel = diff(sign(y)) ~= 0

ggf. noch find außen rum.

Zitat:
sagen wir mal ich habe 15 Nullstellen bzw. die Anzahl an Nullstellen ist variabel,

Was möchtest du denn dann berechnen? Das Integral zwischen je zwei Nullstellen?

Zitat:
wo setze ich dann meine Nullstellen als Stützstellen bei cumtrapz?

Wenn ich die Frage richtig verstehe: du verwendest die (ausgewählten) Nullstellen x1 und x2, um den Teil des Signals herauszuholen.

Code:
select = x >= x1 & x <= x2;
cumtrapz(x(select), y(select))


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 26.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2018, 16:33     Titel:
  Antworten mit Zitat      
Danke, Nullstellen finden hat schon mal geklappt.
Ich habe eben nicht nur 2 Nullstellen, sondern ganz viele.
D.h. er berchnet zu nächst von x1 bis x2, danach von x2 bis x3, danach x3 bis xn...
und anschließend die Funktion plotten.
Wie mache ich das?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Ansatz wie in der vorherigen Antwort, nur eine Schleife über die Nullstellen?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 26.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2018, 09:20     Titel:
  Antworten mit Zitat      
Hallo Harald

Code:


% Nullstellen der Differenzfunktion aus Soll- und Ist-Beschleunigung finden
ind=find(diff(sign(a_Dif(1:end))))

for i=1:length(ind)
   nst(i,1) = interp1(a_Dif([ind(i) ind(i)+1]),time([ind(i) ind(i)+1]),0);
end

%Integralfunktion bilden
for i=1:length(nst)

    %Integral vor erster Nullstelle
    if i==1
        z=time<=nst(i)
        a_Int=cumtrapz(time(z),a_Dif(z))
     
    %Integral nach letzter Nullstelle
    elseif i==length(nst)
        z=time>=nst(i)
        a_Int=cumtrapz(time(z),a_Dif(z))
        break
   
    %Integral zwischen Nullstellen
    else
        z=time>=nst(i) & time<=nst(i+1);
        a_Int=cumtrapz(time(z),a_Dif(z))
   
    end
end


Ich habe jetze das bisher geschrieben. Allerdings wird jedes mal beim Durchlaufen der Schleife mein Integral a_Int überschrieben. Wie stelle ich das an, damit die Werte in die nächste leere Zeile meines Vektors geschrieben werden?

Für Verbesserungsvorschläge für meinen Code wäre ich auch dankbar, damit es professioneller wird.

Gruß Maik
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.03.2018, 18:42     Titel:
  Antworten mit Zitat      
Hallo,

vor der for-Schleife:
Code:
a_int = zeros(size(nst));


In der Schleife:
Code:


Wenn du vor den Nullstellenvektor die Anfangszeit setzt und ans Ende die Endzeit, dann solltest du dir die Fallunterscheidung schenken können. Etwa so:
Code:
nst2 = [tstart, nst, tend]


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.