Fysik

MatLab 2. ordens diff ligning

09. december 2005 af Boxer (Slettet)
Jeg har brug for lidt hjælp til løsning af en anden ordens differentialligning i MatLab.

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..

Brugbart svar (0)

Svar #1
09. december 2005 af sigmund (Slettet)

Se følgende link:

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)

Den konklusion var jeg også kommet til efter at have læst

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?

Brugbart svar (0)

Svar #3
09. december 2005 af iB (Slettet)

Undskyld jeg spørger dumt, men er at løse

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)

nej det dur ikke.. v er en variende hastighed.. ikke en konstant

Brugbart svar (0)

Svar #5
09. december 2005 af fixer (Slettet)

Bevægelsesligningerne for bevægelse i tyngdefelt inklusive luftmodstand opskrives som et system af 1. ordens differentialligninger som

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.

Brugbart svar (0)

Svar #6
09. december 2005 af iB (Slettet)

Ups, sorry, overså det i #2.

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)

Tak for hjælpen.. Vi har valgt at bruge ode45.. og opskriver flg.

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)

#6 vx er et index.. dvs der er ikke underforstået multiplikation

Brugbart svar (0)

Svar #9
09. december 2005 af fixer (Slettet)

I har for det første indtastet den forkerte ligning for dvy/dt. Det skal altså være vy/v, ikke vy*v. Det ser heller ikke ud som om i får sat begyndelsesbetingelserne op som en 4-vektor.

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)

Stadig lidt probs.. med udgangspunkt i #9's kode, kan jeg nu computeren til at beregne diff ligningen, men der var probs med begyndelsesværdibetingelserne og grafen er ikke i overenstemmelse med virkeligheden.

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)

...bemærk evt begyndelsesværdibetingelserne for xdot(1)=vx , xdot(2)=vy, xdot(3) og xdot(4)..

Brugbart svar (0)

Svar #12
10. december 2005 af sigmund (Slettet)

Giver plot(x(:,1),x(:,2)) dig det ønskede?

Brugbart svar (0)

Svar #13
10. december 2005 af fixer (Slettet)

Dine begyndelsesbetingelser er ude i skoven. Bemærk ækvivalenserne

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.