У меня есть интеграл, для которого я хочу управлять вводом, добавив к нему P-контроллер.
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
xs = []
yd = []
def dY(y, x):
a = 0.001
yin = 1
C = 0.01
N = 1
dC = C/N
b1 = 0
y_diff = -np.copy(y)
y_diff[0] += yin
y_diff[1:] += y[:-1]
xs.append(x)
yd.append(y_diff)
return (a/dC)*y_diff+b1*dC
x = np.linspace(0,20,1000)
y0 = np.zeros(4)
res = odeint(dY, y0, x)
plt.plot(x,res, '-')
plt.gca().set_prop_cycle(plt.rcParams['axes.prop_cycle'])
plt.plot(np.array(xs),np.array(yd), '-.')
plt.show()
y_in - это переменная, которой я хочу управлять с помощью P / PI-регулятора, чтобы достичь определенной уставки. Я смотрел на это по-разному, но, честно говоря, понятия не имею, с чего начать реализацию контроллера.
Я знаком с концепцией ПИД-регулятора и всеми связанными уравнениями, однако для меня это совершенно новая вещь, которую я могу реализовать в случае, когда используется ODEINT.
Надеюсь, кто-нибудь сможет мне помочь.
@WarrenWeckesser, и как мне получить мой текущий код для одной системы дифференциальных уравнений, потому что, честно говоря, реализация такой системы для меня полная размытость.






odeint, вам придется записать всю систему (т.е. «объект» плюс контроллер) в виде одной системы дифференциальных уравнений.