²é¿´: 1178  |  »Ø¸´: 0

jackyma

гæ (СÓÐÃûÆø)

[ÇóÖú] Çë½ÌÒ»¸ö¹ØÓÚÖØÁ¦ÏµÍ³ÏÂÖʵãÇòƽÅ×Â䵨·´µ¯µÄÔ˶¯¹ì¼£ÊýѧģÐͽ¨Á¢µÄÎÊÌâ

ÓÐÒ»¸ö¼òµ¥µÄÎïÀíÎÊÌâÏëÓÃPython À´ÊµÏÖ£¬
ÎÊÌ⣺
ÓÐÒ»ÖÊÁ¿Îª1kgµÄÖʵ㣬ÔÚʱ¿Ìt=0¡¾s¡¿Ê±´Ó¸ß¶È0.5Ã×µÄλÖÃˮƽÒÔ1.0m/sµÄËÙ¶Èˮƽµ¯³ö£¨¿¼ÂÇÖØÁ¦ÏòÏ£©£¬
Óë¸ß¶ÈΪ0m£¬×î´ó¾²Ö¹Ä¦²ÁϵÊý0.5£¬¶¯Ä¦²ÁϵÊýΪ0.1ÇÒ²»»á±äÐÎµÄÆ½Ãæ½Ó´¥£¨ÇòÓëÆ½ÃæµÄ·´µ¯ÏµÊýΪ0.3£©ºó·´µ¯£¬²¢·´¸´ÂäÏ·´µ¯Ô˶¯Ö±ÖÁ¾²Ö¹ÓÚÆ½ÃæÖ®ÉÏ£¬Ä£Äâ³öt=T[s]ΪֹÇòµÄÔ˶¯¹ì¼££¬¼ä¸ôÏàͬʱ¼ä£¨¦¤ t£©Êä³öÇòµÄλÖÃ×ø±ê¡£
T ºÍ¦¤ tÈÎÒâÑ¡Ôñ¡£

Õâ¸öÎÊÌâÓ¦¸ÃÊôÓÚÇòÌ寽Å×·´µ¯µÄ¹ì¼£Ä£Äâ£¬ÍøÂçÉÏÓÐÀàËÆÎÊÌ⽨ģ¡£

ÔÚhttp://www.matlabsky.com/thread-13700-1-1.htmlÀïÓп¼ÂÇ¿ÕÆøÄ¦²ÁÁ¦µÄ΢·Ö·½³Ì¹«Ê½£¬µ«ÊÇÎÒµÄÎÊÌâÊDz»Ð迼ÂÇ¿ÕÆøÄ¦²Á£¬Ö»Òª¿¼ÂǵØÃæÄ¦²ÁÁ¦£¬ÓÐûÓÐÊýѧ½¨Ä£¸ßÊÖ¸øÖ¸µãһϡ£ÎÒÕâ¸öÄ£ÐÍÒªÈçºÎʵÏÖ£¿

ÏÂÃæÊÇÎҲο¼ÄǸöMatlabµÄÌû×Ó£¬Ð´µÄÒ»¸öpython°æ£¬
¿ÉÊÇÎÊÌâÊÇpythonµÄscipyµÄodeintº¯ÊýûÓа취ÅжÏ׎µãy=0µÄʱ¿Ì£¬Ò²¾ÍÒâζ×ÅÖʵãÂ䵨ºó·´µ¯µÄÔ˶¯¹ì¼£ÎÞ·¨Ä£Äâ¡£
ÁíÍâ¾õµÃÄǸöÌû×ÓÀïµÄ΢·Ö·½³ÌÓеãÎÊÌ⣬ÇëÖªµÀµÄ´óÏÀÖ¸µãÃÔ½ò£¡

ÔÙ´ËÏÈ×ö¸Ðл£¡
CODE:
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

def fun(w, t, p):
    """Define the  equation for throw
    Arguments:
        w: vector of the state variables:
            w = [x,y, vx, vy]
        t: time
        p: vector of the parameters:
            p = [m, mu, g, e]
    :return: f
    """
    x, y, vx, vy = w
    m, mu, g, k = p

    # create f = (x',y', vx', vy'):

    f = [vx,                          # x' = dx/dt = vx
         -mu * vx / m,                 # vx' = dvx/dt = -mu * vx / m
         vy,                           # y' = dy/dt = vy
         -mu * vy / m - g,             # vy' = dvy/dt = -mu * vy /m - g
         ]
    return f

def main():
    # Parameter values
    # Masses
    m = 1
    # Friction coefficients
    mu = 0.1
    # Acceleration
    g = 9.8
    # Restitution coefficients
    k = 0.3

    # Initial conditions
    x = 0
    y = 0.5
    vx = 1
    vy = 0


    # ODE solver parameters
    abserr = 1.0e-8
    relerr = 1.0e-6
    # stop time for movement simulation
    stoptime = 0.7
    # delta time
    numpoints = 30

    # Create the time samples for the output of the ODE solver.
    t = [stoptime * float(i) / (numpoints - 1) for i in range(numpoints)]

    # Pack up the parameters and initial conditions:
    p = [m, mu, g, k]
    w0 = [x, y, vx, vy]

    # Call the ODE solver
    wsol = odeint(fun, w0, t, args=(p,), atol=abserr, rtol=relerr)

    with open('ball_movement.dat', 'w') as fi:
        # print and save the solution.
        for t1, w1 in zip(t, wsol):
            if w1[2] >= 0:
                print >> fi, t1, w1[0], w1[2]
            else:
                # print >> fi, "The ball is landing to floor!"

                x = w1[0]
                y = w1[2]
                vx = w1[1]
                vy = w1[3]
    # wsol = odeint(fun, w0, )

    # Plot the solution that was generated

    from numpy import loadtxt
    from pylab import figure, plot, xlabel, grid, hold, legend, title, savefig
    from matplotlib.font_manager import FontProperties

    t, x, y = loadtxt('ball_movement.dat', unpack=True)

    figure(1, figsize=(6, 4.5))

    xlabel('t')
    grid(True)
    hold(True)
    lw = 1

    plot(x, y, 'b', linewidth=lw)
    #plot(t, y, 'g', linewidth=lw)

    legend((r'$x$', r'$y$'), prop=FontProperties(size=16))
    title('Ball Mass System')
    savefig('ball_movement.png', dpi=100)


if __name__ == "__main__":
    main()

»Ø¸´´ËÂ¥
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ jackyma µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[»ù½ðÉêÇë] Сľ³æÃ»ÂäÁË£¬³ýÁËÆíµ»Ìû×Ó£¬¼¸ºõ¿´²»µ½ÓмÛÖµµÄÌû×Ó +15 botar 2026-07-14 16/800 2026-07-19 18:23 by wowsunflower
[˶²©¼ÒÔ°] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 bjm2e4yior 2026-07-18 3/150 2026-07-19 16:43 by 0u3sh5hhfi
[ÂÛÎÄͶ¸å] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 ufgqpyvpi6 2026-07-18 6/300 2026-07-19 16:23 by 0u3sh5hhfi
[¿¼²©] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 ufgqpyvpi6 2026-07-18 4/200 2026-07-19 16:10 by 0u3sh5hhfi
[½Ìʦ֮¼Ò] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 ufgqpyvpi6 2026-07-18 6/300 2026-07-19 16:03 by 0u3sh5hhfi
[¿¼ÑÐ] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 ufgqpyvpi6 2026-07-18 6/300 2026-07-19 16:03 by 0u3sh5hhfi
[˶²©¼ÒÔ°] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 ufgqpyvpi6 2026-07-18 4/200 2026-07-19 15:54 by 0u3sh5hhfi
[»ù½ðÉêÇë] ÃæÉϵÄË®ºÜÉî +16 ²¼²¼ºÍÒ»¶þ 2026-07-18 21/1050 2026-07-19 10:07 by Vivilian
[»ù½ðÉêÇë] ÉúÃü¿ÚC13ÃæÉÏ»áÆÀʱ¼ä +7 luckinging 2026-07-14 11/550 2026-07-17 20:43 by ³æ²·1988
[»ù½ðÉêÇë] ÉúÃü¿ÚÃæÉÏ»áÆÀ½áÊøÁËÂð´ó¼ÒÓÐÖªµÀ½á¹ûÂð£¿ÏÖÔÚ»¹Ã»Óнá¹ûÕý³£²»£¿ +6 ±ÌË®00 2026-07-16 9/450 2026-07-17 15:21 by jaasxulu
[ÂÛÎÄͶ¸å] ͶӢÎÄÆÚ¿¯ÈçºÎ²éÖØ 10+5 ²»ÖªµÀȡʲôÃû× 2026-07-15 6/300 2026-07-17 09:07 by bobvan
[Óлú½»Á÷] ²®°·Éϼ׻ùÇóÖú 100+4 002tmumu 2026-07-14 7/350 2026-07-16 19:47 by 002tmumu
[ÂÛÎÄͶ¸å] ¿ç³ö°æÉçÉÌͶ¸å 20+5 ÄߺÃ520 2026-07-13 5/250 2026-07-16 17:24 by ÎÞÊÓ¾üÍÅ
[»ù½ðÉêÇë] ÉúÉúÃüѧ²¿»áÆÀ +4 wuke100666 2026-07-15 4/200 2026-07-16 00:12 by À²À²Ð¡ÄÝ×Ó
[»ù½ðÉêÇë] H¿Ú£¬ÃæÉÏ£¬Ê±¼ä´Á7ÔÂ7ÈÕ¡£ +3 plumage5 2026-07-15 3/150 2026-07-15 21:06 by 6543yes
[»ù½ðÉêÇë] »áÆÀ +5 ÎÞÃûÕßµÇɽ 2026-07-15 5/250 2026-07-15 18:15 by ¸Ü¾ÍÊÇÄã¶Ô
[»ù½ðÉêÇë] E¿Ú»áÆÀ +11 ²¼²¼ºÍÒ»¶þ 2026-07-13 13/650 2026-07-15 16:34 by Kittylucky
[»ù½ðÉêÇë] E¿ÚÇàC»áÆÀ½áÊøÁËÂ𣿠40+3 ССÊ鳿c 2026-07-14 9/450 2026-07-15 16:04 by °²¾²µÄÖªÁË
[ÂÛÎÄͶ¸å] ũҵ»úеѧ±¨Í¶¸åÖÜÆÚ +3 G0DLIN 2026-07-14 7/350 2026-07-15 09:26 by xs74101122
[»ù½ðÉêÇë] ¹ú×ÔÈ»ÃæÉÏD¿ÚÆíµ» +4 monkeynana 2026-07-14 4/200 2026-07-15 09:14 by °×Ë®Öó
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û