Verfasst am: 30.08.2012, 09:19
Titel: Steigung von Kurve bestimmen
Arbeite leider das erste mal mit Matlab...daher habe ich folgende banale Frage.
Ich habe folgende Kurve und möchte die Steigung im "linearen" Bereich bestimmen. Somit kann ich dann die Steifigkeit bestimmen.
D.h. ich möchte die Kurve im Bereich von 50N und 300N lokalisieren und den Weg in diesem Bereich bestimmen. Danach kann ich mit dem Delta der Kraft (300-50) un dem Delta vom Weg die Steifigkeit bestimmen....
Verfasst am: 30.08.2012, 14:05
Titel: Re: Steigung von Kurve bestimmen
Hallo ronen84,
Was sehen wir denn genau auf dem Bild? Irgendwie erinner mich das an eine Schlange, die einen Elefanten verschluckt hat.
Wo befindet sich denn der Bereich "50N bis 300N"? Das Diagramm enthält keine Einheiten oder Beschriftungen.
Was genau ist "lokalisieren"? Wie hast du die Kurve produziert? Hast Du die Kurve auf Papier gedruckt, als Pixel-Grafik, als FIG-File, oder hast Du die Daten als Array und das Diagram selbst erstellt? Was ist "Delta"?
So nun habe ich die Achse beschriftet....ich habe diese Daten durch eine Zugprüfung auf einer Prüfmaschine erhalten und habe diese mit den Daten Weg inder x ache und den Daten Kraft in der y achse mit dem plot befehel mit matlab aufgezeichnet.....
Das ist nun schon mal klarer. Wie kannst Du nun an die Werte der Kurve kommen? Hast Du die als Matlab-Array vorliegen oder musst Du sie aus dem Diagramm auslesen?
Naja es handelt sich dabei um ein Daten File. In der ersten Spalte sit die Zeit, in der zweiten Spalte der Weg und in der dritten Spalte die Kraft (siehe File).
Aber irgendetwas stimmt hier noch nicht...auch hier habe ich 5 Messdaten (S1 bis S5) sowie 3 verschiedene Typen, welche ich dann in einem Boxxplot miteinander vergleichen möchte.
Falls mir jemand weiterhelfen kann wäre ich sehr dankbar. Habe ziemlich mühe schon mit den Matlab Grundlagen
Mit deiner aktuellen Formel gehst du mit der kompletten Kurve in die Rechnung. Ich denke dein Ziel ist es, erst mal dir nur den linearen Bereich herraus zu holen.
Erstelle die erste Ableitung von der Kraft und suche nach dem linearen Bereich. Das sollte dort sein, wo der Anstieg konstant ist und noch vor dem Hochpunkt liegt (Anstieg=0). Dann kannst du die Kraftwerte auf NaN setzen, wo dies nicht zu trifft.
Überprüfe dann mal mit dem plotten, ob dir nun nur dein gewünschter linearer Bereich angezeigt wird.
Wenn das so ist, kannst du anfangen damit zu rechnen.
ich denke damit wird es nicht funktionieren, da hier auch die Werte aus dem plastischen Bereich verwendet werden.
Wenn ich ronen84 richtig verstanden habe, geht es viel mehr darum als erstes die Hookesche Gerade bei den verschiedenen Messungen zu bestimmen. Um mit ihr dann die Steifigkeit zu bestimmen.
Genau dies möchte ich erreichen! Ich habe 3 Varianten, welche ich miteinander vergleichen möchte. Dazu habe ich je Variante 5 Messungen gemacht. Nun möchte ich von jeder Messung die Steifigkeit bestimmen und damit die Steifigkeit der 3 Varianten miteinander in einem Boxplot vergleichen. Die Messungen haben den Filename S1_Curved bsi S5_Curved, S1_Bushing bis S5_Busing etc.
Nun müsste ich einen Code erstellen, welcher mir die Daten einliest, dann die Steigung (kann z.B. auch einfach im Bereich 50-2150N definiert werden) bestimmt und die Werte danach in einem Boxplot vergleicht.....
Aber ich gebe die Hoffnung langsam auf, dass ich dies mit Matlab schaffen werde....bin nun seit 2 Tagen dran, dies zu versuchen und die Zeit welche ich verloren habe macht mich langsam unglücklich...
Ich denke, ich werde den Graphen ausplotten und danach von hand die Steigung ausmessen eine Datentabelle machen und mit diesen Daten einen Boxplot machen....und bei den anderen Messungen welche ich noch machen muss, werde ich das gleiche Machen....so habe ich zumindest annähernd genaue Resultate.
ich denke damit wird es nicht funktionieren, da hier auch die Werte aus dem plastischen Bereich verwendet werden.
Das verstehe ich nicht. "find(y > 50, 1)" sucht den ersten y-Wert, der oberhalb von 50 liegt, und genauso wird auch der erste Punkt oberhalb von 300 gesucht. Damit kann man die Steigung zwischen diesen Punkten mit der angegebenen Methode berechnen und der plastische Bereich ist davon überhaupt nicht betroffen.
Hallo Ronen,
Es ist schwierig ein Problem zu lösen, wenn es nicht genau definiert oder erklärt ist. Statt das Einlesen der Datei, die Berechnung der Steigung und das Einfügen in den Boxplot gleichzeitig zu behandeln, wäre eine Aufteilung in Teil-Probleme viel übersichtlicher. Es ist nicht klar, wie Du die Grafiken überhaupt zeichnen kannst, wenn Du das File noch nicht einlesen kannst. Wenn Du das File doch schon einlesen kannst, wäre es sinnvoll, dieses Teil-Problem erst gar nicht zu erwähnen, z.B. zu starten mit "ich habe ein Array [500 x 3]...".
Es wäre auch hilfreich, wenn Du meine Rückfragen vollständig beantwortest. Andernfalls erfordert ein Lösungsvorschlag einiges Raten und dies recht ineffizient.
Also schlage ich vor: Poste ein Teil-problem nach dem anderen. Füge alle notwendigen Details ein. Beantworte Rückfragen, die helfen sollen das Problem vollständig und exakt zu definieren. Denn meist enthält die exakte Definition bereits die Anleitung zur Lösung.
Ich bin absoluter Matlab Neuling und es ist für mich sehr schwer mich damit zurecht zu finden! Ich habe immer versucht alles so genau wie möglich zu beschreiben. Und die Kurve habe ich nur manuel eingelesen und gepostet um mein Problem besser zu schildern. Aber ich werde es nach deinen Anregungen nochmals versuchen.
Problem Nr1:
Ganz einfach, ich kann die Kurve darstellen indem ich manuel die daten Importiere und danach im Comand Window plot (Dateiname (1:end,2),Dateiname (1:end,3)) eingebe. Somit kann ich eine Kurve darstellen. Ich möchte jedoch ein Skript schereibem, wo es mir alle 15Messdaten (Von drei Varianten je 5 Messungen) einliesst
Problem Nr2:
Von diesen Daten möchte ich die maximale Kraft aus der Spalte 3 der Daten ermitteln und danach die Maximalen Kräfte der 3 Varianten in einem Boxplot Vergleichen.
Ich habe Problem 1+2 so versucht zu lösen:
Code:
figure,
y1=S1_Curved(1:end,3);
x1=S1_Curved(1:end,2);
y1max=max(y1);
hold on
y2=S2_Curved(1:end,3);
x2=S2_Curved(1:end,2);
y2max=max(y2);
y3=S3_Curved(1:end,3);
x3=S3_Curved(1:end,2);
y3max=max(y3);
y4=S4_Curved(1:end,3);
x4=S4_Curved(1:end,2);
y4max=max(y4);
y5=S5_Curved(1:end,3);
x5=S5_Curved(1:end,2);
y5max=max(y5);
boxplot(y1max:y5max,'plotstyle','traditional','label',{'Curved','Bushing','Bushing Gew.'}) hold on
title('Ultimate Force','FontSize',14) ylabel('Force in [N]','FontSize',11)
Die hat jedoch nicht funktioniert. Und ich habe das Problem Nr1 so gelöst, dass ich die Maxwerte im Excel errechnet habe und danach eine Tabelle mit den MaxMesswerten im Excel gemacht habe und diese dann als 1 Dateil im Matlab eingelesen somit konnte ich einen Boxplot erstellen mit
Probloem Nr2 konnte ich jedoch nicht lösen und bin mir nun am überlegen, ob ich die Steigung anhand der Excelkurve mit dem Lineal herauslese und auch wieder ein Excel File mache wie bei den Maximalwerten.
Problem Nr3:
Ich möchte vom linearen Bereich der Kurve die Steigung (deltaKraft/deltaWeg) von allen 15Messungen bestimmen und dann die Steifigkeitswerte der 3 Varianten miteinander in einem Boxplot vergleichen.
Dazu habe ich keine Lösung
Problem NR4:
Dieses gehe ich erst an, wenn ich die Probleme Nr1-3 gelöst habe. Hier habe ich eine Kurve aus einer dynamischen Messung (siehe Bild) Dort möchte ich die Verschiebung während den Dynamischen Zyklen bestimmen (dort wo die vielen Linien fast aufeinander sind).
Für das Einlesen der Daten habe ich ein Skript gefunden. Jedoch bringe ich es mit meinen Fähigkeiten nicht zustande, dies auf mein Problem anzuwenden...
Bleibe zunächst bei "Problem 1".
Was bedeutet "manuel importieren" genau? Ich kann mir darunter mehrere verschiedene Dinge vorstellen.
Das gepostete File hat zwar eine .TXT-File-Extension, aber es enthält Daten im MAT-Format. Dies kann man mit dem LOAD-Befehl importieren. Machst Du das bereits so?
Um Dir mit dem Problem "alle 15 Messdaten einlesen" weiter zu helfen, müsste man noch wissen, in welcher Form diese vorliegen. Alle in einem MAT-File, wenn ja, mit welchen Variablen-Namen? Oder in 15 Files, wenn ja, welche Dateinamen haben sie?
Zitat:
Die hat jedoch nicht funktioniert.
Bitte erkläre im Forum immer, was genau nicht funktioniert. Bekommst Du Fehlermeldung, oder weichen die Ergebnisse von den Erwartungen ab?
Zitat:
Und ich habe das Problem Nr1 so gelöst, ...
Ich dachte "Problem 1" ist das Einlesen der Files?? Und ich dachte, das wäre eben gerade noch nicht gelöst.
Zitat:
Problem Nr3:
Ich möchte vom linearen Bereich der Kurve die Steigung (deltaKraft/deltaWeg) von allen 15Messungen bestimmen und dann die Steifigkeitswerte der 3 Varianten miteinander in einem Boxplot vergleichen.
Ich meine, dazu habe ich bereits eine Lösung gepostet.
Nun, ich komme noch nicht so recht weiter. Ich glaube, die Schwierigkeiten haben noch gar nichts mit Matlab zu tun, sondern es ist Dir noch nicht gelungen, das Gesamtproblem in elementare (und damit einfach lösbare) Teil-Problem zu splitten. Darum bohre ich nochmals nach:
In welchem Format liegen die Inputs vor? Welche Daten liegen in welchen Files? Mit welchem Code (oder wie sonst) importierst Du die Daten und was möchtest Du ändern?
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
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.