wie man an der Uhrzeit sieht, versuche ich seit ein paar Stunden ein Matlab-Problem zu lösen und scheitere kläglich, was gut daran liegen kann, dass ich noch nie mit Matlab gearbeitet habe.
Das Problem lautet wie folgt:
Es sind zwei Funktionen gegeben:
und
Betrachtet wird der Wertebereich 0<x<11 und 0<y<11
Diese Funktionen stellen die Wände eines sog. 90°-Krümmers da. Zum besseren Verständnis, oben fließt eine Flüssigkeit hinein und rechts wieder hinaus.
Die Aufgabe lautet: "Bestimmen Sie die Lage des maximalen Querschnitts des Krümmers", mit anderen Worten die Gerade deren Schnittpunkte mit den Funktionen, möglichst weit auseinander liegen.
Aus dem Bauch heraus würde ich sagen, die Kurven sind bezüglich der Gerade x=1 symmetrisch, weswegen der maximale Querschnitt auf dieser Geraden liegen sollte. Wenn man es plottet, sieht es auch ziemlich danach aus.
Mein Ansatz war der folgende:
1. Ich leite eine der Funktionen ab, um die Steigung der Tangenten zu ermitteln.
2. Stelle ich die Gleichung der dazu orthogonalen Geraden auf.
3. Ermittele ich den Schnittpunkt mit der anderen Funktion.
So bekomme ich zwei Punkte, deren Abstand ich ermitteln kann. Diese Prozedur führe ich für alle Punkte im betrachteten Wertebereich durch (natürlich mit einer gewissen Schrittweite,) und suche mir die geringste Distanz heraus.
Der vielversprechendste Code den ich bisher habe lautet wie folgt:
%Einlesen der Variable der Potentialstroemungen
a = 0.1;
x = 0.1:0.5:11; %Definition von Grenzen und Schrittweite der x-Werte
y1 = 1./(a*x); %Funktion 1
y2 = 3./(a*x); %Funktion 2
y3 = zeros(22,22)
m_T = -3./(a*x.^2) %Steigung d. Tangente von f2
b_T = y2-m_T.*x %y-Achsenabschnitt d. Tangente von f2
m_O = -1./m_T %Steigung d. orthogonalen Gerade von f2
b_O = y2-m_O.*x %y-Achsenabschnitt d. orthogonalen Gerade von f2
for i = 1:22 for n = 1:22
y3(i,n) = m_O(i)*x(n)+b_O(i) %Berechnung der Punkte auf d. orthogonalen Gerade von f2
end
y_diff=abs(y1-y3(i,:)) %absoluter Wert der Differenz von f1 zu der orthogonalen Geraden
y_s=min(y_diff) %Suche nach dem Minimum der Differenz => y-Wert des Schnittpunktes
x_s=find(y_diff==y_s) %Suche nach dem dazugehörigen x-Wert
distance(i)=sqrt((x(i)-x_s)^2+(y1(i)-y_diff(x_s))^2) %Berechnung der Distanz der Punkte
end
Es gibt damit allerdings mehrere Probleme:
1. Er funktioniert noch nicht ganz, die berechnete Distanz (im Plot gelb) ist totaler Quatsch.
2. Es erscheint mir etwas nach einer Holzhammer-Methode, vor allem mit den beiden for-Schleifen.
3. Die Suche nach den Schnittpunkten ist alles andere als elegant.
4. Es gibt vielleicht einen mathematisch schöneren Weg.
Puh, das war jetzt eine Menge Text... Vielen Dank schon mal an die, die bis hierhin durchgehalten haben.
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.