70-1
% wegweiser(xmx,ymx,f) zeichnet ein Wegweiserfeld zu y'=-f*y % mit Pfeilen an den Positionen 0:xmx 0:ymx function voidbk = wegweiser(xmx,ymx,f) hold on for x=0:1:xmx for y=0:1:ymx w=atan(f*y); putarrow(x,y,w); end end hold off % internal function function voidbk = putarrow(xpos,ypos,win) xars = [0.08 0.25 -0.25 0.25 0.08; ... 0.01 0 0 0 -0.01 ; 1 1 1 1 1]; xpl= [cos(win) -sin(win) xpos; sin(win) cos(win) ypos; 0 0 1]*xars; plot(xpl(1,:),xpl(2,:)) for x=0:1:25 for y=0:1:18 w=atan(-0.1*y); putarrow(x,y,w); end end
70-2
separierenintegrieren
% simpdecay(f) L\"osung der simplen Dgl. y'=-f*y yin = 15; [tsol,ysol] = ode45('simpdecayeval',25, yin); plot(tsol,ysol); % deri= simpdecayeval(tval,yval) die Ableitung y'=-0.2*y function deri = simpdecayeval(tval,yval); deri = -0.2* yval;
70-3
% selfeulerdecay - ausprogrammiertes Euler-Verfahren % fuer Zerfallsgleichung y'=-0.1*y ttot = 50; yin = 20; lam = -0.1; h = ttot/1000; tsol = [0:1000]'*h; ysol= zeros(1001,1); %init ysol(1) = yin; %loop for k=2:1001 ysol(k) = ysol(k-1) + h* (lam*ysol(k-1)); end
70-4
yvec0 dyvec0 yvec1 dyvec1 yvec2 dyvec2 yvec3 x 10 0 10 -0.02 9.996 -0.04 9.988 u 0 -0.1 -0.02 -0.1 -0.04 -0.1 -0.06 y 0 1 0.2 1 0.4 0.9996 0.5999 v 1 0 1 -0.002 0.9996 -0.004 0.9988 t = 0 0.2 0.4 0.6
70-5
% [tsol,ysol]= selfeuler(fctnam, ttot, yin) % ausprogrammierter ode-solver nach Euler % mit gleicher signatur wie ode45() function [tsol,ysol]= selfeuler(fctnam, ttot, yin) h = ttot/1000; tsol = [0:1000]'*h; ysol= zeros(1001,length(yin)); %init ysol(1,:) = yin'; %loop for k=2:1001 ysol(k,:) = ysol(k-1,:) +... h* ( feval(fctnam, (k-1)*h , ysol(k-1,:)') )'; end
70-6
% deriv = dmposc(t,yac) Beispiel gedaempfter Oszillator function deriv = dmposc(t,yac) w = 1.08; d = 0.01; deriv = zeros(2,1); deriv(1) = yac(2); deriv(2) = -d*yac(2) -w*w*yac(1) + 0.2*sin(t) ; % Skript rundmposc Integrieren und Zeichnen yin = [0 0]'; [tsol, ysol] = ode45('dmposc', 200 , yin); figure(1); clf plot(tsol,ysol(:,1)) figure(2); clf plot(tsol,ysol(:,2),'r')
70-7
% haronmosc einfacher harmonischer Oszillator function deri = harmonosc(tac,yac) deri = zeros(2,1); deri(1) = yac(2) ; deri(2) = -yac(1); % dmposc501 Beispiel gedaempfter Oszillator function deri = dmposc501(tac,yac) deri = zeros(2,1); deri(1) = yac(2) ; deri(2) = -25*yac(1) -0.1*deri(1); % splinederiv Ableitung der Spline-Bedingung y(IV) = 0 function deri = splinederiv(tac,yac) deri = zeros(4,1); deri(1) = yac(2) ; deri(2) = yac(3); deri(3) = yac(4) ; deri(4) = 0;
70-8
% runluftfall - freier Fall mit Luftwiderstand % vorgaengig CLUFTBREMS definieren (0.5 - 0.001) global CLUFTBREMS [tsol,ysol] = ode45('luftfallderi',100,[0,0]); figure(1); clf; plot(tsol,ysol(:,1)) figure(2); clf; plot(tsol,ysol(:,2)); figure(1) % deri = luftfallderi(tac,yac) Ableitung Fall in Luft function deri = luftfallderi(tac,yac) global CLUFTBREMS deri = zeros(2,1); deri(1)=yac(2); deri(2)=-9.81 + CLUFTBREMS*(yac(2))^2;
70-9 Siehe Beispiel-M-files
70-10 Siehe Beispiel-M-files
70-11
% runtochzerfpar zeigt Zeitfunktionen eines radioaktiven % Zerfalls mit Tochterkern % globale Parameter: LAMBDA1 LAMBDA2 interaqktiv abgefragt global LAMBDA1; global LAMBDA2 LAMBDA1 = input('lambda1 eingeben'); LAMBDA2 = input('lambda2 eingeben'); yin = [10 0]' [xsol, ysol] = ode45('tochzerfpar', 50 , yin); plot(xsol,ysol) % deri = tochzerfpar(t,y) Ableitungen zum RA-Tochterzerfall function deri = tochzerfpar(t,y) global LAMBDA1 ; global LAMBDA2 deri = zeros(2,1); deri(1) = -LAMBDA1*y(1); deri(2) = LAMBDA1*y(1) - LAMBDA2*y(2);
70-12
% runchargpart.m ystart=[ 0 0 0 1]'; [t45,y45]= ode45('chargpartderi',200,ystart); plot(y45(:,1),y45(:,3),'r') % deriv = chargpartderi(t,yac) Ableitung Teilchen 2D % in konstantem Magnetfeld function deriv = chargpartderi(t,yac) B=-1/10; deriv = zeros(4,1); deriv(1) = yac(2); deriv(2) = yac(4)*B ; deriv(3) = yac(4); deriv(4) = -yac(2)*B ;
70-13, 14, 15 siehe M-File Sammlung
70-16
a)
hat die allgemeine Lösung
.
Die 4 Bedingungen an den beiden Rändern
legen , , und fest.
Das Gleichungssystem
70-17
Die 4 Elementar-Splines sind:
B1:
Doppelte Nullstelle bei 1
B2:
Doppelte Nullstelle bei 0
B3:
Doppelte Nullstelle bei 1, einfache bei 0
B4:
. Doppelte Nullstelle bei 1, einfache bei 0
Beim Auswechseln
von gegen wird aus B4
, also B3 und
aus B2
wird
, also B1.
T711 - Im Quadrarurproblem hängt die Ableitung nur von
der unabhängigen Variablen x ab.
-3 mal 2 = 6 - Man muss die Lösung ysol gegen tsol plotten nicht nur ysol allein.
- Damit die Signatur (Struktur der Parameter beim Aufruf)
für die im innern aufgerufene
Ableitungfunktion immer gleich ist.
T712
% deri = tankleerderi(tac,yac) Ableitung Tank-Entleerung function deri = tankleerderi(tac,yac) if yac > 0 % Absichern: Wurzelnenner muss positiv sein deri= -sqrt(2 * 9.81 * yac) * 0.04^2*pi/(1.3^2*pi); else deri=0; end
T713
% varimagderi Ableitung Teilchen im variablen Magnetfeld function deri = varimagderi(tac,yac) B=0.1*yac(1); deri = zeros(4,1); deri(1)=yac(2); deri(2) = 1/B*yac(4); deri(3)=yac(4); deri(4) = -1/B*yac(2);
T714
% circmotionderi Ableitung zu Kreisbewegung function deri = circmotionderi(tac,yac) deri = zeros(4,1); deri(1)=yac(2); deri(2) = 0.05*yac(4); deri(3)=yac(4); deri(4) = -0.05*yac(2);
yvec0 dyvec0 yvec1 dyvec1 yvec2 dyvec2 yvec3 x 0 1 0.2 1 0.4 0.9999 0.6 u 1 0 1 -0.0005 0.9999 -0.001 0.9997 y 20 0 20 -0.01 19.998 -0.02 19.994 v 0 -0.05 -0.01 -0.05 -0.02 -0.05 -0.03 t = 0 0.2 0.4 0.6
T715
% deri= fallluftderi(tac,yac) Ableitung % freier Fall mit Luftwiderstand function deri = fallluftderi(tac,yac) deri = zeros(2,1); deri(1)=yac(2); % a) deri(2) = -9.81 deri(2) = -9.81 + deri(2)^2*0.05;