RBF滑膜控制

RBF神经网络可以逼近未知函数。

 

前提条件是

1,知道未知函数的输入变量,用来作为RBF神经网络的输入

2,知道输入变量的变化范围,用来确定高斯基函数的b 和c

 Lyapunov第二项含义:

初始时网络权值和真实未知函数的网络权值有误差,V为正值。对V求导令V为单调递减函数,最终网络权值会逼近真实函数的网络权值。

 

 

 



clear all;
close all;
clc;
%仿真时间、仿真步长
t=10;
ts=0.001;

%控制器参数
c=10;
cij=[-2 -1 0 1 2];
bj=3;
w(1:5,1)=0.1;
gama=100;
k1=3;
b=10;
D=1.5;
%控制对象初始状态
x(1)=0;
dx(1)=10*ts;
ef0=0;
for k=1:1:t/ts
   times(k)=k*ts;
   xd(k)=sin(k*ts);
   dxd(k)=cos(k*ts);
   
   e(k)=x(k)-xd(k);
   ef(k+1)=ef0+e(k)*ts;
   ef0=ef(k+1);
   s(k)=e(k)+c*ef(k);
   
   xi=e(k)+xd(k);
   W=[w(1,k),w(2,k),w(3,k),w(4,k),w(5,k)];
   for j=1:1:5
       h(j)=exp(-(xi-cij(j))^2/(2*bj^2));
   end
    dw=gama*s(k)*h';
    w(:,k+1)=w(:,k)+dw*ts;
    fn(k)=W*h';
    ut(k)=1/b*(-c*e(k)+dxd(k)-fn(k)-k1*s(k)-D*sign(s(k)));
    
    dt(k)=0.5*sin(k*ts);
    fx(k)=10*x(k)^2;
    %ut(k)=1/b*(-c*e(k)+dxd(k)-fx(k)-k*s(k)-D*sign(s(k)));
    
    dx(k+1)=(b*ut(k)+fx(k)+dt(k));
    
    
    x(k+1)=x(k)+dx(k)*ts;
end
x(:,end)=[];
figure(1)
plot(times,x,times,xd);
figure(2)
plot(times,ut);
figure(3)
plot(times,fx,times,fn)

### 使用RBF神经网络逼近未知函数的方法 #### RBF神经网络简介 径向基函数(Radial Basis Function, RBF)神经网络是一种三层前馈神经网络,由输入层、隐含层和输出层组成。该网络利用径向基函数作为隐藏单元的激活函数,在处理模式识别与函数逼近方面表现出色[^1]。 #### 构建RBF神经网络模型 构建用于逼近未知函数的RBF神经网络主要涉及以下几个要素: - **中心选取**:选择合适的中心对于RBF神经网络至关重要。通常可以通过聚类方法(如K-means)确定这些中心的位置。 - **宽度设置**:决定每个高斯核函数的影响范围。一般基于数据分布特性设定或通过交叉验证优化得到最优参数值。 - **权值计算**:连接隐含层到输出层之间的权重可通过最小二乘法求解获得。 #### Python实现案例 下面给出一段Python代码示例,展示如何使用`scikit-learn`库中的`RBFNetwork`来训练并预测一个简单的正弦波形信号。 ```python import numpy as np from sklearn.cluster import KMeans from scipy.spatial.distance import cdist from sklearn.preprocessing import StandardScaler class RBFFunction: """定义径向基函数""" def __init__(self, centers=None, beta=1.0): self.centers = centers self.beta = beta def fit(self, X): kmeans = KMeans(n_clusters=len(self.centers)).fit(X) self.centers = kmeans.cluster_centers_ def transform(self, X): dist_matrix = cdist(X, self.centers)**2 * (-self.beta) return np.exp(dist_matrix) def train_rbf_network(x_train, y_train, n_hidden_units=10): scaler_x = StandardScaler().fit(x_train.reshape(-1, 1)) scaled_X = scaler_x.transform(x_train.reshape(-1, 1)) rbf_func = RBFFunction() rbf_func.fit(scaled_X) Phi = rbf_func.transform(scaled_X).T w = np.linalg.pinv(Phi.T @ Phi) @ Phi.T @ y_train.flatten() def predict(x_new): x_scaled = scaler_x.transform(x_new.reshape(-1, 1)) phi_test = rbf_func.transform(x_scaled).T return (phi_test.T @ w).reshape(-1, 1) return predict if __name__ == "__main__": # 创建样本数据集 N = 100 x_data = np.linspace(-np.pi*2, np.pi*2, num=N).reshape(N, 1) noise = np.random.normal(scale=.1, size=x_data.shape) t_data = np.sin(x_data)+noise pred_fn = train_rbf_network(x_data, t_data) test_points = np.array([[-i*np.pi/8.] for i in range(-4, 9)]) predictions = pred_fn(test_points) print("Test Points:", test_points.ravel()) print("Predictions :", predictions.ravel()) ``` 此程序首先创建了一个带有噪声的正弦曲线的数据集;接着定义了自定义的RBFFunction类来进行特征转换;最后实现了train_rbf_network() 函数完成整个RBF神经网络的学习过程,并返回一个可以用来做新输入预测的功能对象pred_fn[].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值