Mathematical model (interpolation, fitting and differential equation)-python implementation

  1. The blog post is updated synchronously on the public account of the same name "ManTou Mantou", please like it, ballball u.
  2. If you have any questions, welcome CSDN comments on private messages, welcome public account private messages, vx private messages
  3. The program is obtained by replying to "ManTouex5" on the official account.

Question 1 Estimated number of vehicles

Title description

In order to grasp the traffic situation of a bridge, the traffic management department continuously records the number of vehicles passing the bridge within 1 minute at varying intervals at one end of the bridge, and continuously observes the passing vehicles 24 hours a day. The vehicle data is shown in the table below. Try to build a model to analyze and estimate how many vehicles crossed the bridge during the day.
Insert picture description here

Python implementation (key program)

def get_line(xn, yn):
        def line(x):
                index = -1
                # 找出x所在的区间
                for i in range(1, len(xn)):
                        if x <= xn[i]:
                                index = i - 1
                                break
                        else:
                                i += 1
                if index == -1:
                        return -100
                # 插值
                result = (x - xn[index + 1]) * yn[index] / float((xn[index] - xn[index + 1])) + (x - xn[index]) * yn[
                        index + 1] / float((xn[index + 1] - xn[index]))
                return result
        return line
time = [0, 2, 4, 5, 6, 7, 8,
        9, 10.5, 11.5, 12.5, 14, 16, 17,
        18, 19, 20, 21, 22, 23, 24]
num = [2, 2, 0, 2, 5, 8, 25,
        12, 5, 10, 12, 7, 9, 28,
        22, 10, 9, 11, 8, 9, 3]
# 分段线性插值函数
lin = get_line(time, num)
# time_n = np.arange(0, 24, 1/60)
time_n = np.linspace(0, 24, 24*60+1)
num_n = [lin(i) for i in time_n]
sum_num = sum(num_n)
print("估计一天通过的车辆:%d" % sum_num)

result

Insert picture description hereInsert picture description here

Question 2 Average price of used cars

Title description

The survey data of used car prices in the United States in a certain year is shown in the table below, where xi x_ixiRepresents the number of years the car has been used, yi y_iYiRepresents the corresponding average price. Try to analyze what kind of curve fits the data given in the table, and predict the average price of a car after 4.5 years of use?
Insert picture description here

Python implementation (key program)

from scipy.optimize import curve_fit
def func(x, a, b, c):  # 指数函数拟合
    return a * (b**(x-1)) + c

year = np.arange(1, 11, 1)
price = [2615, 1943, 1494, 1087, 765, 538, 484, 290, 226, 204]

popt, pcov = curve_fit(func, year, price)
a = popt[0]
b = popt[1]
c = popt[2]
price_fit = func(year, a, b, c)

result

Insert picture description here
Insert picture description here

Problem 3 Solving Differential Equations

Title description

Find the numerical solution of the following differential equations (natural convection of vertical heating plate)
{d 3 fd η 3 + 3 fd 2 fd η 2 − 2 (dfd η) 2 + T = 0 d 2 T d η 2 + 2.1 fd T d η = 0 \left\{\begin{array}{l}\frac{\mathrm{d}^{3} f}{\mathrm{d} \eta^{3}}+3 f \frac{ \mathrm{d}^{2} f}{\mathrm{d} \eta^{2}}-2\left(\frac{\mathrm{d} f}{\mathrm{d} \eta}\right )^{2}+T=0 \\ \frac{\mathrm{d}^{2} T}{\mathrm{d} \eta^{2}}+2.1 f \frac{\mathrm{d} T }{\mathrm{d} \eta}=0\end{array}\right.d η3d3 , f+3 fd η2d2 , f2(d ηdf)2+T=0d η2d2 t+2.1fd ηdT=0
It is known that when η = 0 \eta=0the=0时 ,f = 0, dfd η = 0, d 2 fd η 2 = 0.68, T = 1, d T d η = - 0.5 f = 0, \ frac {\ mathrm {d} f} {\ mathrm {d } \ eta} = 0, \ frac {\ mathrm {d} ^ {2} f} {\ mathrm {d} \ eta ^ {2}} = 0.68, T = 1, \ frac {\ mathrm {d} T } {\ mathrm {d} \ eta} = - 0.5f=0,d ηdf=0,d η2d2 , f=0.68,T=1,d ηdT=- 0 . . 5 claim curve shown in the numerical solution of [0,10] the interval.

Python implementation (key program)

from scipy.integrate import solve_ivp
def natural_convection(eta, y):  # 将含有两个未知函数的高阶微分方程降阶,得到由2+3个一阶微分方程组成的方程组
    T1 = y[0]
    T2 = y[1]
    f1 = y[2]
    f2 = y[3]
    f3 = y[4]
    return T2, -2.1*f1*T2, f2, f3, -3*f1*f3 + 2*(f2**2)-T1

eta = np.linspace(0, 10, 1000)
eta_span = [0, 10]
init = np.array([ 1, -0.5, 0, 0, 0.68])

curve = solve_ivp(natural_convection, eta_span, init, t_eval=eta)

result

Insert picture description here

Question 4 Number of hares

Title description

The number of hares in a certain area for 9 consecutive years (unit: 100,000) is shown in the following table. The number of hares at t = 9, 10 is predicted.
Insert picture description here

Python implementation (key program)

import numpy as np

year = np.arange(0, 9, 1)
num = [5, 5.9945, 7.0932, 8.2744, 9.5073, 10.7555, 11.9804, 13.1465, 14.2247]

fit = np.polyfit(year, num, 1)
print("线性拟合表达式:", np.poly1d(fit))
num_fit = np.polyval(fit, year)
plt.plot(year, num, 'ro', label='原始数据')
plt.plot(year, num_fit, 'b-',label='拟合曲线')
year_later = np.arange(8, 11, 0.5)
num_fit_curve = fit[0] * year_later + fit[1]

result

Insert picture description here

Guess you like

Origin blog.csdn.net/qq_40678163/article/details/109594520