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:
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.
function mischungstemperatur
data1 = [054.2;3053.1;6052.7;9052.2;12051.9;15051.4;18051.12;21050.7;
24050.4;27050.1;30049.8;30249.4;30448.4;30644.5;30841.6;
31039.7;31238.8;31438;31637.9;31837.7;32037.7;33037.7;
36037.6;39037.6;42037.6;45037.7;48037.7;51037.7;54037.7;
57037.7;60037.7;63037.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],[3060],'color','red','LineWidth',2) set(gca,'FontSize',20) xlabel('Zeit in s','FontSize',25) ylabel('Temperatur in °C','FontSize',25)
% die Funktion "findmin": functiondiff = 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
@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
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.