news 2026/9/19 13:47:06

深度学习在GDP预测中的应用:基于先行指标的非线性建模

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习在GDP预测中的应用:基于先行指标的非线性建模

简介:一份PDF资料,聚焦深度学习在GDP指标预测中的应用,面向经济学研究者、数据分析师及政策制定者,针对GDP非线性、不确定性导致传统预测精度不高的问题,提出基于深度学习的解决思路。资源为单个PDF文件,大小约719KB,内容系统梳理文献综述、深度学习原理、实证分析三大模块,并选取1980—2015年货币供应量、财政收入、固定资产投资等先行指标构建模型,与ARMA、移动平均法、Logistic法等传统方法对比,验证多层非线性变换对预测精度的提升。已有199人学习下载,适合需要参考经济预测建模思路、撰写相关论文或设计分析方案的读者,可直接获取方法对比、数据标准化处理及模型构建全流程,同时了解深度学习在非线性经济指标预测中的优势与适用条件。

1. GDP预测为什么卡在非线性上

GDP预测这件事,传统方法不是不能用,而是越用越觉得别扭。ARMA、移动平均、Logistic、指数回归,这些方法都有一个共同前提:序列的结构是线性的,或者可以通过变换转化成线性形式。但GDP本身受货币供应、财政收支、固定资产投资、消费习惯、政策周期等因素共同驱动,变量之间不是简单叠加,而是存在滞后、饱和、突变这类非线性关系。用线性模型去拟合非线性系统,必然出现系统性偏差。

深度学习的价值在于它不预设函数形式。通过多层非线性变换,模型可以自主从历史数据中提取特征组合,把“货币供应量+财政收入+固定资产投资”到GDP的映射关系逼近出来。这篇论文的思路很直接:拿1980到2015年的三个先行指标做输入,用滞后一期的数据预测下一年GDP,最后在2006到2015年的测试集上把平均相对误差压到了3.88%,RMSE约19240亿元,明显优于ARMA、移动平均、Logistic和指数回归。对做宏观经济数据分析的人来说,这是个值得拆解的案例:不只是替换模型,而是从变量选取、数据标准化、滞后构造到评估口径,完整换了一套流程。

2. 先行指标选取与数据预处理:Min-Max 标准化和滞后一期

2.1 为什么选货币供应量、财政收入、固定资产投资

GDP预测的第一步不是搭模型,而是选变量。论文选了三个先行指标:货币供应量(MS)、财政收入(FR)、固定资产投资(FAI)。这三个指标有一个共同特点:它们在时间上领先于GDP变动。货币供应量反映央行的政策取向,货币政策调整通常需要几个季度才能传导到实体经济;财政收入反映政府可支配资源的扩张或收缩,财政支出会提前形成社会需求;固定资产投资本身就构成当期GDP的一部分,而且项目立项、开工到形成产出有一个时间差,所以它也可以作为先行变量。

选这三个指标还有一个实际操作上的考量:它们在《中国统计年鉴》里连续可查,1980年到2015年共36个年度样本,虽然不多,但足够做一个单步预测的验证。如果换成季度数据或者更高频数据,样本量会更大,但当时统计口径变化也更复杂,处理成本高。用年度数据的好处是噪声相对小,坏处是样本量少,深度学习模型容易过拟合,所以后面必须用简单的网络结构配合标准化和滞后构造来缓解。

2.2 数据清洗与对齐:从统计年鉴到DataFrame

拿到原始数据后,第一件事是检查缺失值和量纲。统计年鉴里的数值单位通常统一为亿元,但不同年份可能有口径调整,比如2015年前后固定资产投资统计起点变化。我的做法是先把数据整理成一张长表,再做对齐检查。

import pandas as pd import numpy as np # 构造1980-2015年数据,单位:亿元 years = np.arange(1980, 2016) gdp = np.array([4587.6, 4935.8, 5373.0, 6020.9, 7278.5, 9098.9, 10376.2, 12174.6, 15180.4, 17179.7, 18872.9, 22005.6, 27194.5, 35673.2, 48637.5, 61339.9, 71813.6, 79715.0, 85195.5, 90564.4, 100280.1, 110863.1, 121717.4, 137422.0, 161840.2, 187318.9, 219438.5, 270092.3, 319244.6, 349081.4, 413030.3, 489300.6, 540367.4, 595244.4, 643974.0, 676708.0]) # 货币供应量、财政收入、固定资产投资为示例数据,实际以统计年鉴为准 ms = np.array([1661.0, 2027.0, 2369.0, 2788.6, 3597.0, 5198.9, 6721.0, 8349.7, 10099.8, 11949.6, 15293.4, 19349.9, 25402.2, 34879.8, 46923.5, 60750.5, 76094.9, 90995.3, 104498.5, 119897.9, 134610.3, 158301.9, 185007.0, 221222.8, 254107.0, 298755.7, 345603.6, 403442.2, 475166.6, 606225.0, 725774.0, 851590.0, 974149.0, 1106525.0, 1228375.0, 1392278.0]) fr = np.array([1159.0, 1175.0, 1212.0, 1366.0, 1642.0, 2004.0, 2122.0, 2199.0, 2357.0, 2664.0, 2937.0, 3149.0, 3483.0, 4348.0, 5218.0, 6242.0, 7408.0, 8651.0, 9876.0, 11444.0, 13395.0, 16386.0, 18903.0, 21715.0, 26396.0, 31649.0, 39373.0, 51321.0, 61316.0, 68518.0, 83101.0, 103874.0, 117253.0, 129209.0, 140370.0, 152217.0]) fai = np.array([910.0, 961.0, 1230.0, 1430.0, 1832.0, 2543.0, 3120.0, 3791.0, 4754.0, 4410.0, 4517.0, 5594.0, 8080.0, 13072.0, 17042.0, 20019.0, 22913.0, 24941.0, 28406.0, 29854.0, 32917.0, 37213.0, 43500.0, 55567.0, 70477.0, 88773.0, 109998.0, 137323.0, 172828.0, 224598.0, 278140.0, 311485.0, 374695.0, 446294.0, 512021.0, 562000.0]) df = pd.DataFrame({'year': years, 'gdp': gdp, 'ms': ms, 'fr': fr, 'fai': fai}) df.head()

这段代码把四列数据放进DataFrame。注意这里的MS、FR、FAI数值是示意填充,实际应从《中国统计年鉴》直接读取,我习惯在读取后增加一个df.isnull().sum()检查缺失。对于GDP这类宏观序列,不建议用插值填补缺失,宁可删掉不连续的年份,或者改用相邻年度均值,因为任何插值都会引入额外噪声。

2.3 Min-Max 标准化公式与Python实现

原始数据量级差异很大:GDP在1980年是4587.6亿元,到2015年是676708亿元,货币供应量从1661亿元涨到1392278亿元。如果直接输入神经网络,会导致权重更新被大数值变量主导,小数值变量几乎学不到特征。论文用了最小最大法(Min-Max Normalization),把每个变量压缩到0到1之间,公式为:

x' = (x - x_min) / (x_max - x_min)

from sklearn.preprocessing import MinMaxScaler scaler_X = MinMaxScaler() scaler_y = MinMaxScaler() X_raw = df[['ms', 'fr', 'fai']].values y_raw = df[['gdp']].values X_scaled = scaler_X.fit_transform(X_raw) y_scaled = scaler_y.fit_transform(y_raw)

这里用fit_transform分别对输入和输出做标准化。注意:scaler_Xscaler_y必须分开,因为GDP的量纲和输入变量不同。另外,MinMaxScaler默认会把数据映射到[0,1],但如果你希望保留负值或调整区间,可以传入feature_range=(-1, 1),对激活函数为tanh的网络更友好。

标准化有一个容易被忽略的坑:测试集不能用全部数据的最大值和最小值来缩放。正确做法是只用训练集的统计量。论文中训练集是1980-2005年,测试集是2006-2015年,所以应该先对训练集fit,再用同一个scaler去transform测试集。后面代码会体现这一点。

2.4 构造滞后一期样本:用t年指标预测t+1年GDP

论文的核心操作是“滞后一期”:用t年的货币供应量、财政收入、固定资产投资去预测t+1年的GDP。为什么要滞后?因为先行指标领先于GDP,如果直接用同一年份的指标预测同年GDP,那就变成“同步解释”而不是预测。滞后一期后,2006年的三个指标实际上用来预测2007年的GDP,这样模型才有实际应用价值。

def make_lagged_data(df, lag=1): X_lag = df[['ms', 'fr', 'fai']].iloc[:-lag].values # t年指标 y_lag = df[['gdp']].iloc[lag:].values # t+lag年GDP return X_lag, y_lag X_all, y_all = make_lagged_data(df, lag=1) print(X_all.shape, y_all.shape) # (35, 3) (35, 1)

这样处理后,样本数从36变成35,因为最后一年2015年的指标没有对应的下一年GDP。按照论文设定,用1980-2005年构造的训练样本是26个(1980-2005的指标对应1981-2006的GDP),测试样本是9个(2006-2014的指标对应2007-2015的GDP,加上2015指标预测2016年)。但要注意原始论文表2中测试集是2007-2016,所以2015年指标应该被用来预测2016年GDP,而2015年GDP作为真实值只参与对比。我一般会把最后一年单独拿出来做“未来预测”,而不是混进测试集。

滞后一期还会带来一个边界问题:输入数据的最后一个年份(2015年)对应的输出是2016年GDP,但在原始数据里没有2016年GDP,所以这组样本只能用于推理,不能用于训练或验证。

3. 深度学习模型搭建:从MLP到调参细节

3.1 网络结构设计:输入层、隐藏层、输出层

这篇论文用的深度学习模型本质上是一个多层感知机(MLP),不是LSTM或TCN。为什么是MLP?因为输入是三个先行指标,输出是一个GDP值,这是一个典型的回归任务,特征维度低,样本量少,用复杂时序模型反而容易过拟合。MLP的优势在于可以通过隐藏层的非线性激活函数逼近任意连续函数,正好对应GDP的非线性特征。

网络结构可以设计为:输入层3个节点,隐藏层若干层,输出层1个节点。论文提到“通过不同的层数、节点数进行比较”,但没有给出具体最优结构。我复现时一般从两层隐藏层开始,每层4到8个节点,激活函数选ReLU或tanh。ReLU收敛快,但在小样本下容易死神经元;tanh输出有界,对标准化后的数据更稳定。输出层用线性激活,因为GDP是连续值,不需要压缩。

3.2 Keras 实现基准模型

下面用TensorFlow/Keras实现一个基准模型,结构为3-6-4-1,两层隐藏层。

from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.optimizers import Adam def build_model(hidden1=6, hidden2=4, lr=0.01): model = Sequential([ Dense(hidden1, activation='tanh', input_shape=(3,)), Dense(hidden2, activation='tanh'), Dense(1, activation='linear') ]) model.compile(optimizer=Adam(learning_rate=lr), loss='mse', metrics=['mae']) return model model = build_model() model.summary()

Dense层的第一个参数是节点数。输入层不写,因为input_shape已经在第一层指定。激活函数选tanh,输出层用linear。损失函数用mse,因为这是回归任务,mae作为辅助指标。

注意,这里没有加任何正则化。对于26个训练样本,模型很容易记住训练数据,所以后面需要加EarlyStopping或者Dropout。论文里没有提这些,但实际复现时应该考虑。

3.3 训练参数与验证策略

训练集只有26个样本,不能按深度学习的常规做法划分大量验证集。我常用的策略是留一法(Leave-One-Out)或者小批量留出验证。这里先用简单的训练/测试划分,训练集1980-2005年指标对应1981-2006年GDP,共26个样本;测试集2006-2014年指标对应2007-2015年GDP,共9个样本。

X_train = X_scaled[:26] y_train = y_scaled[:26] X_test = X_scaled[26:] # 注意这里需要从原始X_all中切分,而不是从X_scaled直接切 y_test = y_scaled[26:] # 重新标准化:只用训练集拟合scaler scaler_X = MinMaxScaler().fit(X_raw[:26]) scaler_y = MinMaxScaler().fit(y_raw[:26]) X_train = scaler_X.transform(X_raw[:26]) y_train = scaler_y.transform(y_raw[:26]) X_test = scaler_X.transform(X_raw[26:]) y_test = scaler_y.transform(y_raw[26:])

这里有一个关键点:X_raw[26:]对应的是2006年到2015年的指标(因为总样本35,前26个用掉后剩9个),但最后一组2015年指标对应的y是2016年GDP,不在y_all里。所以要么把最后一组从X_test中去掉,要么单独处理。我建议把X_test改为X_raw[26:35],对应2006-2014年指标,预测2007-2015年GDP,这样和论文的表2年份对齐。

训练时用EarlyStopping,监控验证集loss,patience设为50。但样本太少,验证集波动大,所以也可以不用EarlyStopping,直接固定epoch=500,观察loss曲线是否收敛。

history = model.fit(X_train, y_train, epochs=500, batch_size=4, validation_split=0.2, verbose=0)

batch_size=4是因为样本太少,全批量(batch_size=26)会导致梯度更新过于平滑,小批量能带来一点随机性,有助于跳出局部最优。validation_split=0.2表示从训练集里再留20%作为验证,大约5个样本,只能作为参考。

3.4 隐藏层节点数对比实验

论文提到需要调整隐藏层和节点数。我复现时做了一个简单的网格搜索,比较不同节点数组合的测试集MAPE。

from tensorflow.keras.callbacks import EarlyStopping candidates = [(4,2), (6,4), (8,6), (10,8), (12,10)] results = [] for h1, h2 in candidates: model = build_model(hidden1=h1, hidden2=h2) early = EarlyStopping(monitor='val_loss', patience=50, restore_best_weights=True) model.fit(X_train, y_train, epochs=500, batch_size=4, validation_split=0.2, callbacks=[early], verbose=0) pred = model.predict(X_test) pred_inv = scaler_y.inverse_transform(pred) y_test_inv = scaler_y.inverse_transform(y_test) mape = np.mean(np.abs((y_test_inv - pred_inv) / y_test_inv)) * 100 results.append((h1, h2, mape)) print(f'{h1}-{h2}: MAPE={mape:.2f}%') best = min(results, key=lambda x: x[2]) print(f'Best: {best[0]}-{best[1]}, MAPE={best[2]:.2f}%')

实验结果通常会发现,节点数太少(如4-2)欠拟合,MAPE较高;节点数太多(如12-10)过拟合,训练集loss很低但测试集MAPE反而升高。论文最终能到3.88%的MAPE,说明它的网络规模和样本量是匹配的。我自己的复现经验是6-4或8-6的组合在类似数据上表现最稳。

在对比实验里,每个组合训练5次取平均值会更可靠,因为权重初始化是随机的,小样本下单次运行方差很大。我一般会把上面代码包在一个循环里跑多次,而不是只跑一次。

4. 预测效果评估:RMSE、MAPE与对比基准

4.1 评估指标定义

论文用了两个指标:RMSE(均方根误差)和MAPE(平均绝对百分比误差)。RMSE是绝对指标,量纲和GDP一样,单位是亿元;MAPE是相对指标,无量纲,直接反映误差百分比。公式如下:

RMSE = sqrt( (1/N) * sum((y_i - y_hat_i)^2) ) MAPE = (1/N) * sum( |(y_i - y_hat_i) / y_i| ) * 100%

def evaluate(y_true, y_pred): rmse = np.sqrt(np.mean((y_true - y_pred) ** 2)) mape = np.mean(np.abs((y_true - y_pred) / y_true)) * 100 return rmse, mape y_test_inv = scaler_y.inverse_transform(y_test) pred_inv = scaler_y.inverse_transform(model.predict(X_test)) rmse, mape = evaluate(y_test_inv, pred_inv) print(f'RMSE={rmse:.2f} 亿元, MAPE={mape:.2f}%')

注意,y_test_invpred_inv必须是原始量纲的数组,不能在标准化后的空间里计算RMSE,否则结果没有经济含义。另一个细节是,MAPE对真实值很小的样本非常敏感,但GDP数值很大,所以这个指标在这里是合理的。

4.2 与传统方法对比表

论文的对比数据来自肖智、吴慰的研究,传统方法的RMSE和MAPE数值如下:

评价指标ARMA法移动平均法Logistic法指数回归法深度学习预测法
RMSE46558.4842675.6751326.4748975.8519240.36
MAPE7.10%6.80%18.6%14.9%3.88%
平均预测误差21.36%31.53%21.68%21.24%8.76%

从表里能看出,深度学习在三个指标上全面占优。尤其是RMSE,比其他方法低一半以上。但要注意,这里传统方法的RMSE是在同一测试集上计算的,具体年份也许略有差异,所以对比时要保持样本区间一致。我在复现时会用相同的2007-2015年预测值去计算每个基准的指标,而不是直接抄论文表格。

有一点值得注意:移动平均法的MAPE只有6.8%,比ARMA还低,说明在这种弱平稳序列上,简单方法不一定差。深度学习的提升主要来自利用了三个先行指标的信息,而不是模型本身有多复杂。如果只用GDP序列做单变量预测,MLP未必能赢过移动平均。

4.3 残差分析:看误差分布

只算RMSE和MAPE还不够,应该看残差是否随机分布。如果残差存在明显趋势,说明模型漏掉了重要变量或者滞后阶数不对。用预测值减去真实值得到残差,再按年份画图。

import matplotlib.pyplot as plt years_test = np.arange(2007, 2016) residuals = y_test_inv.flatten() - pred_inv.flatten() plt.figure(figsize=(8,4)) plt.plot(years_test, residuals, marker='o', label='residuals') plt.axhline(y=0, color='gray', linestyle='--') plt.title('Prediction Residuals (2007-2015)') plt.xlabel('Year') plt.ylabel('Error (100 million yuan)') plt.legend() plt.grid(True) plt.show()

如果残差在0附近上下波动,没有明显的先正后负或先负后正,说明模型没有系统偏差。论文中预测值围绕真实值上下波动,误差在几个百分点内,基本符合随机分布。但我复现时发现,2008年附近残差通常较大,因为金融危机导致GDP增速突变,模型没有见过类似模式。这说明单靠年度数据很难捕捉结构性突变,这是深度学习的局限,不是调参能解决的。

4.4 预测结果可视化注意点

论文里图2是真实GDP与预测值的对比折线图。做这种图时要注意两点:一是横轴必须对齐年份,不能把训练集和测试集混在一起;二是纵轴单位要标注清楚,最好用亿元。另一个细节是,折线图容易让人忽略误差,可以加误差带或者把预测值标记为散点。

plt.figure(figsize=(8,5)) plt.plot(years_test, y_test_inv, marker='s', label='Real GDP') plt.plot(years_test, pred_inv, marker='o', label='Predicted GDP') plt.xlabel('Year') plt.ylabel('GDP (100 million yuan)') plt.title('Deep Learning GDP Prediction vs Actual') plt.legend() plt.grid(True) plt.show()

从图上可以直观看到,预测曲线和真实曲线高度重合,但在峰值(2010年前后)有略微低估,在经济下行期(2012年)有略微高估。这说明模型对趋势的跟随能力很好,但对转折点的捕捉能力一般。

5. 进阶:让GDP预测从能跑到可用的几个技巧

5.1 滞后期的选择:为什么是1而不是多期

论文用滞后一期,意味着只能用上一年指标预测下一年。这是合理的起步方案,但实际使用中,不同先行指标的最优滞后期可能不同。货币供应量对GDP的影响可能有2到3个季度的时滞,财政收入的传导周期更长。如果你想做多步预测,可以构造多滞后期特征,比如同时使用t年、t-1年、t-2年的指标作为输入,让模型自己决定权重。

但这里有个矛盾:年度数据样本量太少,每增加一个滞后特征,输入维度就翻倍,过拟合风险急剧上升。我的建议是先用单滞后跑通,再用滚动窗口验证多滞后的收益是否显著。如果MAPE下降到3%以下,说明多滞后有效;如果只下降0.1个百分点,那不如保持简单模型。

5.2 滚动预测与多步预测的边界

论文只做了单步预测,即用t年指标预测t+1年GDP。如果要多步预测,常见做法是递归预测:先用模型预测t+1年GDP,然后把t+1年GDP作为已知值,再结合t+1年的指标(需要先预测)去预测t+2年。这样误差会累积,但能为你提供未来3到5年的趋势参考。

def recursive_forecast(model, last_X, steps=3): preds = [] X_input = last_X.reshape(1, -1) for _ in range(steps): y_pred = model.predict(X_input, verbose=0) preds.append(y_pred[0, 0]) # 假设下一年的输入特征需要外部预测,这里用当前预测值简单替代 # 实际应用中应使用下一年的真实指标预测值 X_input = np.column_stack([y_pred[0,0], X_input[0,1:]])[np.newaxis, :] return preds

注意,这个函数里的X_input更新是示意性的,因为真实的货币供应量、财政收入、固定资产投资也需要预测,不能简单用GDP预测值替代。这里想说明的是,多步预测的误差会随时间放大,你需要对每一步的预测结果都附上置信区间。

5.3 数据泄漏风险与特征独立性

最容易被忽略的坑是数据泄漏。例如,财政收入和固定资产投资是从GDP核算体系里来的,它们本身和GDP有高度相关性,但不代表因果关系。如果用同步指标建模,模型可能只是在“记住”GDP的分解项,而不是在预测。滞后一期能从时间顺序上缓解这个问题,但不能彻底消除。

另外,标准化时如果把测试集信息混进scaler,会让测试集误差虚低。我见过很多复现案例,直接把全量数据fit_transform,然后训练测试,MAPE做到2%以下,但真正做外部预测时误差涨到8%。正确做法是训练集fit,然后transform测试集,这一点必须严格遵守。

5.4 复现论文时最容易踩的坑

第一个坑是数据版本不一致。《中国统计年鉴》不同年份的数据会有修订,比如GDP在2008年经济普查后有追溯调整。你从不同渠道下载的数据,2015年GDP可能是676708亿元,也可能是677000亿元,差异虽小,但会影响MAPE的第二个小数位。复现时最好注明数据来源和统计口径。

第二个坑是随机种子。小样本下MLP的初始化对结果影响巨大。跑同一个模型,不固定随机种子,MAPE可能在3.5%到5%之间波动。建议在model.build之前设置np.random.seed(42)tf.random.set_seed(42),并多次运行取平均值。

第三个坑是隐含的对比基准差异。论文里传统方法的RMSE来自其他研究者的报告,测试集年份可能不完全一样。如果你要用自己的跑分证明深度学习更优,必须在同一测试集上重新计算所有基准方法,包括ARMA的statsmodels实现、移动平均、Logistic回归等。ARMA可以直接用statsmodels.tsa.arima.model.ARIMA,但别忘了先做平稳性检验。

最后,如果你想把这个方法推广到季度GDP预测,需要注意季节调整。年度数据没有季节性,季度数据则需要用X-13ARIMA-SEATS或STL分解,否则模型会被季节性成分干扰。这一步不算复杂,但能显著提升预测稳定性。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 13:46:54

Chrome控制台进阶指南:从console.log到浏览器命令行实战技巧

1. 为什么我劝你别再把Console当“打印日志的地方”很多人对Chrome控制台的认知,停留在“代码里写了console.log,出问题时打开看看”。这个认知本身没错,但只开发了它不到一成的能力。我见过太多前端同行,排查一个接口返回异常&am…

作者头像 李华
网站建设 2026/9/19 13:46:10

BP神经网络在日负荷预测中的结构优化与特征工程实践

简介:本资源是一份面向电力系统专业学生、电气工程师及人工智能初学者的BP神经网络应用教学文档,聚焦日负荷预测这一典型非线性时间序列建模问题。文档系统阐述BP神经网络的基本原理、拓扑结构、前向传播与误差反向传播算法推导过程,并结合电…

作者头像 李华
网站建设 2026/9/19 13:45:38

JavaScript脚本动态加载:跨文件调用与执行顺序全解析

简介:JS 开发中跨页面调用变量和函数,是多脚本协作场景的常见痛点,这份 PDF 面向需要让 a.js 与 b.js 相互调用的前端开发者。内容以按钮点击事件为入口,演示了在 b.js 中通过 document.createElement(script) 动态创建 script 标…

作者头像 李华
网站建设 2026/9/19 13:41:19

减速器拆装与结构分析:从实操步骤到参数测量

简介:机械拆装及结构分析课件面向机械工程类学生及装备维修技术人员,以减速器拆装为核心,系统讲解其结构原理、拆装步骤与维护要点。课件以JZQ-250型二级展开式圆柱齿轮减速器和教学用单级圆柱齿轮减速器为例,逐一展示箱座、箱盖、…

作者头像 李华