7 Analysis 1. Programmieren Sie für folgendes Polynom eine MATLAB Funktion oder eine anonyme Funktion: y(x) = 0.001x 5 + 0.05x 4 + 0.2x 3 x 2 0.8x + 4 Die Variable x ist der Eingabeparameter und y der Ausgang der MATLAB Funktion. Ermitteln Sie daraufhin die Minima und die Nullstellen des Polynoms. Wählen Sie für die Suche die Startwerte -3, -2,..., 4. Plotten Sie zum Schluss das Polynom. (fminsearch, fzero, plot) y = @(x) -0.001* x.^5+0.05* x.^4+0.2* x.^3 -x.^2-0.8* x +4; x0 = -3:4; minimum = zeros ( size (x0)); nullstelle = zeros ( size (x0)); for k = 1: numel (x0) minimum (k) = fminsearch (y,x0(k)); nullstelle (k) = fzero (y,x0(k)); end x = linspace ( -5,6,201) ; plot (x,y(x)) 2. Ermitteln Sie mit Hilfe von integral folgende bestimmte Integrale: π sin(x)dx, π/4 tan(x)dx, π sinh(x)dx, π cosh(x)dx, 1 e x dx, 1 ln(x)dx 0 0 π π 0 0 integral (@sin,0, pi) integral (@tan,0, pi /4) integral ( @sinh,-pi,pi) integral ( @cosh,-pi,pi) integral (@exp,0,1) integral (@log,0,1) 3. Ermitteln Sie mit Hilfe von integral folgende bestimmte Integrale: 4 4 cos(2x) x 2 + 2x + 2 + sin 3 (x)dx, 2π 0 x 3 sin 2 (x)dx, 0 π sin(x) cos 2 (x)dx Bemerkung: Die Funktionen sind zuerst in einer MATLAB Funktion zu definieren, da integral nur MATLAB Funktionen integriert. f = @(x) cos (2* x).* sqrt (x.^2 + 2*x + 2 + sin (x).^3) ; g = @(x) x.^3.* sin (x).^2; h = @(x) sin (x).* cos (x).^2; integral (f, -4,4) integral (g,0,2* pi) integral (h,-pi,0) 28
4. Der schiefe Wurf ist ein klassisches Beispiele für eine gewöhnliche lineare Differentialgleichung 2. Ordnung. Für die Dynamik eines Massenpunktes gilt: m a = F Da in diesem Beispiel der Luftwiderstand vernachlässigt wird, ist die Schwerkraft die einzige wirkende Kraft. a = x = g Die Gleichungen für den schiefen Wurf lauten somit: Die Lösungsschritte in MATLAB ẍ(t) = 0 ÿ(t) = g a) Substitution: Für die Berechnung einer gewöhnlichen Differentialgleichung n-ter Ordnung wird folgende Substitution gemacht: y (n) = f(t, y, y,..., y (n 1) ) geht über in y 1 = y, y 2 = y,... y n = y (n 1) Daraufhin wird in MATLAB die gewöhnliche Differentialgleichung n-ter Ordnung in ein System von n Differentialgleichungen 1. Ordnung umgeschrieben. y 1 = y 2 y 2 = y 3... y n = f(t, y, y,..., y (n 1) ) Die Gleichungen für den schiefen Wurf lauten nun: ẋ 1 = x 2 ẋ 2 = 0 ẏ 1 = y 2 ẏ 2 = g b) MATLAB Funktion: Das System von n Differentialgleichungen 1. Ordnung wird in einer MATLAB Funktion definiert. function dy = F(t,y) dy =[y(2) ;...; f(y (1),y (2),...,y(n))] Die MATLAB Funktionen für den schiefen Wurf : function dx = schieferwurfx ( t, x) dx =[x(2) ;0] function dy = schieferwurfy ( t, y) dy =[y(2) ; -10] 29
c) Lösen der gewöhnlichen Differentialgleichung: Mit dem Befehl ode45 kann nun eine Lösung für die gewöhnliche Differentialgleichung eruiert werden. [T,Y]= ode45 ('F',Zeitspanne, Anfangsbedingungen ) ode45 ermittelt für die n Differentialgleichungen 1. Ordnung, die in der MATLAB Funktion F definiert sind, die Lösung Y. Jedes Element einer Zeile der Matrix Y gehört zu einer Zeit, die im Spaltenvektor T abgespeichert wurde. Berechnen Sie nun für folgende Anfangsbedingungen die Bahnkurve des schiefen Wurfes: x 0 = y 0 = 0 ẋ 0 = 20 cos(π/4) ẏ 0 = 20 sin(π/4) Erstellen Sie eine Graphik vom schiefen Wurf. Zeitspanne: t [0... 3] Zuerst müssen 2 Funktions-Files erstellt werden: function dx = schieferwurfx ( t, x) dx =[x(2) ;0] function dy = schieferwurfy ( t, y) dy =[y(2) ; -10] Dann kann die eigentliche Berechnung erfolgen. [T,X]= ode45 ('schieferwurfx ',[0 3],... [0;20* cos (pi /4) ]); [T,Y]= ode45 ('schieferwurfy ',[0 3],... [0;20* sin (pi /4) ]); plot (X (:,1),Y (:,1) ) title ('Schiefer Wurf ') xlabel ('Weite [m]') ylabel ('Hoehe [m]') axis equal Lösung mit anonymen Funktionen: schieferwurfx = @(t,x) [x (2) ;0]; schieferwurfy = @(t,y) [y (2) ; -10]; [T,X]= ode45 ( schieferwurfx,[0 3],... [0;20* cos (pi /4) ]); [T,Y]= ode45 ( schieferwurfy,[0 3],... [0;20* sin (pi /4) ]); plot (X (:,1),Y (:,1) ) title ('Schiefer Wurf ') xlabel ('Weite [m]') ylabel ('Hoehe [m]') axis equal 30
8 Interpolation 1. Geben Sie folgende Vektoren im Command Window ein: x =[0 0. 6283 1. 2566 1. 8850 2. 5133 3. 1416]; y =[1 0. 9231-0.0083-0.9165 0. 9994-0. 9027]; xi= linspace (0,pi,201) ; Die Elemente in den Vektoren x und y sind Punkte aus einer unbekannten Funktion f = y(x). Der Vektor xi wurde im Intervall [0,pi] in 201 linear gleichmässig verteilte Punkte unterteilt. Ermitteln Sie die ursprüngliche Funktion, indem Sie anhand der Vektoren x und y für die Punkte aus dem Vektor xi die entsprechenden Werte des Vektors yi interpolieren. Tipp: Verwenden Sie für die Interpolation die Befehle interp1 oder spline. Probieren Sie beim Befehl interp1 die verschiedenen Interpolationsmethoden aus. Folgende Methoden stehen zur Verfügung: nearest, linear, spline und pchip. Plotten Sie die Resultate. x =[0 0. 6283 1. 2566 1. 8850 2. 5133 3. 1416]; y =[1 0. 9231-0.0083-0.9165 0. 9994-0. 9027]; xi= linspace (0,pi,201) ; scatter (x,y) plot (xi, interp1 (x,y,xi,'nearest ')) plot (xi, interp1 (x,y,xi,'linear ')) plot (xi, interp1 (x,y,xi,'spline ')) plot (xi, interp1 (x,y,xi,'pchip ')) plot (xi, spline (x,y,xi)) 2. Geben Sie folgende Vektoren und Matrizen im Command Window ein: x = -4:2:4; y = x; [X,Y] = meshgrid (x,y); Z = [0.6152-0.0124-4.4584-4.2023-0.5526-0.1435 3. 3787 1. 7615 0. 3065 2. 1865-2.8383 0. 6225 0. 9810 1. 1028 3. 5748-2.1566 0. 0124 0. 9523 1. 2113 2. 4250 0. 5643 4. 3627 7. 1144 4. 7406 1. 8047]; xi = linspace ( -4,4,101) ; yi = xi; [Xi,Yi] = meshgrid (xi,yi); Die Elemente in den Matrizen X, Y und Z sind Punkte aus einer unbekannten Funktion f = z(x, y). Die Vektoren xi und yi wurden im Intervall [-4,4] in 101 linear gleichmässig verteilte Punkte unterteilt. Für die Evaluation von Funktionen mit zwei Variablen können Vektoren mit dem Befehl meshgrid zu Matrizen transformiert werden. Ermitteln Sie die ursprüngliche Funktion, indem Sie anhand der Matrizen X, Y und Z für die Punkte aus den Matrizen Xi und Yi die entsprechenden Werte der Matrix Zi interpolieren. Tipp: Verwenden Sie für die Interpolation die Befehle interp2 oder griddata. Probieren Sie die verschiedenen Interpolationsmethoden aus. Plotten Sie die Resultate. x = -4:2:4; y = x; [X,Y] = meshgrid (x,y); 31
Z = [0.6152-0.0124-4.4584-4.2023-0.5526-0.1435 3. 3787 1. 7615 0. 3065 2. 1865-2.8383 0. 6225 0. 9810 1. 1028 3. 5748-2.1566 0. 0124 0. 9523 1. 2113 2. 4250 0. 5643 4. 3627 7. 1144 4. 7406 1. 8047]; xi = linspace ( -4,4,101) ; yi = xi; [Xi,Yi] = meshgrid (xi,yi); mesh (Xi,Yi, interp2 (X,Y,Z,Xi,Yi,'nearest ')) mesh (Xi,Yi, interp2 (X,Y,Z,Xi,Yi,'linear ')) mesh (Xi,Yi, interp2 (X,Y,Z,Xi,Yi,'cubic ')) mesh (Xi,Yi, interp2 (X,Y,Z,Xi,Yi,'spline ')) mesh (Xi,Yi, griddata (X,Y,Z,Xi,Yi,'natural ')) mesh (Xi,Yi, griddata (X,Y,Z,Xi,Yi,'v4 ')) 3. Geben Sie folgende Vektoren und Befehle im Command Window ein: x = [ -5-4 -1 1 2 3 5]; y = [ -5 4-3 2-1 0-3]; 32
scatter (x,y) axis ([ -6 6-6 6]) Passen Sie ein Polynom mit beliebiger Ordnung in die Punkte ein. Plotten Sie das Resultat. (polyfit, polyval) x = [ -5-4 -1 1 2 3 5]; y = [ -5 4-3 2-1 0-3]; scatter (x,y) axis ([ -6 6-6 6]) xi = linspace ( -5,5,201) ; p = polyfit (x,y,4) ; plot (xi, polyval (p,xi)) 33
9 Biegelinie In dieser Übung soll der Umgang mit Funktionen weiter vertieft werden. Aus der Mechanik ist Ihnen das Problem der Berechnung der Biegelinie bestens vertraut. Die Funktion Biegelinie.m (kann von der Homepage heruntergeladen werden) plottet die Biegelinie einer auf Biegung beanspruchten Welle, abhängig von der Position der Lager und der Belastungen. Folgende Features sind implementiert: Die Welle kann hyperstatisch gelagert sein Kein konstanter Querschnitt nötig (abgesetzte Welle) (konstante) Streckenlasten, Punktlasten, Momente Auflager und/oder breite Lager (entspricht der festen Einspannung eines Biegebalkens) Ausgegeben werden: Skizze der Welle mit den Belastungen der Lager Verlauf von Querkraft Biegemoment Steigung Biegelinie (als Plots und Datenvektoren) Skizzieren Sie einige Probleme, die Ihnen in der Mechanik begegnen könnten. Benutzen Sie die Funktion, um die Biegelinien zu berechnen. Die Programmschnittstelle ist folgende: [ x, T, M, Steigung, Durchbiegung ] =... Biegelinie ( E, Abschnitte, Auflager, BreiteLager,... Streckenlasten, Punktlasten, Momente ) Die Inputvariablen haben die Bedeutungen: E: Elastizitätsmodul (in MPa) Abschnitte: Matrix; die erste Spalte beinhaltet die Länge der Abschnitte, die zweite Spalte die Durchmesser (in mm) Auflager: Vektor mit den Positionen der Auflager BreiteLager: Vektor mit den Positionen der breiten Lager (diese nehmen Kräfte und Momente auf) Streckenlasten: Matrix; erste Spalte = Beginn der Streckenlast, 2. Spalte = Ende der Streckenlast, 3. Spalte = Betrag (in N/mm) Punktlasten: Matrix; 1. Spalte = Position, 2. Spalte = Wert (positiv oder negativ) (in N) Momente: Matrix; 1. Spalte = Position, 2. Spalte = Wert (positiv oder negativ) (in Nmm) Falls ein Argument nicht benötigt wird, [] einsetzen. 34
Beispiel: Abgesetzte Welle mit 2 Punktlasten E = 210000; Abschnitte = [50 20 80 30 50 20]; Auflager = [10 170]; BreiteLager = []; Streckenlasten = []; Punktlasten = [60 3000 125 800]; Momente = []; [ x, T, M, Steigung, Durchbiegung ] =... Biegelinie ( E, Abschnitte, Auflager, BreiteLager,... Streckenlasten, Punktlasten, Momente ); Beispiel: Doppelseitig eingespannter Balken mit Streckenlast (statisch überbestimmt!) E = 210000; Abschnitte = [ 500 60]; Auflager = []; BreiteLager = [0 500]; Streckenlasten = [0 500 2]; Punktlasten = []; Momente = []; [ x, T, M, Steigung, Durchbiegung ] =... Biegelinie ( E, Abschnitte, Auflager, BreiteLager,... Streckenlasten, Punktlasten, Momente ); 35
10 Datenanalyse Eine Aufgabe, die einem Ingenieur häufig begegnet, ist die Auswertung von Messdaten. Dies soll hier anhand eines Zugversuches geübt werden. Das Ziel ist, die Spannungs-Dehnungs-Kurve aus Rohdaten zu extrahieren und die Parameter eines einfachen Materialmodells zu bestimmen. Schreiben Sie dazu ein Skript, das folgende Punkte abarbeitet. Nützliche Matlab-Funktionen sind jeweils in Klammern angegeben, Sie können aber natürlich Ihre eigenen Ideen einbringen 1. Einlesen der Rohdaten Zugversuch.TRA, von der Homepage herunterzuladen (importdata) 2. Es werden nur die Spalten wahre Dehnung und wahre Spannung benötigt. Speichern Sie diese Daten in Vektoren. 3. Erstellen Sie ein Spannungs-Dehnungsdiagramm (plot) und beschriften Sie die Achsen 4. Die Fliesskurve sollte weder den elastischen Anteil noch den Anteil nach dem Einschnüren beinhalten. Filtern Sie die Daten deshalb so, dass nur die Wertepaare mit 0.002 < ϕ < 0.25 weiterverwendet werden, wobei ϕ für die wahre Dehnung steht (find oder logische Indizierung) 5. Definieren Sie eine Funktion (als anonyme Funktion oder in einem separaten File) mit zwei vektoriellen Input-Argumenten. Der erste Vektor soll die Dehnung sein, der zweite die Parameter für das Materialmodell, das folgende Form aufweist: k(ϕ, α) = α 1 α 2 e α 3ϕ α 4 (5) Hierbei steht k für die Fliessspannung 6. Definieren Sie eine weitere Funktion (als anonyme Funktion oder in einem separaten File), die die Summe der Fehlerquadrate in Abhängigkeit von α berechnet, also (norm) f(α) = k(ϕ, α) k Messung 2 (6) 7. Versuchen Sie nun, die Parameter α zu variieren, um die Fehlerfunktion f zu minimieren (fminsearch). Für die Optimierung werden Starwerte benötigt. Für α 1 können Sie ungefähr die maximale Spannung verwenden, für α 2 die Differenz zwischen maximaler Spannung und Streckgrenze, für α 3 und α 4 den Wert 1. 8. Erstellen Sie ein neues Plot-Fenster und plotten Sie die Messdaten als Kreise (natürlich nicht alle, nur etwa an 20 gleichverteilten Stellen (interp1)). Plotten Sie im gleichen Fenster die Kurve des Materialmodells und erstellen Sie eine Legende (legend) close all %% Definitionen % Dateiname filename = ' Zugversuch. TRA '; % Trennzeichen delimiter = ';'; % Anzahl Headerlinien nheader = 15; % Spaltennnummern der benoetigten Daten coltruestrain = 5; coltruestress = 6; 36
%% Datenimport data = importdata ( filename, delimiter, nheader ); truestrain = data. data (:, coltruestrain ); truestress = data. data (:, coltruestress ); %% Rohdaten plotten plot ( truestrain, truestress,'linewidth ',2) set (gca,'fontsize ',14) title ('Rohdaten ') xlabel ('wahre Dehnung [ -] ') ylabel ('wahre Spannung [ MPa ]') %% Rohdaten einschraenken ( logische Indizierung ) filter = truestrain >0. 002 & truestrain <0. 2; phi = truestrain ( filter ); k = truestress ( filter ); %% Materialmodell kalibrieren % Modellfunktion und Fehlerfunktion definieren model = @(p)(p (1) -p (2) * exp (-p (3) * phi.^p(4) )); errfun = @(P)( norm ( model (P)-k)); % Startwerte p0 = [ max (k) max (k)-min (k) 1 1]; % Optimierung parameters = fminsearch ( errfun, p0); %% Plotten der bereinigten Daten und des Materialmodells % Messdaten an 20 gleichverteilten Punkten auswerten phi_plot = linspace ( min ( phi ),max ( phi ),20); k_plot = interp1 (phi,k, phi_plot ); % Plotten hold all plot ( phi_plot, k_plot,'o',' linewidth ',2) plot (phi, model ( parameters ),' linewidth ',2) set (gca,'fontsize ',14) title ( sprintf ('Parameter : A =% -6.3 g B =% -6.3 g c =% -6.3 g m =% -6.3 g', parameters )) xlabel ('wahre Dehnung [ -] ') ylabel ('wahre Spannung [ MPa ]') legend ('Messdaten ','Fit ',' Location ',' northwest ') 37