using QuadGK,Optim # Juhani Kaukoranta 8.10.2023 # kuussa g = 1.622,maassa g = 9.81, Marsissa g=6.674 # lähtönopeus v0 # laskee vastuksettoman lentorataparaabelin arvoja function lentorata(v0,g) function kaari(θ) # paraabelikaaren pituus function integrand(x) return(sqrt(v0^2-2*g*v0*sin(θ)*x+g^2*x^2)) end pituus,error = quadgk(integrand,0,2*v0*sin(θ)/g) return pituus end function ala(θ) # paraabelikaaren pinta-ala x1 = v0^2*sin(2*θ)/g return tan(θ)*x1^2/2-g*x1^3/(6*(v0*cos(θ))^2) end kaari2(x) = -kaari(x) # jotta max saadaan optimize.minimizer avulla ala2(x) = -ala(x) # jotta max saadaan optimize.minimizer avulla resultkaari = optimize(kaari2,0.4,1.3) maksimikaari = resultkaari.minimizer # maksimikaaren tuottava lähtökulma resultala = optimize(ala2,0.2,1.4) maksimiala = resultala.minimizer # maksimialan tuottava lähtökulma maksimivaakakantama = round(v0^2/g,digits=2) println("heittoliike, kun kaasukehän vastus olemattoman pieni:") println("lähtonopeus = ",v0," m/s") println("putouskiihtyvys g = ",g," m/s2") println("kun kaasukehän vastus on olematon, niin:") println("tällöin paraabelikaaren maksimipituus ",round(kaari(maksimikaari),digits=2), " m") println("maksimiparaabelikaaren lähtökulma = ",round(maksimikaari*180.0/pi,digits=2)," astetta") println("tällöin kaaren korkeus on ",round(v0^2*(sin(maksimikaari))^2/(2*g),digits=2)," m") println("tällöin vaakakantama on ",round(2*v0*sin(maksimikaari)/g,digits=2)," m") println("tällöin vaakakantaman lentoaika = ",round(2*v0*sin(maksimikaari)/g)," s") println("pisin vaakakantama saadaan kulmalla 45° = ",maksimivaakakantama, " m") println("tällöin 45° kulmalla vaakakantaman lentoaika ",round(2*v0*sin(pi/4)/g,digits=2)," s") println("tällöin 45° kulmalla kaaren korkeus = ",round((v0*sin(pi/4))^2/(2*g),digits=2)," m") println("paraabelikaaren ja lähtötason välinen maksimipinta-ala ",round(ala(maksimiala),digits=2), " m²") println("kaaren maksimipinta-alan tuottaa lähtökulma = ",round(maksimiala*180.0/pi,digits=2)," astetta") println("maksimipinta-alaa vastaava kantama = ",round(v0^2*sin(2*maksimiala)/g,digits=2)," m") println("maksimipinta-alaa vastaava kaaren korkeus = ",round((v0*sin(maksimiala))^2/(2*g),digits=2)," m") println("maksimipinta-alaa vastaava lentoaika = ",round(2*v0*sin(maksimiala)/g,digits=2)," s") println("maksimikorkeuden ",round(v0^2/(2*g),digits=3)," m tuottaa lähtökulma 90° = pystysuora") println("tällöin pystysuoran heiton vaakakantama on 0 m ja lentoaika ", round(2*v0/g,digits=2)," s") end