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

Messwertauswertung / Extrapolation ?

 

jabber23
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 08.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2009, 09:28     Titel: Messwertauswertung / Extrapolation ?
  Antworten mit Zitat      
Hallo goMatlab-User,

ich bin neu hier im Forum und verwende Matlab erst seit ein paar Wochen, also seit mir nicht böse wenn ich mich nich besonders gut in Matlab auskenne.

An der Uni haben wir Matlab R2007b mit allen Toolboxes der Standardversion.

Ich habe folgendes Problem:
Im Physikpraktikum an der Uni haben wir ein Versuch zur spezifischen Wärmekapazität von Festkörpern gemacht. Es werden dabei Stoffe unterschiedlicher Temperatur T in einem Kalorimeter gemischt.
Dabei sind Messreihen T(t), also Temperatur von der Zeit, gebildet worden.
Es stellt sich mit der Zeit eine Mischungstemperatur ein, die für die Rechnung benötigt wird und sich aus der Messreihe "extrapolieren" lässt (lt. Praktikumsleiter). Ich weiß aber nicht, ob "Extrapolation" wirklich der richtige Begriff dafür ist.
Hab folgendes Bild von einer anderen Uni gefunden, so sollte das aussehen:

http://www.inw.hs-merseburg.de/~viuser/Links/TempVerlauf.jpg

Im Versuch zur Grafik hat man also eine etwa gleichbleibende Temperatur vor dem Mischen, dann einen Abfall auf eine niedrigere Temperatur, die letztendlich der Mischungstemp. entspricht.
Die beiden Gerade oben und unten sind Regressionen aus den jeweiligen Temp, die gestrichelte vertikale Linie im Bereich des Abfalls wird so gebildet, das die schmalen Flächen zwischen Vertikale und dem Sprung betragsmäßig gleich groß sind. Der Ordinatenwert der Schnittpunkte dieser Vertikalen und den Regressionsgeraden oben und unten sind dann die beiden gesuchten Temperaturen.

So...meine Frage ist jetzt, gibt es eine Möglichkeit in Matlab, solche Bestimmungen durchzuführen. Ich könne zwar per spline() oder interp() die Geraden bekommen, aber ich kenne keine Möglichkeit, diese Vertikale (mit der Forderung bzgl. der Flächen) zu bestimmen.

Hat da irgendwer eine Idee ?
Danke für eure Antwort.
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.028
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 08.05.2009, 09:40     Titel:
  Antworten mit Zitat      
Moin,

das Problem kommt mir seeehr bekannt vor Wink

Hier mal mein Code (nicht schön aber selten Wink ):
Code:
function mischungstemperatur
data1 = [0 54.2;30 53.1;60 52.7;90 52.2;120 51.9;150 51.4;180 51.12;210 50.7;
         240 50.4;270 50.1;300 49.8;302 49.4;304 48.4;306 44.5;308 41.6;
         310 39.7;312 38.8;314 38;316 37.9;318 37.7;320 37.7;330 37.7;
         360 37.6;390 37.6;420 37.6;450 37.7;480 37.7;510 37.7;540 37.7;
         570 37.7;600 37.7;630 37.7];

% erstellen der 3 Teilgeraden (durch fitten der Daten)
fit1_1_p = polyfit(data1(1:11,1),data1(1:11,2),1);
fit1_2_p = polyfit(data1(11:21,1),data1(11:21,2),1);
fit1_3_p = polyfit(data1(21:end,1),data1(21:end,2),1);

% die Zeitreihen für die Berechnung der Funktionswerte
t1 = data1(1,1):.01:data1(end,1);
t2 = data1(10,1):.01:data1(22,1);

% berechnen der Funktionswerte für die Geraden
fit1_1 = polyval(fit1_1_p,t1);
fit1_2 = polyval(fit1_2_p,t2);
fit1_3 = polyval(fit1_3_p,t1);

% Schnittpunkt der Geraden finden (für die Integralsberechnung)
x1 = t1(find(polyval(fit1_2_p,t1)<fit1_1,1));
x2 = t1(find(polyval(fit1_2_p,t1)<fit1_3,1));

% Berechnen der Integrale der Geradengleichungen
int1_1_p = polyint(fit1_1_p);
int1_2_p = polyint(fit1_2_p);
int1_3_p = polyint(fit1_3_p);

% Aufruf der Optimierungsfunktion (Startwert ist hier 305)
time = fminsearch(@findmin,305);

% plotten der Ergebnisse
figure,
plot(data1(:,1),data1(:,2),'x',...
     t1,fit1_1,'k',...
     t2,fit1_2,'k',...
     t1,fit1_3,'k')
line([time time],[30 60],'color','red','LineWidth',2)
set(gca,'FontSize',20)
xlabel('Zeit in s','FontSize',25)
ylabel('Temperatur in °C','FontSize',25)

% die Funktion "findmin":
    function diff = findmin(x)
        % Berechnen der ersten Teilfläche
        diff1 = (polyval(int1_1_p,x1)-polyval(int1_1_p,x))- ...
                (polyval(int1_2_p,x1)-polyval(int1_2_p,x));
        % Berechnen der zweiten Teilfläche
        diff2 = (polyval(int1_2_p,x)-polyval(int1_2_p,x2))- ...
                (polyval(int1_3_p,x)-polyval(int1_3_p,x2));
        % Differenz bilden (den Betrag davon), diese Differenz soll minimiert werden
        diff = abs(diff1 - diff2);
    end
end


Das ganze mal als mischungstemperatur.m abspeichern und ausführen.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
jabber23
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 08.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2009, 08:14     Titel:
  Antworten mit Zitat      
Sorry, dass ich mich jetzt erst wieder melde!

@steve: Vielen, Vielen Dank für deinen Code. Sieht nach ner Menge Arbeit aus! Das kommt dem schon sehr nahe, was ich brauche.

Vlt an alle nochmal: Gibt es eine Möglichkeit, sich die Schnittpunkte der roten Linie und der oberen/unteren Grade berechnen zu lassen, momentan kann man es glaub ich nur ablesen (per Zoom immerhin ziemlich genau).
Das Problem scheint mir aber, dass der rote Strich per line()-Befehl erstellt wird und keine Funktion in dem Sinn ist. Der roots()-Befehl tuts jedenfalls nicht Wink
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.