Verfasst am: 05.03.2009, 00:02
Titel: Approximation mit genau drei Geradenstücken
Hallo ,
ich habe folgendes Problem und hoffe das ihr mir dabei weiterhelfen könnt:
Ich habe 16 Datenreihen mit je zwanzig Werten die mir als Array vorliegen. Diese Daten stellen Messergebnisse von Bakterienkonzentrationen dar. Meine Aufgabe ist es nun zwei bestimmte Punkte über eine Approximation zu ermitteln. Dazu soll ich (laut meinem Professor) eine Polygonzug-Approximation mit drei Geradenstücken machen. Der Startpunkt und der Endpunkt sind dabei jeweils durch das erste bzw. letzte Datenpaar der jeweiligen Datenreihe festgelegt. Nur die zwei zu bestimmenden Punkte als Verbindungspunkte der Geradenstücke sind natürlich frei.
Ich habe schon eine Weile im Internet recherchiert, aber bis jetzt nicht viel dazu gefunden.
Nun zu meiner Frage: Wie kann ich diese Art der Approximation in Matlab umsetzen und mit welchen Funktionen?
im Anhang habe ich mal schnell das ganze dargestellt. Die roten Punkte sind die gegebenen Datenpaare aus einem Datensatz. Die zwei zu ermittelnden Punkte (als Verbindungspunkte der Geradenstücke) habe ich dort auch dargestellt.
Könnt ihr damit was anfangen?
Viel grüße
GetBack
antibiotika.gif
Beschreibung:
Beispiel für das Auffinden der gesuchten zwei Konzentrationspunkte
Ansonsten würde ich wahrscheinlich in einem ersten hau-Ruck-Ansatz alle 153 Möglichkeiten ausprobieren und diejenige mit dem kleinsten Fehler auswählen. Dafür braucht man keine speziellen Funktionen, nur eine for-Schleife. Hattest Du auch an so etwas gedacht, oder sollte es etwas akademischer sein? Bereitet Dir die Schleife schon Probleme?
figure hold on
plot(Antibiotikakonz,Bakterienzahl,'rx','MarkerSize',10,'LineWidth',2) plot(neues_x,neue_Werte1,'m') plot(neues_x,neue_Werte2,'c') plot(neues_x,neue_Werte3,'b') legend('original','nearest','linear','cubic') hold off
figure hold on
plot(Antibiotikakonz,Bakterienzahl,'rx') plot(AK1{best_ind},BZ1_interp{best_ind},'b',...
AK2{best_ind},BZ2_interp{best_ind},'b',...
AK3{best_ind},BZ3_interp{best_ind},'b') legend('original','interp') hold off
polyfit war der falsche Ansatz, da die Geraden ja durch die Verbindungspunkte gehen müssen. Der Code ist jetzt für eine Dateneihe. Für die 16 müsstest Du den Code noch anpassen. Außerdem ist der Code noch ineffizient, ist nur ein erster Ansatz.
Verfasst am: 06.03.2009, 12:53
Titel: Danke für die Ansätze
Hallo,
vielen lieben Dank für die Ansätze.
Ich werde mich am Wochenende dran setzen und das mal probieren. Ich bin nämlich gerade auf Arbeit und es deswegen nicht von hieraus machen.
Ein Problem sehe ich noch: Die Verbindungspunkte müssen nicht unbedingt mit den Wertepaaren übereinstimmen, sondern sie können auch vollkommen frei sein (wenn ich mich richtig erinnere). Ich den meisten Fällen sollen sie es aber machen. Aber ich werde mich auch zuerst einmal mit dem einfacheren Fall beschäftigen.
Sobald ich was, habe melde ich mich wieder.
Viele Grüße
GetBack
Einstellungen und Berechtigungen
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.