实现使用RBF(径向基函数)神经网络模拟二阶电机数学模型中的非线性干扰,以及使用WNN(小波神经网络)预测模型中的非线性函数来抵消迟滞影响的功能

news/2025/3/1 13:36:52/

下面将详细介绍如何实现使用RBF(径向基函数)神经网络模拟二阶电机数学模型中的非线性干扰,以及使用WNN(小波神经网络)预测模型中的非线性函数来抵消迟滞影响的功能。我们将按照以下步骤进行:

步骤1:定义二阶电机数学模型

考虑一个带有迟滞影响的二阶电机数学模型,其一般形式可以表示为:
y ¨ ( t ) + a 1 y ˙ ( t ) + a 0 y ( t ) = u ( t ) + d ( t ) + h ( t ) \ddot{y}(t) + a_1\dot{y}(t) + a_0y(t) = u(t) + d(t) + h(t) y¨(t)+a1y˙(t)+a0y(t)=u(t)+d(t)+h(t)
其中, y ( t ) y(t) y(t) 是电机的输出, u ( t ) u(t) u(t) 是控制输入, d ( t ) d(t) d(t) 是非线性干扰, h ( t ) h(t) h(t) 是迟滞影响。

步骤2:RBF神经网络模拟非线性干扰

RBF神经网络是一种前馈神经网络,其输出可以表示为:
d ^ ( t ) = ∑ i = 1 N w i φ ( ∥ x ( t ) − c i ∥ ) \hat{d}(t) = \sum_{i=1}^{N} w_i\varphi(\left\lVert x(t) - c_i\right\rVert) d^(t)=i=1Nwiφ(x(t)ci)
其中, w i w_i wi 是权重, φ \varphi φ 是径向基函数(通常使用高斯函数), c i c_i ci 是中心, x ( t ) x(t) x(t) 是输入向量。

步骤3:WNN预测非线性函数

小波神经网络是一种结合了小波变换和神经网络的模型,用于预测模型中的非线性函数。

代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPRegressor
from pywt import wavedec# 定义二阶电机数学模型
def second_order_motor_model(y, u, d, h, a0, a1):y_dot = np.zeros(2)y_dot[0] = y[1]y_dot[1] = -a0 * y[0] - a1 * y[1] + u + d + hreturn y_dot# 定义RBF神经网络模拟非线性干扰
def rbf_network(x, centers, weights, sigma):N = len(centers)phi = np.zeros(N)for i in range(N):phi[i] = np.exp(-np.linalg.norm(x - centers[i])**2 / (2 * sigma**2))return np.dot(weights, phi)# 定义WNN预测非线性函数
def wnn_predict(x, model):# 这里简单使用MLPRegressor作为示例return model.predict([x])[0]# 模拟参数
T = 10  # 模拟时间
dt = 0.01  # 时间步长
t = np.arange(0, T, dt)
N = len(t)# 模型参数
a0 = 1.0
a1 = 0.5# 初始化状态
y = np.zeros((N, 2))
y[0] = [0, 0]# 控制输入
u = np.sin(2 * np.pi * 0.5 * t)# 非线性干扰和迟滞影响
d = 0.5 * np.sin(2 * np.pi * 1.5 * t)
h = 0.2 * np.sign(np.sin(2 * np.pi * 2 * t))# RBF神经网络参数
N_rbf = 10  # RBF神经元数量
centers = np.random.rand(N_rbf, 2)
weights = np.random.rand(N_rbf)
sigma = 0.1# WNN模型训练
X_wnn = np.column_stack((y[:, 0], y[:, 1], u))
y_wnn = -a0 * y[:, 0] - a1 * y[:, 1] + u + d + h
wnn_model = MLPRegressor(hidden_layer_sizes=(10,), activation='relu', max_iter=1000)
wnn_model.fit(X_wnn, y_wnn)# 模拟过程
for i in range(1, N):# 预测非线性干扰d_hat = rbf_network(y[i-1], centers, weights, sigma)# 预测非线性函数f_hat = wnn_predict(np.concatenate((y[i-1], [u[i-1]])), wnn_model)# 抵消影响u_compensated = u[i-1] - d_hat - f_hat# 更新状态y_dot = second_order_motor_model(y[i-1], u_compensated, d[i-1], h[i-1], a0, a1)y[i] = y[i-1] + y_dot * dt# 绘制结果
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(t, y[:, 0], label='Output')
plt.xlabel('Time (s)')
plt.ylabel('Output')
plt.legend()plt.subplot(2, 1, 2)
plt.plot(t, u, label='Control Input')
plt.xlabel('Time (s)')
plt.ylabel('Control Input')
plt.legend()plt.tight_layout()
plt.show()

代码解释

  1. 二阶电机数学模型second_order_motor_model 函数定义了二阶电机的动力学方程。
  2. RBF神经网络rbf_network 函数实现了RBF神经网络的计算,用于模拟非线性干扰。
  3. WNN预测wnn_predict 函数使用 MLPRegressor 作为WNN的示例,用于预测非线性函数。
  4. 模拟过程:在模拟过程中,首先使用RBF神经网络预测非线性干扰,然后使用WNN预测非线性函数,最后将其从控制输入中抵消,更新系统状态。
  5. 结果绘制:使用 matplotlib 绘制系统的输出和控制输入。

注意事项

  • 代码中的RBF神经网络和WNN只是简单示例,实际应用中可能需要更复杂的网络结构和训练方法。
  • 非线性干扰和迟滞影响的具体形式可以根据实际情况进行调整。

http://www.ppmy.cn/news/1575776.html

相关文章

基于Linux C应用的0.96寸OLED硬件监测器页面

一、前言 开发板:香橙派 5Plus。 librknnrt.so 版本:2.3.0。 rknn driver:0.9.8。 本次的页面设计基于之前写的手写FrameBuffer驱动: Linux手写FrameBuffer任意引脚驱动spi屏幕_rk3588 framebuffer-CSDN博客https://blog.csdn.ne…

自动化测试框架设计

📌 自动化测试框架设计 该框架基于 pytest,支持 Web API 自动化测试,采用 关键字驱动,支持 远程执行、多机调度、失败重试、数据驱动(CSV),并结合 allure 生成可视化测试报告。 📂…

苹果与小米破冰合作:iPhone 16e全面支持Find My网络,跨生态互通实现技术性突破

2025年2月28日&#xff0c;苹果公司正式宣布其中国区特供机型iPhone 16e全面接入Find My网络升级版&#xff0c;并与小米旗舰机型15 Ultra实现跨平台互联互通。 核心功能升级 1. Find My网络能力扩展 iPhone 16e搭载的Find My 3.0网络支持亚米级定位&#xff08;误差<1米…

LeetCode-Hot100-002字母异位词

使用手写的hash&#xff0c;把每个字母的ascii码加起来再模&#xff0c;来定位hash表的索引。 不懂可以在评论区问我&#xff0c;正常题解可以参照leetcode官方题解 class Hash{ public:static const int MAXN 10007;int size;vector<list<pair<string, int>>…

Java进阶——注解一文全懂

Java注解&#xff08;Annotation&#xff09;是一种强大的元数据机制&#xff0c;为代码提供了附加信息&#xff0c;能简化配置、增强代码的可读性和可维护性。本文将深入探讨 Java 注解的相关知识。首先阐述了注解的基础概念&#xff0c;包括其本质、作用以及核心分类&#xf…

云计算相关

**云计算**是一种通过互联网提供计算资源和服务的模式&#xff0c;用户可以根据需求动态获取计算能力、存储、网络等资源&#xff0c;而无需管理底层基础设施。以下是云计算的详细介绍&#xff1a; ### 1. **核心概念** - **按需服务**: 用户根据需求获取资源&#xff0c;按使用…

【Linux第一弹】Linux基础指令(上)

目录 1.ls指令 1.1 ls使用实例 2.pwd指令 3.cd指令 3.1 cd使用实例 4.touch指令 4.1touch使用实例 5.mkdir指令 5.1mkdir使用实例 6.rmdir指令和rm指令 6.1 rmdir指令使用实例->: 6.2 rm指令使用实例 7.man指令 8.cp指令 8.1 cp 使用实例 9.mv指令 9.1mv使用…

Typora的Github主题美化

[!note] Typora的Github主题进行一些自己喜欢的修改&#xff0c;主要包括&#xff1a;字体、代码块、表格样式 美化前&#xff1a; 美化后&#xff1a; 一、字体更换 之前便看上了「中文网字计划」的「朱雀仿宋」字体&#xff0c;于是一直想更换字体&#xff0c;奈何自己拖延症…