TIETOTEKNIIKAN FYSIIKKA 7050418 5 op Antti Haarto
Kurssista Opitaan ymmärtämään fysikaalisia ilmiöitä Opitaan ilmiöiden mallintamista ja simulointia Ohjelmointiaskeleiden (usein aika) vaikutus simuloinnissa
Esimerkki nestevirtauksesta: Suoran vesisäiliön vuotaminen Säiliön poikkipinta-ala on 1,00 m. Säiliö on avoin, mutta veden pinnalla kelluu kansi, jonka paksuus on 5,00 cm ja jonka massa on 0,0 kg. Säiliöön tulee 0,50 m veden pinnan alapuolelle reikä, josta vuotavan vesisuihkun pinta-ala on 1,00 cm. Kuinka kauan vettä vuotaa?
A 1 = 1,00 m p o = ilmanpaine m = 0,0 kg v 1 h o = 0,50 m v ρ = 1000 kg/m 3 A = 1,00 cm
Nestevirtauksen yhtälöitä Bernoullin yhtälö: + 1 ρ + ρ = + 1 ρ + ρ 1 1 1 p v gh p v gh Jatkuvuusyhtälö: A v Paineet: p 1 0 = A v 1 1 mg = p + p = p 0 A 1
Yhtälöiden käsittelyä A1 Jatkuvuusyhtälöstä: v = v1 A Bernoullin yhtälö sijoitusten jälkeen: mg A p v g h h p v gh 1 1 1 0 + + ρ 1 + ρ ( + ) = 0 + ρ 1 + ρ A 1 A mg + + = A 1 1 1 ρv 1 ρgh ρv 1 1 A A
Nopeus v 1 valittiin, koska se liittyy säiliön tyhjenemiseen Nopeus v 1 ainoa suure, johon liittyy aika v 1 dh h = dt -merkki johtuu korkeuden h pienenemisestä, kun nopeus v 1 on positiivinen
Ratkaistaan nopeus v 1 ja muodostetaan differentiaaliyhtälö 1 d mg gh h A ρ + 1 1 1 d 1 v t A A ρ = = A d g m h 1 1 d d 1 g m h h A t A ρ + = 1 A
Separoidaan muuttujat ja muodostetaan integraali t 0 d d h t = 0 0 d h t g m h A A ρ + 1 1 1 A A A ρ
Ratkaisu t 1 A 1 A m m = + h 0 g A ρ A ρ 1 1 = 617,43 s 60 s
Ohjelmoinnin aiheuttamat erot tuloksissa N t(alku v) t (loppu v) t (ka v) 5 194 s 3477 s 617 s 10 365 s 3006 s 617 s 0 476 s 797 s 617 s 50 557 s 685 s 617 s 100 586 s 650 s 617 s
Aika ilman kantta? Bernoullin yhtälö saa muodon: 1 1 A1 ρv1 + ρgh= ρv1 A gh Josta saadaan nopeudeksi: v1 = A1 1 A Lopussa virtausnopeus lähenee nollaa ja aika ääretöntä
#include <stdio.h> #include <math.h> #define R 1000.0 /* veden tiheys (kg/m3) */ #define M 0.0 /* kannen massa (kg) */ #define A1 1.0 /* säiliön pinnan ala (m) */ #define A 0.0001 /* reiän ala (m) */ #define g 9.81 /* (m/s) */ #define H0 0.5 /* veden korkeus alussa (m) */ double vf(double H) { double x; x=sqrt((m/(a1*r)+h)*(*g/((a1*a1)/(a*a)-1))); return x; } void main() { double t=0.0; /* aika (s) */ double dt; /* ajan lisäys (s) */ double N=10.0; 0 /* askeleiden määrä ä */ double dh=h0/n; /* askeleen pituus (m) */ double H=H0; /* veden korkeus (m) */ double v; /* pinnan nopeus (m/s) */ } do { v=0.5*(vf(h)+vf(h-dh)); /* nopeus korkeudella H */ dt=dh/v; /* aika matkaan dh */ t+=dt; /* lisätään kokonaisaikaa */ H-=dH; /* vähennetään pinnan korkeutta */ } while (H>0.5*dH); /* kunnes korkeus 0 m */ printf("%10.3f s \n",t);
1. Aika ohjelmoinnissa Varsinkin toimintapeleissä tapahtumat liittyvät kiinteästi aikaan Tietokoneissa aikaa t ei voida käsitellä jatkuvana suureena Aikaa on käsiteltävä kahden hetken välisinä lyhyinä ajanjaksoina Δ t = t t1
Tilanteet t tiedetään tää ajan Δt välein, mutta ei niiden hetkien välissä Kappaleisiin liittyvät suureet, esim. paikka, asento, nopeus ja muoto, muuttuvat ajan mukana Käytännössä lasketaan hetkessä Δt suureelle tapahtuva muutos, joka lisätään suureen edelliseen arvoon
. Liike diskreetin ajan avulla Aikaisemmin on todettu, että keskinopeus saadaan paikan muutoksen Δx ja ajan muutoksen Δt avulla v k Δx = Δt Siten paikan muutos Δ x= v Δt ja uusi asema 1 1 k x = x + Δ x= x + v Δt t k v k
Vastaavasti ti keskikiihtyvyys kikiiht a k saadaan nopeuden muutoksen Δv ja ajan muutoksen Δt avulla a k Δv = Δtt Siten nopeuden muutos Δ v= a Δt v = v +Δ v= v + a Δ t ja uusi nopeus 1 1 k k
Keskikiihtyvyyden a k määrittäminen i on yleensä vaikeata, koska se saattaa riippua esimerkiksi i ajan muutoksen jälkeisestä nopeudesta v Käytännössä kuitenkin usein riittää käyttää keskikiihtyvyytenä kiihtyvyyttä ennen ajan muutosta eli = a ak Tällöin ajan muutoksen Δt täytyy olla pieni 1
Keskinopeuden v k määrittäminen i on vaikeata, jos kiihtyvyys ei ole vakio Käytännössä yleensä riittää laskea kiihtyvyyden avulla uusi nopeus v, jolloin keskinopeus saadaan lähtö- ja loppunopeuden avulla v k = v + 1 v
Alussa: x v a i Ajan muutos: Δt Lopussa: v = v +Δ v = v + a Δ i+ 1 i i t vi + vi+ 1 1 vk = = vi + aδt i x x v t x v t a t 1 i+ 1 = i + kδ = i + iδ + ( Δ )
Tehtävä 1 Pieni rautakuula pudotetaan 56 m korkeasta Pisan tornista. Arvioi putoamisaika ja törmäysnopeus. Laske perinteisesti. Simuloi putoamista tietokoneella riittävän lyhyin aikavälein. ÄLÄ HÄVITÄ RATKAISUA!!!
#include <stdio.h> #include <math.h> #define g 9.81 981 /*(m/s) )*/ #define H0 56.0 /* tornin korkeus (m) */ void main() { double t=0.0; /* aika (s) */ double dt=0.001; /* ajan lisäys (s) */ double v=0.0; /* putoamisnopeus (m/s) */ double dv; /* nopeuden muutos (m/s) */ double h=h0; /* korkeus (m) */ double dh; /* korkeuden muutos (m) */ do { dv=-g*dt; /* nopeuden muutos ajassa dt */ dh=(v+0.5*dv)*dt; /* korkeuden muutos ajassa dt */ t+=dt; /* lisätään kokonaisaikaa */ h+=dh; /* uusi korkeus */ v+=dv; /* uusi nopeus */ } while (h>0.0); /* kunnes korkeus 0 m */ } printf("%6.3f m %6.3f s \n",h,t);
3. Liike useammassa ulottuvuudessa Edellisessä käsiteltiin yksiulotteista liikettä, vaikka yleensä liikkeet tapahtuvat kolmessa ulottuvuudessa Uudet asemat, nopeudet ja kiihtyvyydet lasketaan erikseen ulottuvuuksien akseleiden suunnissa
Tehtävä Luoti, jonka massa on 1,0 g, lähtee kivääristä vaakasuoraan nopeudella 645 m/s. Tutki luodin lentorataa 15 m matkalla, kun oletetaan ilmanvastus olemattomaksi. a) Laske asema lopussa perinteisesti heittoliikkeen avulla. b) Simuloi i liikettä tietokoneella t riittävän ä lyhyin aikavälein.
#include <stdio.h> #include <math.h> #define g 9.81 /* (m/s) */ #define R 15.0 /* lentomatka (m) */ #define VX0 645.0 /* alkunopeus x-suunnassa (m/s) */ #define VY0 0.0 /* alkunopeus y-suunnassa (m/s) */ void main() { double t=0.0; 0; /* aika (s) */ double dt=0.001; /* ajan lisäys (s) */ double vx=vx0; /* nopeus x-suunnassa (m/s) */ double vy=vy0; /* nopeus y-suunnassa (m/s) */ double dvy; /* nopeuden y muutos (m/s) */ double x=0.0,y=0.0; /* paikka alussa (m) */ double dx,dy; /* paikan muutos (m) */ FILE *f; f=fopen("luoti1.txt","w"); do { fprintf(f,"%6.3f s %8.3f m %6.4f m \n",t,x,y); dvy=-g*dt; /* nopeuden muutos ajassa dt */ dy=(vy+0.5*dvy)*dt; /* korkeuden muutos ajassa dt */ dx=vx*dt; /* matkan muutos ajassa dt */ t+=dt; /* lisätään kokonaisaikaa */ x+=dx; /* uusi paikka */ y+=dy; /* uusi paikka */ vy+=dvy; /* uusi nopeus */ } while (x<r); /* kunnes maali saavutetaan */ fprintf(f,"%6.3f s %8.3f m %6.4f m \n",t,x,y); fclose(f); } printf("%6.3f s %8.3f m %6.4f m \n",t,x,y);
4. Suhteellinen liike Momentti 1, sivut 83-86. Tietokoneella lasketaan ajan hetkenä vertailupisteen ja kaikkien kappaleiden asemat kiinteän origon suhteen. Kappaleiden paikat vertailupisteen suhteen saadaan vähentämällä kappaleiden koordinaateista vertailupisteen koordinaatit. Tehtävät 3.1 ja 3.16
Liike kappaleen suhteen Tietokoneella lasketaan ajan hetkenä vertailupisteen ja kaikkien kappaleiden asemat kiinteän origon suhteen. Kappaleiden paikat vertailupisteen suhteen saadaan vähentämällä kappaleiden koordinaateista vertailupisteen koordinaatit. TAI Lasketaan ajan hetkenä vertailupisteen i t asema origon suhteen ja kappaleiden asemat suoraan suhteellisen nopeuden avulla.
Tehtävä 3 Henkilöauto kulkee itään nopeudella 18 m/s 50 m päässä risteyksestä. Saman aikaisesti pakettiauto lähestyy samaa risteystä 150 m päästä etelästä nopeudella 15 m/s. Simuloi tietokoneella riittävän lyhyin aikavälein autojen etäisyyttä a) risteyksestä. it tä b) toisistaan henkilöauton näkökulmasta.
#include <stdio.h> #include <math.h> void main() { double t=0.0; /* aika alusta (s) */ double dt=0.5; /* ajan muutos (s) */ double xh=-50.0, yh=0.0; /* henkilöauton paikka alussa (m) */ double xp=0.0, yp=-150.0; /* pakettiauton paikka alussa (m) */ double et; /* etäisyys (m) */ double vxh=18.0, vyh=0.0; /* henkilöauton nopeus alussa (m) */ double vxp=0.0, vyp=15.0; /* pakettiauton nopeus alussa (m) */ FILE *f; f=fopen("autot.txt","w"); do { et=sqrt(pow((xp-xh),.0)+pow((yp-yh),.0)); fprintf(f,"%6.1f s %6.1f m %8.1f m %6.1f m \n",t,xh,yp,et); xh+=vxh*dt; /* uusi paikka ajassa dt */ yp+=vyp*dt; /* uusi paikka ajassa dt */ t+=dt; /* uusi aika */ } while (xh<50.0); /* kunnes henkilöauto kulkenut 500 m */ fclose(f); } printf("valmis\n");
5. Voima ja kiihtyvyys Momentti 1, sivut 94-95. Kappaleeseen, jonka massa on m, vaikuttava voima F aiheuttaa kiihtyvyyden a = Kaikkia systeemille muutoksia aiheuttavia syitä on käytännössä kuvattava voimilla! F m
6. Kitkavoima Momentti 1 sivut 106-113 Suoraan verrannollinen normaalivoimaan Riippuu materiaalien välisestä liikekitkakertoimesta μ k tai lepokitkakertoimesta μ s kitkavoima k i f = μn
Laskutehtävä 1 Määritä tasaisella auton jarrutusmatka nopeudesta 89 km/h lukkojarrutuksessa ja ABS-jarruilla, kun liukukitkakerroin on 0,64 ja lepokitkakerroin on 0,71.
Laskutehtävä Kuinka suurella voimalla käsijarru käytössä olevaa autoa on vedettävä mäessä,,jonka kaltevuus on 15, kun auton massa on 150 kg gja lepokitka-kerroin on 0,180,,jotta auto pysyisi paikoillaan?
7. Ympyräliike Momentti 1 sivut 177-185 Keskihakuvoima on muiden voimien erotus! F r = v m r Kaarevuussäteen r laskeminen on hankalaa ja se esitetään tarkemmin tunnilla.
Ympyrän kehän pituus Kaaren kehän pituus s Kulmat radiaaneissa! s = π r Δϕ r =Δ Kulmat saadaan radan tangenteista Kaaren pituutena voi yleensä käyttää radan tarkastelupisteiden etäisyyttä. k Kaarevuussäde r s k Δϕ
Laskutehtävä 3 Mäkisellä tiellä auton, jonka massa on 980 kg, nopeus on 15 m/s. Kuinka suuri tukivoima autoon vaikuttaa a) Laakson pohjalla b) Mäen päällä kun molemmissa tapauksissa ki kaarevuussäde on 1 m?
8. Väliaineen vastus Kappaleen liikkuessa nesteessä tai kaasussa, kappaleeseen törmäävät molekyylit, paine- erot, aiheuttavat siihen liikkeen suunnalle vastakkaisen vastusvoiman, jonka suuruus riippuu nopeudesta Kun vastusvoima kumoaa kappaleeseen vaikuttavat muut voimat, niin on saavutettu rajanopeus v r
Stokesin laki Kappale (pieni kuula, sumupisara, ilmakupla) liikkuu erittäin hitaasti nesteessä aiheuttamatta pyörteitä. Vastusvoima on suoraan verrannollinen nopeuteen f = kv Verrannollisuuskerroin k riippuu kappaleen koosta ja muodosta sekä väliaineen ominaisuuksista
Pllll Pallolle, jonka säde on r, nesteessä, jonka viskositeetti it tti on η, Stokesin lain mukainen vastusvoima pyörteettömässä ttö ä liikkeessä F = 6πηrv s
Ilman vastus suurilla nopeuksilla Kappale liikkuu nopeasti kaasussa tai nesteessä aiheuttaen pyörteitä. Vastusvoima on verrannollinen likimain nopeuden neliöön F D c D on kappaleen muodosta riippuva vastuskerroin A on kappaleen poikkipinta-alaala ρ on väliaineen tiheys = 1 1 c ρav D
Putoava kappale saavuttaa rajanopeuden, kun liikettä vastustava t voima ja noste kumoavat painovoiman vaikutuksen F 1 c ρav D D + F + N 0 = = G mg Jos nostetta ei huomioida, niin rajanopeudeksi saadaan mg v r = ρa c D Joten rajanopeus riippuu myös kappaleen koosta
Väliaineen vastus tiivistettynä Momentti 1, sivut 336-341. Riippuu väliaineen tiheydestä, kappaleen muodosta ja poikkipinta-alasta sekä kappaleen nopeudesta. Tehtävät 13.70, 13.75, 13.76
Tehtävä 4 Kuten tehtävän 1 simulointiosa, mutta ilmanvastus huomioidaan. Pallon halkaisija,0 cm Raudan tiheys 7870 kg/m 3 Ilman tiheys 1,9 kg/m 3 Vastuskerroin 0,44
#include <stdio.h> #include <math.h> #define g 9.81 /* (m/s) */ #define H0 56.0 /* tornin korkeus (m) */ #define PI 3.14159 #define rhi 1.9 /* ilman tiheys */ #define rho 7870.0 /* pallon tiheys */ #define cd 0.44 /* vastuskerroin */ void main() { double t=0.0; /* aika (s) */ double dt=0.0; /* ajan lisäys (s) */ double v=0.0; /* putoamisnopeus (m/s) */ double dv; /* nopeuden muutos (m/s) */ double h=h0; /* lähtökorkeus (m) */ double dh; /* korkeuden k muutos (m) */ double r=0.01; /* pallon säde */ double A; /* poikkipinta-ala */ double m; /* massa */ double fdm; /* ilmanvastus voima/massa */
A=PI*r*r; m=rho*4 4.0*PI*r*r*r/3 r r/3.0; do { fdm=0.5*cd*a*rhi*v*v/m; /* ilmanvastuksen aih kiihtyvyys */ dv=(fdm-g)*dt; /* nopeuden muutos ajassa dt */ dh=(v+0.5*dv)*dt; /* korkeuden muutos ajassa dt */ t+=dt; /* lisätään kokonaisaikaa */ h+=dh; /* uusi korkeus */ v+=dv; /* uusi nopeus */ printf(" %6.3f s %6.3f m %7.3f m/s %7.3f m/s \n",t,h,v,fdm); } while (h>0.0); 0); /* kunnes korkeus 0 m */ }
Tehtävä 5 Kuten tehtävän simulointiosa, mutta ilmanvastus huomioidaan ja massa muuttuu. Luoti pallon, jonka halkaisija 4,0 mm Lyijyn tiheys 11350 kg/m 3 Ilman tiheys 1,9 kg/m 3 Vastuskerroin 0,44
#include <stdio.h> #include <math.h> #define g 9.81 /* (m/s) */ #define R 15.0 /* lentomatka (m) */ #define VX0 645.0 /* alkunopeus x-suunnassa (m/s) */ #define VY0 0.0 /* alkunopeus y-suunnassa (m/s) */ #define PI 3.14159 #define rho 11350.0 0 /* luodin tiheys */ #define rhi 1.9 /* ilman tiheys */ #define cd 0.44 /* vastuskerroin */ void main() { double t=0.0; /* aika (s) */ double dt=0.001; /* ajan lisäys (s) */ double v; /* vauhti */ double vx=vx0; /* nopeus x-suunnassa (m/s) */ double vy=vy0; /* nopeus y-suunnassa (m/s) */ double dvx, dvy; /* nopeuden x ja y muutos (m/s) */ double x=0.0,y=0.0; /* paikka alussa (m) */ double dx,dy; /* paikan muutos (m) */ double r=0.00; 00 /* luodin säde */ double A; /* poikkipinta-ala */ double m; /* massa */ double fdm; /* ilmanvastus voima/massa */ double fdmx, fdmy; /* ilmanvastus x- ja y-suunnissa */ FILE *f;
A=PI*r*r; m=rho*4.0*pi*r*r*r/3.0; f=fopen("luoti6.txt","w"); do { v=sqrt(vx*vx+vy*vy); fdm=0.5*cd*a*rhi*v*v/m; v/m; /* ilmanvastuksen aih. kiihtyvyys */ fprintf(f,"%6.3f s %8.3f m %6.4f m %8.3f m/s %8.5f m/s \n",t,x,y,v,fdm); fdmx=-fdm*vx/v; fdmy=-fdm*vy/v; dvy=(fdmy-g)*dt; /* nopeuden muutos ajassa dt */ dvx=fdmx*dt; dy=(vy+0.5*dvy)*dt; /* korkeuden muutos ajassa dt */ dx=(vx+0.5*dvx)*dt; /* matkan muutos ajassa dt */ t+=dt; /* lisätään kokonaisaikaa */ x+=dx; /* uusi paikka */ y+=dy; /* uusi paikka */ vy+=dvy; /* uusi y-nopeus */ vx+=dvx; } while (x<r); /* kunnes maali saavutetaan */ fprintf(f,"%6.3f tf(f"%63f s %8.3f %83f m %6.4f %64f m %83f %8.3f m/s %8.5f %85f m/s \ \n",t,x,y,v,fdm); "t fclose(f); printf("%6.3f s %8.3f m %6.4f m \n",t,x,y); }