import numpy as np
from matplotlib import pyplot as plt
from numpy.linalg import norm
import math as ma
from math import sin as sin
ts = 1
alfa = 0.07
xite1 = 0.15
xite2 = 0.50
w = 0.5np.ones([6, 1], dtype=float)
v = 0.5np.ones([6, 1], dtype=float)
c = 0.5np.ones([1, 6], dtype=float)
b = 5np.ones([6, 1], dtype=float)
h = np.zeros([6, 1], dtype=float)
w1 = w
w2 = w1
w3 = w2
v1 = v
v2 = v1
v3 = v2
u1 = 0
r = np.zeros([1002, 1], dtype=float)
u = np.zeros([1002, 1], dtype=float)
y1 = 0
y = np.zeros([1002, 1], dtype=float)
y2 = 0
tim = np.zeros([1002, 1], dtype=float)
NG = np.zeros([1002, 1], dtype=float)
Nf = np.zeros([1002, 1], dtype=float)
ym = np.zeros([1002, 1], dtype=float)
em = np.zeros([1002, 1], dtype=float)
dw = np.zeros([6, 1], dtype=float)
for k in range(1, 1001, 1):
tim[k-1] = kts
if k < 251:
r[k-1] = 0.5*sin(ma.pi*k / 25)
elif k >=251 and k <501:
r[k-1] = 0.5
elif k >=501 and k <751:
r[k-1] = -0.5
elif k >= 751 and k < 1001:
r[k-1] = 0.3sin(ma.pik / 25) + 0.4ma.sin(ma.pik / 32) + 0.3sin(ma.pik / 40)
y[k] = (y[k-1]y1y2(y2-1)*u1 + u[k-1]) / (1 + y12 + y22)
for j in range(1, 7, 1):
h[j-1] = ma.exp((-norm(y[k] - c[:, j - 1]) ** 2) / (2 * ma.pow(b[j - 1][0], 2)))
NG[k-1] = np.dot(np.transpose(w2), h)
NG[k] = np.dot(np.transpose(w1), h)
NG[k+1] = np.dot(np.transpose(w), h)
Nf[k-1] = np.dot(np.transpose(v2), h)
Nf[k] = np.dot(np.transpose(v1), h)
Nf[k+1] = np.dot(np.transpose(v), h)
ym[k-1] = NG[k-1]
ym[k] = NG[k] + Nf[k]*u1
em[k-1] = y[k] - ym[k-1]
for j in range(1, 7, 1):
dw[j-1]=xite1*em[k-1]*h[j-1]
w1 = w2 + dw + alfa*(w2-w3)
w = w1 +dw +alfa*(w1-w2)
dv =0*v
for j in range(1, 7, 1):
dv[j-1] = xite2*em[k-1]*h[j-1]*u[k-1]
v1 = v2 + dv + alfa*(v2-v3)
v = v1 + dv + alfa*(v1 - v2)
u[k] = -NG[k+1] / Nf[k+1] + r[k-1] / Nf[k+1]
u1 = u[k-1]
u[k-1] = u[k]
y2 = y1
y1 = y[k-1]
y[k-1] = y[k]
w3 = w2
w2 = w1
w1 = w
plt.figure(1)
plt.plot(tim[0:999, :], y[0:999, :], color='red', linewidth=1, )#X[:,m:n] #取第m到第n-1列
plt.plot(tim[0:999, :], ym[0:999, :], color='blue', linewidth=1, )
plt.xlabel("Time(second)")
plt.ylabel("Position tracking")
plt.title("RBF network sin")
plt.figure(2)
plt.plot(tim[0:999, :], NG[2:1001, :], color='red', linewidth=1, )
plt.xlabel("Time(second)")
plt.ylabel("g and Ng")
plt.title("RBF network outcomeNG")
plt.figure(3)
plt.plot(tim[0:999, :], Nf[1:1000, :], color='red', linewidth=1, )
plt.xlabel("Time(second)")
plt.ylabel("f and Nf")
plt.title("RBF network NF")
plt.figure(4)
plt.plot(tim[0:999, :], em[0:999, :], color='red', linewidth=1, )
plt.xlabel("Time(second)")
plt.ylabel("e(k)")
plt.title("RBF network wucha")
plt.show()