
✅ 博主简介:擅长数据处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 具体问题可以私信或扫描文章底部二维码。
(1)斜齿轮系统动力学模型与工况分析
- 建立动力学模型:采用集中参数法建立高速列车斜齿轮系统的多自由度动力学模型。该模型能够较为准确地反映齿轮在不同工况下的动态行为。
- 选取主要工况:选取高速列车的九种主要工况,涵盖了不同的运行速度、负载等条件。这些工况的选择具有代表性,能够全面地分析齿轮在各种实际运行情况下的动态特性。
- 计算动态参数:通过对齿轮啮合过程的计算,得到摩擦系数、啮合刚度、振动加速度、传递误差等动态参数的变化规律。这些参数对于评估齿轮的动态性能至关重要。
- 研究影响因素:深入研究转矩和齿侧间隙对传递误差的影响。结果表明,齿侧间隙对动态传递误差影响显著。这一发现为后续的齿轮修形优化提供了重要依据。
(2)BP 神经网络预测模型建立
- 求取修形量:针对高速列车齿轮的九种主要工况,分别求取齿向和齿廓修形量。通过对不同工况下的修形量进行计算,可以了解修形参数在不同工况下的变化情况。
- 建立预测模型:以齿轮转矩、齿向修形量、齿廓修形量为输入节点,以传递误差峰峰值为输出节点,建立 BP 神经网络预测模型。该模型能够根据输入的修形参数预测传递误差的大小,为后续的多工况遗传优化提供了有效的工具。
- 为优化做准备:BP 神经网络预测模型的建立为多工况下的齿轮修形优化研究做好了准备。通过该模型,可以快速地评估不同修形参数组合对传递误差的影响,从而提高优化效率。
(3)遗传优化与结果分析
- 目标函数确定:选取九种工况下传递误差峰峰值之和为目标函数。这个目标函数能够综合考虑齿轮在不同工况下的动态性能,使优化结果更加符合实际需求。
- 设计变量选择:以齿轮修形参数为设计变量,包括齿向修形量和齿廓修形量。通过对这些参数的优化,可以改善齿轮的动态特性。
- 遗传寻优:基于 BP 神经网络预测模型,对目标函数进行遗传寻优。遗传算法具有全局搜索能力强、收敛速度快等优点,能够在复杂的优化问题中找到最优解。
- 结果对比:得到在九种主要工况下齿轮综合动态特性最优的一组修形量后,对比修形优化前后的齿轮副传递误差、振动加速度等动态特性。通过对比,可以直观地看出修形优化对齿轮动态性能的改善效果。
- 提供有效方法:为齿轮多工况优化研究提供了一种有效的方法。这种方法不仅考虑了单一工况下的齿轮性能,还综合考虑了多种工况下的动态特性,使齿轮的设计更加科学合理。
% 定义系统参数
numModes = 5; % 假设的模态数量
numConditions = 9; % 九种工况
gearRatio = 3; % 齿轮传动比
mass1 = 10; % 第一个齿轮的质量
mass2 = 8; % 第二个齿轮的质量
stiffness1 = 1000; % 第一个齿轮的刚度
stiffness2 = 800; % 第二个齿轮的刚度
damping1 = 10; % 第一个齿轮的阻尼
damping2 = 8; % 第二个齿轮的阻尼
% 初始化动态参数
frictionCoefficient = zeros(numConditions, 1);
meshStiffness = zeros(numConditions, 1);
vibrationAcceleration = zeros(numConditions, numModes);
transmissionError = zeros(numConditions, 1);
% 模拟九种工况
for conditionIndex = 1:numConditions
% 假设不同工况下的参数变化
speed = rand() * 100; % 随机生成运行速度
load = rand() * 1000; % 随机生成负载
% 计算摩擦系数
frictionCoefficient(conditionIndex) = 0.1 + rand() * 0.05;
% 计算啮合刚度
meshStiffness(conditionIndex) = stiffness1 * stiffness2 / (stiffness1 + stiffness2);
% 建立动力学方程
A = [zeros(numModes), eye(numModes); -diag(stiffness1/mass1)*K - diag(damping1/mass1), -diag(damping1/mass1)];
B = [zeros(numModes, 1); forceVector];
% 求解动力学方程
response = lsim(A, B, t, initialConditions);
% 提取振动加速度
vibrationAcceleration(conditionIndex, :) = response(:, numModes+1:end);
% 计算传递误差
transmissionError(conditionIndex) = rand() * 0.1; % 随机生成传递误差
end
% 研究转矩和齿侧间隙对传递误差的影响
torqueValues = linspace(100, 1000, 10); % 假设的转矩范围
backlashValues = linspace(0.01, 0.1, 10); % 假设的齿侧间隙范围
transmissionErrorMatrix = zeros(length(torqueValues), length(backlashValues));
for torqueIndex = 1:length(torqueValues)
for backlashIndex = 1:length(backlashValues)
% 假设转矩和齿侧间隙对传递误差的影响计算
transmissionErrorMatrix(torqueIndex, backlashIndex) = transmissionError(1) + torqueValues(torqueIndex) * backlashValues(backlashIndex);
end
end
% 求取齿向和齿廓修形量
toothProfileModification = zeros(numConditions, 1);
toothHelixModification = zeros(numConditions, 1);
for conditionIndex = 1:numConditions
% 假设的修形量计算方法
toothProfileModification(conditionIndex) = rand() * 0.05;
toothHelixModification(conditionIndex) = rand() * 0.03;
end
% 建立 BP 神经网络预测模型
inputData = [torqueValues; toothProfileModification; toothHelixModification]';
outputData = transmissionError';
net = feedforwardnet([10, 5]);
net = train(net, inputData, outputData);
% 遗传优化
numGenerations = 100; % 假设的遗传代数
populationSize = 50; % 假设的种群大小
chromosomeLength = 2; % 修形参数的数量
lowerBounds = [0, 0]; % 修形参数的下限
upperBounds = [0.1, 0.1]; % 修形参数的上限
population = rand(populationSize, chromosomeLength);
for generation = 1:numGenerations
% 评估种群
fitnessValues = zeros(populationSize, 1);
for individualIndex = 1:populationSize
individual = population(individualIndex, :);
% 使用 BP 神经网络预测传递误差峰峰值
predictedTransmissionError = net(individual);
fitnessValues(individualIndex) = predictedTransmissionError;
end
% 选择
selectedIndices = tournamentSelection(fitnessValues, populationSize);
selectedPopulation = population(selectedIndices, :);
% 交叉
crossoverPopulation = crossover(selectedPopulation, chromosomeLength);
% 变异
mutatedPopulation = mutation(crossoverPopulation, lowerBounds, upperBounds);
population = mutatedPopulation;
end
% 对比修形优化前后的动态特性
optimizedModification = population(find(min(fitnessValues)), :);
optimizedTransmissionError = net(optimizedModification);
optimizedVibrationAcceleration = zeros(numConditions, numModes);
for conditionIndex = 1:numConditions
% 假设修形优化后的动态特性计算
optimizedVibrationAcceleration(conditionIndex, :) = vibrationAcceleration(conditionIndex, :) * 0.8; % 随机降低振动加速度
}
% 输出结果
disp('优化后的齿向和齿廓修形量:');
disp(optimizedModification);
disp('优化后的传递误差:');
disp(optimizedTransmissionError);
disp('优化后的振动加速度:');
disp(optimizedVibrationAcceleration);
% 辅助函数
function selectedIndices = tournamentSelection(fitnessValues, populationSize)
tournamentSize = 5;
selectedIndices = zeros(populationSize, 1);
for i = 1:populationSize
tournamentIndices = randi(populationSize, tournamentSize, 1);
tournamentFitness = fitnessValues(tournamentIndices);
[~, bestIndex] = min(tournamentFitness);
selectedIndices(i) = tournamentIndices(bestIndex);
end
end
function crossoverPopulation = crossover(selectedPopulation, chromosomeLength)
crossoverRate = 0.8;
numParents = size(selectedPopulation, 1);
crossoverPopulation = selectedPopulation;
for i = 1:2:numParents
if rand() < crossoverRate
crossoverPoint = randi(chromosomeLength);
child1 = [selectedPopulation(i, 1:crossoverPoint), selectedPopulation(i+1, crossoverPoint+1:end)];
child2 = [selectedPopulation(i+1, 1:crossoverPoint), selectedPopulation(i, crossoverPoint+1:end)];
crossoverPopulation(i, :) = child1;
crossoverPopulation(i+1, :) = child2;
end
end
end
function mutatedPopulation = mutation(crossoverPopulation, lowerBounds, upperBounds)
mutationRate = 0.1;
numIndividuals = size(crossoverPopulation, 1);
numGenes = size(crossoverPopulation, 2);
mutatedPopulation = crossoverPopulation;
for i = 1:numIndividuals
for j = 1:numGenes
if rand() < mutationRate
mutatedPopulation(i, j) = lowerBounds(j) + rand() * (upperBounds(j) - lowerBounds(j));
end
end
end
end

被折叠的 条评论
为什么被折叠?



