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

1. Ableitung von Daten ohne Verwendung einer Fitfunktion

 

Salamander
Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2009, 12:13     Titel: 1. Ableitung von Daten ohne Verwendung einer Fitfunktion
  Antworten mit Zitat      
Hallo,

Ich habe zwei Datensätze mu und E und möchte die 1. Ableitung d{mu}/dE berechnen. Das würde ich gerne mit der zentrierten Formel (oder gibt es noch eine genauere Methode für's Ableiten?) machen, aber ohne nochmals eine Fitfunktion für die beiden Datensätze zu finden (das macht ja wieder unnötig Anpassungsfehler), was ja eigentlich bei diesem Verfahren möglich sein sollte. Wenn ich also das hier eingebe:


Code:
d1=differentiate(mu,E)


bekomme ich folgende Fehlermeldung:

Zitat:
??? Undefined function or method 'differentiate' for input arguments of type 'double'.


Weiß also jemand wie ich das ohne eine weitere Fitfunktion machen könnte?

Viele Grüße,
Salamander
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 03.08.2009, 12:22     Titel:
  Antworten mit Zitat      
DIFFERENTIATE ist ein Befehl nur zu Anwendung auf Curve Fitting Objekte. Eine normale Ableitung auf Daten gibt es durch DIFF, aber das ist vermutlich hier nur eingeschränkt geeignet. Auf den MathWorks Seiten finde cih mit den Suchbegriffen "numerical differentiate" einiges an Tipps und auch FileExchange Material.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Salamander
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2009, 15:31     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort!
Da habe ich schon nachgeschaut, aber alle Funktionen brauchen entweder einen Fit oder eine Funktion, wie z.B. das bei deriv und derivest der Fall ist...Oder auf welche Funktionen bist du da gestoßen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 03.08.2009, 15:48     Titel:
  Antworten mit Zitat      
Hmm, die Schwierigkeit scheint ja zu sein wenn die Messwerte nich äquidistant sind. Geht denn da nicht ein Differenzenquotient? (x(t2)-x(t1))/(t2-t1)
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Salamander
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2009, 15:51     Titel:
  Antworten mit Zitat      
Nee, leider nicht, das ist grad das Problem...
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 03.08.2009, 16:05     Titel:
  Antworten mit Zitat      
Was ist denn dann die "zentrierte Formel"? Dazu konnte ich nicht sinnvolles ergooglen.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Salamander
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2009, 16:13     Titel:
  Antworten mit Zitat      
Das ist der Differenzenquotient, den differentiate benutzt, aber dafür braucht man auch das gleiche h für alle Intervalle, was bei mir nicht der Fall ist...zentriert bedeutet nur, dass es nicht die Randpunkte wie beim Differenzenquotienten benutzt, sondern die Mitte zwischen 2 Punkten, was genauer ist....der Unterschied ist dann nur ein genauerer Differenzenquotient
Private Nachricht senden Benutzer-Profile anzeigen
 
Salamander
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2009, 18:12     Titel:
  Antworten mit Zitat      
Ein Problem ist gelöst: Habe ein Programm gefunden, das mir die Daten mit gleichen Intervallen ausspuckt, d.h. die Abstände zwischen den E's sind jetzt konstant. Also meinst du, dass ich einfach den Differenzenquotienten in Matlab eingeben kann und dass dann so ok ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 04.08.2009, 09:01     Titel:
  Antworten mit Zitat      
Ja, letztendlich scheint alles darauf hinauszulaufen äquidistante Daten zu bekommen. Wenn man fittet wird die gesamte Datenlage berücksichtigt. Die verschiedenen Differenzenquotienten sind einfacher (stückweise Interpolation), aber dafür schneller.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Salamander
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2009, 11:57     Titel:
  Antworten mit Zitat      
Anbei im Anhang der Differenzenquotient, den ich benutzen möchte (ist der gleiche den auch die Funktion differentiate benutzt). Mein h=1, in meiner Datenmatrix coeffAl sind 6000x2 Werte, wobei die erste Spalte die x-Werte und die 2. Spalte die f(x)-Werte sind. Wenn ich nun die Differenzenquotienten von Hand berechne, bekomme ich folgendes raus:

2*f'(0)=f(1)-f(-1) geht nicht, Eintrag nicht vorhanden
2*f'(1)=f(2)-f(0)=coeffAl(2,2)-coeffAl(0,2)
2*f'(2)=f(3)-f(1)=coeffAl(3,2)-coeffAl(1,2)
2*f'(3)=f(4)-f(2)=coeffAl(4,2)-coeffAl(2,2)
2*f'(4)=f(5)-f(3)=coeffAl(5,3)-coeffAl(3,2)
.
.
.
2*f'(5999)=f(6000)-f(5998)
2*f'(6000)=f(6001)-f(5999) geht nicht, Eintrag nicht vorhanden

Nun habe ich das so in Matlab gemacht:

Code:
h=1;
n=0;
for n=1:1:5998
    d1=(coeffAl((n+2),2)-coeffAl(n,2))/(2*h)
end


Matlab gibt mir aber nur einen Wert d1 am Ende heraus, wie kann ich es machen, dass jedes Mal d1 berechnet wird, so dass ich einen Vektor der Länge 5999 bekomme? Und kann ich irgendwie die beiden fehlenden Ableitungen berechnen, und wenn nicht, wie kann ich den Vektor dann gleich lang wie coeffAl machen?

Viele Grüße, Salamander

zentrierte Formel.jpg
 Beschreibung:

Download
 Dateiname:  zentrierte Formel.jpg
 Dateigröße:  11.17 KB
 Heruntergeladen:  1743 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Salamander
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2009, 13:07     Titel:
  Antworten mit Zitat      
Also ich habe das jetzt mit diff gemacht, wäre aber nett, wenn mir jemand noch schreiben könnte, was an meinem Code falsch ist..Viele Grüße, Salamander
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.