Fysik
MatLab 2. ordens diff ligning
Ligningerne er som følger:
d2x/dt2=-D/m*v*vx
d2y/dt2=-g-D/m*v*vy
løsning af 1 ordens diff ligning er beskrevet meget godt under help.. men er som sagt lidt i tvivl om 2. ordens.. på forhånd tak for hjælpen..
Svar #1
09. december 2005 af sigmund (Slettet)
http://www.wam.umd.edu/~petersd/246/matlabode2.html.
Du skal altså først reducere problemet til løsning at fire 1. ordens diff.ligninger.
Svar #2
09. december 2005 af Boxer (Slettet)
http://www.facstaff.bucknell.edu/maneval/help211/usingODE45.pdf
vi har desværre ikke haft så meget om reduction of order, så er lidt usikker på dette område..
En ting jeg ikke kan lide ved ligningen er at v=sqrt(vx^2+vy^2)
nogen forslag til løsning af dette?
Svar #3
09. december 2005 af iB (Slettet)
d2x/dt2=-D/m*v*vx=C_1x, C_1=D/m*v*v
og
d2y/dt2=-g-D/m*v*vy=C_2y, C_2=-g-D/m*v*vy
-Det virker på mig som om dette er ganske standard ligninger, selm om jge ikke kan huske på stående for hvordan man løser dem???
Svar #4
09. december 2005 af Boxer (Slettet)
Svar #5
09. december 2005 af fixer (Slettet)
dx/dt = vx
dy/dt = vy
dvx/dt = -(D/m)(vx/v)
dvy/dt = -(D/m)(vy/v)-g
De ligninger, du oplyser i #0, er ganske vist ikke identiske hermed, men jeg er ret sikker på der ligger en bøf bag ved dine ligninger. Hvis ikke, så er det bare at skifte brøkerne vx/v og vy/v ovenfor ud med produkterne vx*v og vy*v.
Ligningerne er ikke-stive og løses derfor enkelt med Matlab's f.eks. ode34 Runge-Kutta metode.
Svar #6
09. december 2005 af iB (Slettet)
Men
v=sqrt(vx^2+vy^2)
<=> v=x^2+y^2
Kan du da ikke skrive:
x_tt=-D/m*(x^5+xy^4+2(yx^2)^2)
og så bruge
y1=y and y2=y' (fra #1)
Svar #7
09. december 2005 af Boxer (Slettet)
D=0.008706934873;
m=0.145;
g=9.8;
v=50;
theta=7/36*pi
i = inline('[vx ; -D/m*vx/sqrt(vx^2+vy^2) ; vy ; -D/m*vy*sqrt(vx^2+vy^2)-g]', 'vx', 'vy');
j = ode45(@i,[0 250],[cos(theta)*v, sin(theta)*v])
.. virker dog ikke.. nogen forslag?
vi bruger normalt "function", men det kan vist ikke lade sig gøre i dette tilfælde?
Svar #8
09. december 2005 af Boxer (Slettet)
Svar #9
09. december 2005 af fixer (Slettet)
Der er ikke noget i vejen for at anvende function.
Jeg ville lave en function M-fil. Kald den kast.m:
function xdot = kast(t,x)
xdot = [x(1); x(2); -D/m*x(3)./sqrt(x(3).^2+x(4).^2); -D/m*x(4)./sqrt(x(3).^2+x(4).^2)-g]
For at simulere differentialligningssystemet i tidsrummet 0=<t=<250 kaldes ode45
t0 = 0; tf = 250;
x0 = [0 0 50*cos(theta) 50*sin(theta)]'; % begyndelsesbetingelser
[t,x] = ode45('kast',t0,tf,x0);
plot(t,x)
Jeg tager forbehold for småfejl idet jeg pt ikke sidder med Matlab foran mig.
Svar #10
09. december 2005 af Boxer (Slettet)
Koden er som følger:
function opg57b()
clear; clc; close all;
TSpan=[0,250];
Dm=0.6004782671
theta=7/36*pi; %vinkel i radianer
vx=50*cos(theta)
vy=50*sin(theta)
g=9.8;
x0 = [vx vy -Dm*vx/50 -Dm*vy/50-g]'; % begyndelsesbetingelser
[t,x] = ode45(@kast,TSpan,x0);
plot(t,x)
grid on
function xdot = kast(t,x)
Dm=0.6004782671
g=9.8;
xdot = [x(1); x(2); -Dm*x(3)./sqrt(x(3).^2+x(4).^2); -Dm*x(4)./sqrt(x(3).^2+x(4).^2)-g]
evt forslag og/eller rettelser er meget velkomne.. på forhånd tak
Svar #11
09. december 2005 af Boxer (Slettet)
Svar #13
10. december 2005 af fixer (Slettet)
x(1) := x
x(2) := y
x(3) := dvx/dt
x(4) := dvy/dt
Derfor skal begyndelsesbetingelserne være som angivet i #9; jeg begribre ikke hvorfor du har lavet om på dem.
Skriv et svar til: MatLab 2. ordens diff ligning
Du skal være logget ind, for at skrive et svar til dette spørgsmål. Klik her for at logge ind.
Har du ikke en bruger på Studieportalen.dk?
Klik her for at oprette en bruger.
