【数学建模】《实战数学建模:例题与讲解》第九讲-时间序列分析(含Matlab代码)

news2024/11/16 3:40:12

【数学建模】《实战数学建模:例题与讲解》第九讲-时间序列分析(含Matlab代码)

    • 基本概念
        • 确定性时间序列分析方法
        • 平稳时间序列模型
        • ARIMA模型
        • 季节性序列
    • 习题8.1
      • 1. 题目要求
      • 2.解题过程
      • 3.程序
      • 4.结果
    • 习题8.2
      • 1. 题目要求
      • 2.解题过程
      • 3.程序
      • 4.结果
    • 习题8.3
      • 1. 题目要求
      • 2.解题过程
      • 3.程序
      • 4.结果

本系列侧重于例题实战与讲解,希望能够在例题中理解相应技巧。文章开头相关基础知识只是进行简单回顾,读者可以搭配课本或其他博客了解相应章节,然后进入本文例题实战,效果更佳。

如果这篇文章对你有帮助,欢迎点赞与收藏~
在这里插入图片描述

基本概念

时间序列预测是一种预测方法,它通过将观察对象按照时间顺序排列,构成一个所谓的“时间序列”。通过分析这些时间序列过去的变化规律,可以推断未来的可能变化、趋势和规律。这种方法实际上是一种回归模型,其基本原理有两个方面:一是承认事物发展的延续性,即通过分析过去时间序列的数据来预测事物的发展趋势;二是考虑到偶然因素的影响所带来的随机性。为了减少随机波动的影响,需要利用历史数据进行统计分析,并对数据进行适当处理以进行趋势预测。

时间序列预测法的优点在于其简单易行,易于掌握,能够充分利用原时间序列的数据,计算速度快,并且对模型参数具有动态确定的能力。此外,精度较高,特别是当采用组合时间序列或将时间序列与其他模型组合时,其效果更佳。然而,这种方法也有其局限性,主要是不能反映事物的内在联系,无法分析两个因素之间的相关关系,更适用于短期而非长期预测。

时间序列预测法在各个领域都有广泛的应用,如在金融市场分析、气象预测、工业生产和库存管理等领域。在实际应用中,时间序列预测通常涉及到多种技术和方法,如移动平均、指数平滑法、季节性调整、自回归移动平均模型(ARMA)、自回归积分滑动平均模型(ARIMA)等。这些技术各有特点,适用于不同类型的数据和不同的预测需求。

确定性时间序列分析方法

确定性时间序列分析主要关注那些展现出一定规律或模式的时间序列数据,这些规律通常可以用一组固定的数学函数来描述。这种分析方法试图从时间序列数据中识别出趋势、周期性或季节性等成分。确定性时间序列的主要特点是,一旦识别出其规律,就可以准确预测未来的值。典型的确定性时间序列分析方法包括趋势线分析、季节性分解等。

平稳时间序列模型

平稳时间序列模型是指那些其统计特性(如均值、方差等)随时间推移保持不变的时间序列。在平稳序列中,时间序列的行为不会因时间的改变而发生变化,这使得模型预测变得更加简单和准确。平稳性是很多时间序列模型,如自回归(AR)模型、移动平均(MA)模型、和自回归移动平均(ARMA)模型的重要前提。

ARIMA模型

ARIMA(自回归积分滑动平均)模型是时间序列预测中最常用的方法之一。它结合了自回归(AR)和移动平均(MA)模型,并加入了差分的概念,用以将非平稳时间序列转换为平稳时间序列。ARIMA模型由三个主要参数构成:自回归项(AR)、差分阶数(I,积分)、和移动平均项(MA)。这种模型特别适合处理呈现长期趋势或季节性的非平稳时间序列。

季节性序列

季节性序列指的是那些展现出明显季节性模式的时间序列,即数据在固定时间间隔内呈现出重复模式。这种序列通常与特定季节或周期性事件相关,如月销售量、每日温度变化等。季节性时间序列分析的目的是识别并建模这种周期性模式,以准确预测未来周期内的数值。处理季节性时间序列的常用方法包括季节性分解和季节性ARIMA(SARIMA)模型,后者专门用来处理同时包含季节性和非季节性成分的时间序列。

习题8.1

1. 题目要求

image-20230505140341442

image-20231209094543468

2.解题过程

解:

(1)

由N=3,我们可以取预测公式:
M t + 1 = y t + y t − 1 + y t − 2 3 ,   t = 3 , 4 , . . . , 11 M_{t+1}=\frac{y_t+y_{t-1}+y_{t-2}}{3},\ t=3,4,...,11 Mt+1=3yt+yt1+yt2, t=3,4,...,11
其中 M 9 = 133.0 , M 10 = 136.8 , M 11 = 137.5 M_9=133.0,M_{10}=136.8,M_{11}=137.5 M9=133.0,M10=136.8,M11=137.5 为预测值。

预测的标准误差为:
S = ∑ t = 4 8 ( M t − y t ) 2 5 = 19.3542 S=\sqrt{\frac{\sum_{t=4}^{8}(M_t-y_t)^2}{5}}=19.3542 S=5t=48(Mtyt)2 =19.3542
(2)

二次指数平滑法的公式:
{ S t ( 1 ) = α y t + ( 1 − α ) S t − 1 ( 1 ) S t ( 1 ) = α S t ( 1 ) + ( 1 − α ) S t − 1 ( 2 ) \begin{align*} \begin{cases} S_t^{(1)}=\alpha y_t+(1-\alpha)S_{t-1}^{(1)}\\ S_t^{(1)}=\alpha S_t^{(1)}+(1-\alpha)S_{t-1}^{(2)} \end{cases} \end{align*} {St(1)=αyt+(1α)St1(1)St(1)=αSt(1)+(1α)St1(2)
其中 S t ( 1 ) S_t^{(1)} St(1)为一次指数平滑值, S t ( 2 ) S_t^{(2)} St(2)为二次指数平滑值。

当时间序列开始具有直线趋势时,建立直线指数平滑预测模型:
y ^ t + m = a t + b t m { a t = 2 S t ( 1 ) − S t ( 2 ) b t = α 1 − α ( S t ( 1 ) − S t ( 2 ) ) \begin{align*} &\hat{y}_{t+m}=a_t+b_tm\\ &\begin{cases} a_t=2S_t^{(1)}-S_t^{(2)}\\ b_t=\frac{\alpha}{1-\alpha}(S_t^{(1)}-S_t^{(2)}) \end{cases} \end{align*} y^t+m=at+btm{at=2St(1)St(2)bt=1αα(St(1)St(2))
α = 0.3 \alpha=0.3 α=0.3 时,预测的标准误差是:
S = ∑ t = 1 8 ( y ^ t − y t ) 2 7 = 11.7966 S=\sqrt{\frac{\sum_{t=1}^{8}(\hat{y}_t-y_t)^2}{7}} = 11.7966 S=7t=18(y^tyt)2 =11.7966
α = 0.6 \alpha=0.6 α=0.6 时,预测的标准误差是:
S = ∑ t = 1 8 ( y ^ t − y t ) 2 7 = 7.0136 S=\sqrt{\frac{\sum_{t=1}^{8}(\hat{y}_t-y_t)^2}{7}} = 7.0136 S=7t=18(y^tyt)2 =7.0136
(3)

从上面两小问的计算过程来看,选取标准误差最小的,也即 α = 0.6 \alpha=0.6 α=0.6 时的二次指数平滑模型

(4)

按照第三问的结果,取二次指数平滑模型的预测结果即可(计算过程见后文)。

α = 0.6 \alpha=0.6 α=0.6时,1982年的产量预测值为152.9457亿米;1985年的产量预测为182.8640亿米

3.程序

(1)

求解的MATLAB程序如下:

clc, clear

yt = [80.8, 94.0, 88.4, 101.5, 110.3, 121.5, 134.7, 142.7];
m = length(yt); 
n = 3; % 定义了移动平均窗口的大小 
for i = n + 1:m + 1
    % 在循环内部,用移动平均法计算 ythat 向量的当前元素值,即取窗口内最近的 n 个元素的平均值
    ythat(i) = sum(yt(i-n:i-1)) / n;
end

ythat

for i = m + 1:m + n
    yt(i) = ythat(i);
    ythat(i+1) = sum(yt(i-n+1:i)) / n;
end

% 将 yhat 设置为 ythat 的最后四个元素
yhat = ythat(end-3:end)
% 计算原始数据 yt 和平滑后的数据 ythat 的标准差 s1
% 这里只计算从第 n+1 个元素到最后一个元素的标准差,因为前 n 个元素无法进行平滑处理
% sqrt 和 mean 分别计算标准差的平方和的平均值和标准差本身
s1 = sqrt(mean((yt(n+1:m) - ythat(n+1:m)).^2))

(2)

求解的MATLAB程序如下:(0.3和0.6都尝试一次,仅修改该数据即可)

clc, clear

yt = [80.8, 94.0, 88.4, 101.5, 110.3, 121.5, 134.7, 142.7];
n = length(yt);
% 两个平滑值
% 这里使用了简单平均法来计算 st1(1),即前三个数据点的平均值,并将其赋给 st1(1) 和 st2(1)
st1(1) = mean(yt(1:3));
st2(1) = st1(1);
% 平滑系数
alpha = 0.3;

% 循环从 i=2 开始,因为 st1(1) 和 st2(1) 已经在前面初始化了
for i = 2:n
    % 使用指数平滑法更新 st1(i) 和 st2(i)
    % st1(i) 的更新使用的是单次指数平滑法,而 st2(i) 的更新使用的是二次指数平滑法
    st1(i) = alpha * yt(i) + (1 - alpha) * st1(i-1);
    st2(i) = alpha * st1(i) + (1 - alpha) * st2(i-1);
end

% 计算趋势系数 at 和 bt
at = 2 * st1 - st2;
bt = alpha / (1 - alpha) * (st1 - st2);
% 计算预测值 yhat
yhat = at + bt;
sigma = sqrt(mean((yt(2:end) - yhat(1:end-1)).^2));
% 根据模型预测最后一个数据点后的趋势,进一步预测接下来四个数据点的值
m = 1:4;
yhat2 = at(end) + bt(end) * m;

sigma
yhat2

4.结果

(1)

image-20230505142119050

(2)

α = 0.3 \alpha=0.3 α=0.3

image-20230505142141206

α = 0.6 \alpha=0.6 α=0.6

image-20230505142208525

(3)

选取标准误差最小的,也即 α = 0.6 \alpha=0.6 α=0.6 时的二次指数平滑模型

(4)

最终结果:1982年的产量预测值为152.9457亿米;1985年的产量预测为182.8640亿米

习题8.2

1. 题目要求

image-20230505143543009

2.解题过程

解:

计算公式为:
{ S t ( 1 ) = α y t + ( 1 − α ) S t − 1 ( 1 ) S t ( 2 ) = α S t ( 1 ) + ( 1 − α ) S t − 1 ( 2 ) S t ( 3 ) = α S t ( 2 ) + ( 1 − α ) S t − 1 ( 3 ) \begin{align*} \begin{cases} S_t^{(1)}=\alpha y_t+(1-\alpha)S_{t-1}^{(1)}\\ S_t^{(2)}=\alpha S_t^{(1)}+(1-\alpha)S_{t-1}^{(2)}\\ S_t^{(3)}=\alpha S_t^{(2)}+(1-\alpha)S_{t-1}^{(3)} \end{cases} \end{align*} St(1)=αyt+(1α)St1(1)St(2)=αSt(1)+(1α)St1(2)St(3)=αSt(2)+(1α)St1(3)
其中 S t ( 1 ) , S t ( 2 ) , S t ( 3 ) S_t^{(1)},S_t^{(2)},S_t^{(3)} St(1),St(2),St(3) 分别是一、二、三次指数平滑值。

初始值计算如下:
S 0 ( 1 ) = S 0 ( 2 ) = S 0 ( 3 ) = y 1 + y 2 + y 3 3 = 636.2 S_0^{(1)}=S_0^{(2)}=S_0^{(3)}=\frac{y_1+y_2+y_3}{3}=636.2 S0(1)=S0(2)=S0(3)=3y1+y2+y3=636.2
预测模型为:
y ^ t + m = a t + b t m + c t m 2 , m = 1 , 2 , . . . \hat{y}_{t+m}=a_t+b_tm+c_tm^2,m=1,2,... y^t+m=at+btm+ctm2,m=1,2,...

{ a t = 3 S t ( 1 ) − 3 S t ( 2 ) + S t ( 3 ) b t = α 2 ( 1 − α ) 2 [ ( 6 − 5 α ) S t ( 1 ) − 2 ( 5 − 4 α ) S t ( 2 ) + ( 4 − 3 α ) S t ( 3 ) ] c t = α 2 2 ( 1 − α ) 2 [ S t ( 1 ) − 2 S t ( 2 ) + S t ( 3 ) ] \begin{align*} \begin{cases} a_t=3S_t{(1)}-3S_t{(2)}+S_t{(3)}\\ b_t=\frac{\alpha}{2(1-\alpha)^2}[(6-5\alpha)S_t^{(1)}-2(5-4\alpha)S_t{(2)}+(4-3\alpha)S_t{(3)}]\\ c_t=\frac{\alpha^2}{2(1-\alpha)^2}[S_t^{(1)}-2S_t^{(2)}+S_t^{(3)}] \end{cases} \end{align*} at=3St(1)3St(2)+St(3)bt=2(1α)2α[(65α)St(1)2(54α)St(2)+(43α)St(3)]ct=2(1α)2α2[St(1)2St(2)+St(3)]

t=23时,计算结果如下:
a 23 = 2572.2613 , b 23 = 259.3374 , c 23 = 8.9819 a_{23}=2572.2613,b_{23}=259.3374,c_{23}=8.9819 a23=2572.2613,b23=259.3374,c23=8.9819

y ^ 23 + m = 8.9819 m 2 + 259.3373 m + 2572.2612 \hat{y}_{23+m}=8.9819m^2+259.3373m+2572.2612 y^23+m=8.9819m2+259.3373m+2572.2612

最终求得:1983、1985年的预测值分别为 2840.58058505076 亿元,3431.11062220508 亿元

3.程序

求解的MATLAB程序如下:

clc, clear

% yt记录零售总额数据
yt = [696.9, 607.7, 604, 604.5, 638.2, 670.3, 732.8, 770.5, ...
    737.3, 801.5, 858, 929.2, 1023.3, 1106.7, 1163.6, 1271.1, ...
    1339.4, 1432.8, 1558.6, 1800, 2140, 2350, 2570]'; 

n = length(yt);
alpha = 0.3; % 意味着对于当前时刻的预测,历史数据的权重为 0.7,预测数据的权重为 0.3
st0 = mean(yt(1:3)); % 计算数据向量中前三个数据的平均值,并将其设置为初始平滑值st0

% 计算三次指数平滑法中的一阶平滑值st1、二阶平滑值st2和三阶平滑值st3的初始值
st1(1) = alpha * yt(1) + (1 - alpha) * st0;
st2(1) = alpha * st1(1) + (1 - alpha) * st0;
st3(1) = alpha * st2(1) + (1 - alpha) * st0;

% 使用循环计算每个时刻的一阶平滑值st1、二阶平滑值st2和三阶平滑值st3
for i = 2:n
    st1(i) = alpha * yt(i) + (1 - alpha) * st1(i-1);
    st2(i) = alpha * st1(i) + (1 - alpha) * st2(i-1);
    st3(i) = alpha * st2(i) + (1 - alpha) * st3(i-1);
end

% 根据三次指数平滑法的公式,计算出平滑后的数据yhat、趋势项系数bt和季节项系数ct
at = 3 * st1 - 3 * st2 + st3;
bt = 0.5 * alpha / (1 - alpha)^2 * ...
    ((6 - 5 * alpha) * st1 - 2 * (5 - 4 * alpha) * st2 + (4 - 3 * alpha) * st3);
ct = 0.5 * alpha^2 / (1 - alpha)^2 * ...
    (st1 - 2 * st2 + st3);
yhat = at + bt + ct;

xishu = [ct(end), bt(end), at(end)]
yuce = polyval(xishu, [1:3]) % 计算未来三年的预测值

4.结果

image-20230505145008771

1983、1985年的预测值分别为 2840.58058505076 亿元,3431.11062220508 亿元

习题8.3

1. 题目要求

image-20230505145411174

2.解题过程

解:

本题我选取了两个曲线。

(1)Compertz曲线

一般形式为:
y ^ t = K a b t , K > 0 , 0 < a ≠ 1 , 0 < b ≠ 1 \hat{y}_t=Ka^{b^t},K>0,0<a\neq1,0<b\neq1 y^t=Kabt,K>0,0<a=1,0<b=1
两边取对数
ln ⁡ y ^ t = ln ⁡ K + b t ln ⁡ a \ln\hat{y}_t=\ln K+b^t\ln a lny^t=lnK+btlna

y ^ t ′ = ln ⁡ y ^ , K ′ = ln ⁡ K , a ′ = ln ⁡ a \hat{y}'_t = \ln\hat{y},K'=\ln K,a'=\ln a y^t=lny^,K=lnK,a=lna

y ^ t ′ = K ′ + a ′ b t \hat{y}'_t=K'+a'b^t y^t=K+abt
三和法估计参数:
S 1 = ∑ t = 1 m y t ′ , S 1 = ∑ t = m + 1 2 m y t ′ , S 1 = ∑ t = 2 m + 1 3 m y t ′ S_1=\sum_{t=1}^{m}y'_t,S_1=\sum_{t=m+1}^{2m}y'_t,S_1=\sum_{t=2m+1}^{3m}y'_t S1=t=1myt,S1=t=m+12myt,S1=t=2m+13myt

{ b = ( S 3 − S 2 S 2 − S 1 ) 1 m a ′ = ( S 2 − S 1 ) b − 1 b ( b m − 1 ) 2 K ′ = 1 m [ S 1 − a ′ b ( b m − 1 ) b − 1 ] \begin{align*} \begin{cases} b&=(\frac{S_3-S_2}{S_2-S_1})^{\frac{1}{m}}\\ a'&=(S_2-S_1)\frac{b-1}{b(b^m-1)^2}\\ K'&=\frac{1}{m}[S_1-\frac{a'b(b^m-1)}{b-1}] \end{cases} \end{align*} baK=(S2S1S3S2)m1=(S2S1)b(bm1)2b1=m1[S1b1ab(bm1)]
解得
b = 0.8244 , a ′ = − 1.7075 , a = 0.1813 , K ′ = 2.5804 , K = 13.2021 b=0.8244,a'=-1.7075,a=0.1813,K'=2.5804,K=13.2021 b=0.8244,a=1.7075,a=0.1813,K=2.5804,K=13.2021
所以Comperz曲线方程为:
y ^ t = 13.2021 × 0.181 3 0.824 4 t \hat{y}_t=13.2021\times 0.1813^{0.8244^t} y^t=13.2021×0.18130.8244t
1985年,1990年的粮食产量分别为12.3830,12.8840

(2)Logistic曲线

一般形式为:
d y d x = r y ( 1 − y L ) \frac{d y}{d x}=ry(1-\frac{y}{L}) dxdy=ry(1Ly)
解此微分方程:
y = L 1 + c e − r t y=\frac{L}{1+ce^{-rt}} y=1+certL
记Logistic曲线一般形式为:
y t = 1 K + a b t , K > 0 , a > 0 , 0 < b ≠ 1 y_t=\frac{1}{K+ab^t},K>0,a>0,0<b\neq1 yt=K+abt1,K>0,a>0,0<b=1
y t ′ = 1 y t y'_t=\frac{1}{y_t} yt=yt1 得:
y t ′ = K + a b t y'_t=K+ab^t yt=K+abt
三和法估计参数:
S 1 = ∑ t = 1 m y t ′ , S 1 = ∑ t = m + 1 2 m y t ′ , S 1 = ∑ t = 2 m + 1 3 m y t ′ S_1=\sum_{t=1}^{m}y'_t,S_1=\sum_{t=m+1}^{2m}y'_t,S_1=\sum_{t=2m+1}^{3m}y'_t S1=t=1myt,S1=t=m+12myt,S1=t=2m+13myt

{ b = ( S 3 − S 2 S 2 − S 1 ) 1 m a = ( S 2 − S 1 ) b − 1 b ( b m − 1 ) 2 K = 1 m [ S 1 − a ′ b ( b m − 1 ) b − 1 ] \begin{align*} \begin{cases} b=(\frac{S_3-S_2}{S_2-S_1})^{\frac{1}{m}}\\ a=(S_2-S_1)\frac{b-1}{b(b^m-1)^2}\\ K=\frac{1}{m}[S_1-\frac{a'b(b^m-1)}{b-1}] \end{cases} \end{align*} b=(S2S1S3S2)m1a=(S2S1)b(bm1)2b1K=m1[S1b1ab(bm1)]
解得
b = 0.7501 , a = 0.2796 , K = 0.0805 b=0.7501,a=0.2796,K=0.0805 b=0.7501,a=0.2796,K=0.0805
所以Logistic曲线方程为:
y ^ t = 1 0.0805 + 0.2796 × 0.750 1 t \hat{y}_t=\frac{1}{0.0805+0.2796\times0.7501^t} y^t=0.0805+0.2796×0.7501t1
1985年,1990年的粮食产量分别为12.1068,12.3467

3.程序

(1)

求解的MATLAB程序如下:

clc, clear

y = [3.78, 4.19, 4.83, 5.46, 6.71, 7.99, 8.60, 9.24, ...
    9.67, 9.87, 10.49, 10.92, 10.93, 12.39, 12.59];

yt = log(y); % 将y取自然对数,以便进行Compertz曲线拟合
n = length(yt);
m = n / 3;
% 计算yt的长度n和m,m是将时间分成三段后的长度 
% Compertz曲线需要将时间分成三个等长的部分

% 计算yt的前1/3、中间1/3和后1/3的和
s1 = sum(yt(1:m));
s2 = sum(yt(m+1:2*m));
s3 = sum(yt(2*m+1:3*m));

b = ((s3 - s2) / (s2 - s1))^(1 / m); % b控制曲线的形状
a = (s2 - s1) * (b - 1) / (b * (b^m - 1)^2); % a控制曲线的位置
k = (s1 - a * b * (b^m - 1) / (b - 1)) / m; % k是拟合曲线的最小值
a = exp(a);
k = exp(k); % 对a和k值进行指数运算,以将其还原为实际值

yuce = @(t) k * a.^(b.^t); % 创建一个匿名函数
ypre = yuce([n + 2, n + 7])

(2)

求解的MATLAB程序如下:

clc, clear

y = [3.78, 4.19, 4.83, 5.46, 6.71, 7.99, 8.60, 9.24, ...
     9.67, 9.87, 10.49, 10.92, 10.93, 12.39, 12.59];

yt = 1 ./ y;

% yt向量的长度n和分成三组时每组的长度m
n = length(yt);
m = n / 3;

% 每组的元素之和
s1 = sum(yt(1:m));
s2 = sum(yt(m+1:2*m));
s3 = sum(yt(2*m+1:3*m));

% 使用Logistic曲线拟合yt向量。变量b是增长率,变量a是曲线的形状,变量k是曲线的位置
b = ((s3 - s2) / (s2 - s1))^(1 / m);
a = (s2 - s1) * (b - 1) / (b * (b^m - 1)^2);
k = (s1 - a * b * (b^m - 1) / (b - 1)) / m;

yuce = @(t) 1 ./ (k + a * b.^t);
ypre = yuce([n + 2, n + 7])

4.结果

image-20230715211708202

如果这篇文章对你有帮助,欢迎点赞与收藏~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1310027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt/C++音视频开发59-使用mdk-sdk组件/原qtav作者力作/性能凶残/超级跨平台

一、前言 最近一个月一直在研究mdk-sdk音视频组件&#xff0c;这个组件是原qtav作者的最新力作&#xff0c;提供了各种各样的示例demo&#xff0c;不仅限于支持C&#xff0c;其他各种比如java/flutter/web/android等全部支持&#xff0c;性能上也是杠杠的&#xff0c;目前大概…

数字图像处理(实践篇)二十五 使用hyperlpr3进行车牌识别

目录 1 HyperLPR 2 中文字体文件下载 3 实践 1 HyperLPR HyperLPR是一个基于Python的使用深度学习针对对中文车牌识别的实现,与开源的EasyPR相比,它的检测速度和鲁棒性和多场景的适应性都要好于EasyPR。 HyperLPR3是一个高性能开源中文车牌识别框架。

leetcode-138-随机链表的复制(Java实现)

题目&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点…

【Netty】Socket与I/O模型

目录 Socket网络编程Socket概述Socket整体流程代码实现 I/O模型说明BIO(同步并阻塞)NIO(同步非阻塞)AIO(异步非阻塞)BIO、NIO、AIO适用场景 Socket网络编程 Socket概述 Socket&#xff0c;套接字就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议&#xff0c;主要解决…

免费分享一套Springboot+Vue前后端分离的校园二手交易平台,挺漂亮的

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringbootVue前后端分离的校园二手交易平台&#xff0c;分享下哈。 项目视频演示 【免费】SpringbootVue校园二手交易平台系统 毕业设计 Java毕业设计_哔哩哔哩_bilibili 项目介绍 校园二手交易网站是一…

100V耐压 内置MOS ESOP8 40V输入 转5V 2.1A恒压输出

100V耐压内置MOS ESOP8 40V输入转5V 2.1A恒压输出 芯片测试数据如下图&#xff1a;

C#中简单的继承和多态

今天我们来聊一聊继承&#xff0c;说实话今天也是我第一次接触。 继承的概念是什么呢&#xff1f;就是一个类可以继承另一个类的属性和方法&#xff08;成员&#xff09; 继承是面向对象编程中的一个非常重要的特性。 好了&#xff0c;废话不多说&#xff0c;下面切入正题&a…

@SpringBootApplication自动配置原理剖析

SpringBootApplication自动配置原理剖析 自动配置: 根据我们添加的依赖,会自动将一些配置类的bean注册进ioc容器中,可以使用Autowired或者Resource等注解来使用它。 1.1 SpringBootApplication Spring Boot项目创建完成会默认生成一个Application的入口类(启动类),命名规则a…

推荐一些跨平台的比较优秀的翻译服务(软件或平台)

因为编程及查阅资料需要频繁的查阅英文&#xff0c;推荐一些跨平台的比较优秀的翻译服务&#xff08;软件或平台&#xff09; 1、DeepL Translate (https://www.deepl.com/translator) 这是一款基于机器翻译的在线翻译软件。win、安卓、Linux、IOS上都有可用的版本也可以基于w…

Android12编译kernel4.9解决:scripts/gcc-wrapper.py, line 79, in run_gcc(一百六十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

《数据结构、算法与应用C++语言描述》-最大高度优先左高树-C++实现

左高树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_26maxHblt 定义 (大顶堆和小顶堆)堆结构是一种隐式数据结构(implicit data structure)。用完全二叉树表示的堆在数组中是隐式存储的(即没有明确的指针或其他数据能够用来重塑…

从池化的角度看GNN(包含PR-GNN,EdgePool等7篇论文)上篇

从池化的角度看GNN&#xff08;包含PR-GNN&#xff0c;EdgePool等7篇论文&#xff09; 前言一些总结一些早期论文的简要介绍1️⃣论文PR-GNN&#xff1a;《Pooling Regularized Graph Neural Network for fMRI Biomarker Analysis》 下一篇章笔记链接 前言 这里是早期的笔记&a…

MySQL 系列:注意 ORDER 和 LIMIT 联合使用的陷阱

文章目录 前言背后的原因ORDER BY 排序列存在相同值时返回顺序是不固定的LIMIT 和 ORDER BY 联合使用时的行为ORDER BY 或 GROUP BY 和 LIMIT 联合使用优化器默认使用有序索引 如何解决其它说明个人简介 前言 不知道大家在在分页查询中有没有遇到过这个问题&#xff0c;分页查…

pytorch之优化器、学习率函数学习

1、TORCH.OPTIM torch.optim是一个实现各种优化算法的包。大多数常用的方法都已经支持&#xff0c;并且接口足够通用&#xff0c;因此将来也可以轻松集成更复杂的方法 1、如何使用优化器 要使用&#xff0c;torch.optim您必须构造一个优化器对象&#xff0c;该对象将保存当前…

立创EDA把三个单独的PCB合并成一个文件

[TOC](立创EDA把三个单独的PCB合并成一个文件 1.具体操作 1.具体操作 参考&#xff1a;立创社区 先选中PCB CTRLSHIFTC, CTRLSHIFTV** **

uniapp交互反馈api的使用示例

官方文档链接&#xff1a;uni.showToast(OBJECT) | uni-app官网 1.uni.showToast({}) 显示消息提示框。 常用属性&#xff1a; title:页面提示的内容 image&#xff1a;改变提示框默认的icon图标 duration&#xff1a;提示框在页面显示多少秒才让它消失 添加了image属性后。 注…

PHP之添加文字水印,两端文字分别设置不同的样式,支持透明度

/*** 给图片添加文字水印 可控制字体颜色透明度&#xff0c;默认是居中* param string $imagePath 图片地址* param string $outputPath 新图片地址 默认使用$imgurl* param string $textArray 水印文字* param int $fontSize 字体大小* param string $fontPath 字体文件路径* …

Python爬虫实战-采集微博评论,看看大家都在讨论什么

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 模块使用: requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install 模块名…

PLC-Recorder V3版本软件升级方法

PLC-Recorder V3软件进行了架构优化&#xff0c;包括采集服务器、客户端、授权管理等组件。升级方法与V2版本相似&#xff0c;但是也有一些变化&#xff0c;说明如下&#xff1a; 一、从V2向V3版本升级 1、退出原PLCRecorder&#xff1a;关闭右下角的图标。 2、退出打开的离线…

前端接入若依后,页面白屏问题排查

白屏问题分析 页面停留一段时间后&#xff0c;通过tab打开其他的页面&#xff0c;界面会白屏或者无法跳转&#xff1b; 白屏的时候控制台无任何报错无法跳转的时候&#xff0c;控制台会输出错误信息&#xff0c;见截图 1. 无报错白屏问题 通过查找若依的issues找到一个问题点…