- La publicación del blog se actualiza sincrónicamente en la cuenta pública del mismo nombre "ManTou Mantou", dale me gusta, ballball u.
- 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
- El programa se obtiene respondiendo a "ManTouex5" en la cuenta oficial.
Implementación de interpolación, ajuste y ecuación diferencial-python
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.
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
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.
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
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
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.
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]