Modelo matemático (interpolación, ajuste y ecuación diferencial) -implementación de python

  1. La publicación del blog se actualiza sincrónicamente en la cuenta pública del mismo nombre "ManTou Mantou", dale me gusta, ballball u.
  2. Si tiene alguna pregunta, dé la bienvenida a los comentarios de CSDN sobre mensajes privados, dé la bienvenida a los mensajes privados de cuentas públicas, mensajes privados vx
  3. El programa se obtiene respondiendo a "ManTouex5" en la cuenta oficial.

Pregunta 1 Número estimado de vehículos

Descripción del Título

Para comprender la situación del tráfico de un puente, el departamento de gestión del tráfico registra continuamente el número de vehículos que pasan por el puente en 1 minuto a intervalos variables en un extremo del puente y observa continuamente los vehículos que pasan las 24 horas del día. Los datos del vehículo se muestran en la siguiente tabla. Intente construir un modelo para analizar y estimar cuántos vehículos cruzaron el puente durante el día.
Inserte la descripción de la imagen aquí

Implementación de Python (programa clave)

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)

resultado

Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí

Pregunta 2 Precio medio de los coches usados

Descripción del Título

Los datos de la encuesta de precios de automóviles usados ​​en los Estados Unidos en un año determinado se muestran en la siguiente tabla, donde xi x_iXyoRepresenta la cantidad de años que se ha usado el automóvil, yi y_iyyoRepresenta el precio medio correspondiente. Trate de analizar qué tipo de curva se ajusta a los datos dados en la tabla y predecir el precio promedio aproximado de un automóvil después de 4.5 años de uso.
Inserte la descripción de la imagen aquí

Implementación de Python (programa clave)

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)

resultado

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Problema 3 Resolver ecuaciones diferenciales

Descripción del Título

Encuentre la solución numérica de las siguientes ecuaciones diferenciales (convección natural de la placa de calentamiento vertical)
{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 {matriz} \ right.d η3re3 , f+3 fd η2re2 , f-2(d ηd f)2+T=0d η2re2 t+2 . 1 fd ηd T=0
Se sabe que cuando η = 0 \ eta = 0los=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 ηd f=0 ,d η2re2 , f=0 . 6 8 ,T=1 ,d ηd T=- 0 ... 5 curva de reivindicación mostrada en la solución numérica de [0,10] el intervalo.

Implementación de Python (programa clave)

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)

resultado

Inserte la descripción de la imagen aquí

Pregunta 4 Número de liebres

Descripción del Título

Las estadísticas del número de liebres en un área determinada durante 9 años consecutivos (unidad: 100.000) se muestran en la siguiente tabla. Se predice el número de liebres en t = 9, 10.
Inserte la descripción de la imagen aquí

Implementación de Python (programa clave)

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]

resultado

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_40678163/article/details/109594520
Recomendado
Clasificación