问题标签 [control-theory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - 如何定义模糊控制器设计的训练隶属函数?
我正在设计一个模糊控制器,为此,我必须定义 3 个三角函数集。他们是:
但我的问题是我只有以下数据:
如何仅基于此给定信息定义 3 个三角形设置范围?
python - 在python中计算状态转移矩阵
有没有直接计算状态转移矩阵的方法(即e^(A*t),其中A是一个矩阵)?我打算这样计算:
但失败了:
如果我直接先计算 A*t 然后使用expm()
,它仍然无法工作,因为expm()
.
我希望我能清楚地说明我的问题:)
编辑:这是我认为应该对解决我的问题有用的代码:
robotics - 对定位卡尔曼滤波器进行多次位置测量(来自不同传感器)
我正在尝试使用卡尔曼滤波器来估计小型机器人在一维中的位置。但是,我有两个传感器进行位置测量。我使用的状态是一维位置和速度,但我对测量方程总共有三个测量值(两个不同的传感器给出位置,一个给出速度)。如何结合两种不同的位置读数?
我尝试在测量方程中的 H 矩阵中添加额外的一行,Y = Hx。但这将 Y 作为长度为 3 的列矩阵。但是,状态 x 是长度为 2 的列矩阵。这意味着当我尝试计算下一个状态的估计值时 X = X + K(Y - HX) ,矩阵大小不匹配。
有没有人有过这方面的经验?任何帮助/指针将不胜感激。
matlab - 如何在 h=dt 的实际系统中将欧拉方法应用于 ODE 一阶?
我有 2 个 ODE 需要实时计算:
其中 x1 是从 arduino 读取的,我必须计算 x1_est 和 x2_est 以便
当我注释行 >>x1old=x1new x1 的估计值:x1new(=x1_est) 时,观察者适用于 x1_est,但它从不适用于 x2_est
注意:这是控制理论中观察者的实现,其中 l1,l2 是根据使观察者足够快(根据 a1 和 a2)给出的
注意 2:我有不需要的其他变量,以使我的代码可读
matlab - Workspace 和 Simulink 阶跃响应的差异。为什么会有这种差异?
我的主要目标是为传递函数 (5.551* s^2) 制作一个控制器,使用根轨迹我制作了如下所示的控制器。使用 step () 函数分析工作区中的阶跃响应我得到了一个令人满意的答案,但是当我尝试将此答案传输到 Simulink 时,响应的行为不同,例如在稳定状态下,我希望获得尽可能小的错误在 Workspace 但在 Simulink 中有一个很大的错误,由于某种原因,在 8 秒时间(Simulink 仿真时间)有一个“跳跃”,如显示屏上所示,当我更改仿真时间时,这个“跳跃”发生了变化我也不知道为什么在一种环境和另一种环境之间会发生这些变化。
Workspace 中的阶跃响应
Simulink 中的阶跃响应,仿真时间为 8 秒
Simulink 中的阶跃响应,仿真时间为 12 秒
Simulink 控制器
Simulink 传递函数
我希望制作一个误差小于 5% 且超调小于 25% 的控制器,所以我首先制作了一个带有两个积分器的控制器,以消除零对源的影响,然后我在控制器上添加了两个积分器源尝试减少误差,零在 -0.652 我为此使用了角度条件和 0.240251 的增益我使用了模块化条件。
我没想到会出现最优化的行为,只是它具有满足强加条件的最小条件,所以我并不担心源头上的四个积分器。
我尝试使用 sisotool() 命令,以为我做错了什么,但是当我模拟 Simulink 时结果发生了很大变化,所以我放弃了这个选项并保留了我使用根轨迹制作的控制器。
c++ - 随着时间的推移将矩阵函数与 Boost 集成 / 计算 C++ 中的可控性 Gramian
我有矩阵 A 和 B。我想计算 Wikipedia 上定义的可控性 Gramian:
幸运的是,Boost 已经提供了集成方法,所以我编写了以下函数:
Boost 似乎期望这个积分的输出是双精度值而不是矩阵。编译器给出以下错误:
/usr/local/include/boost/math/quadrature/gauss.hpp:1183:9: No viable conversion from 'double' to 'K' (aka 'Matrix<std::complex<double>, 12, 12>')
. 那么有没有办法用矩阵类型的输出来做到这一点?我应该使用 Boost 还是有更好的库来解决这个问题?我想听听你的建议!
transfer-function - s=jw 中的频率响应/波特图
我在 s 有一个传递函数,它有一些复杂的零点和极点。我试图在 s 域中获得具有传递函数的波特图,但没有得到正确的结果。此外,如何在 s=jw 中获得 TF 的预兆?这样我就可以获得所需频率范围内的频率响应。
谢谢
python - 获取 PID 控制器的最后一个错误
我正在尝试在 Python 上构建一个 PID 控制器。以下是到目前为止我的实现。尽管语法是连贯的,但这仍然是伪代码。
我试图弄清楚last_error
我已经在这里给出的内容,但我无法弄清楚。
python - 用 Python 设计一个 MPC 控制器
我正在尝试用 Python 设计一个 MPC 控制器,但我真的不知道从哪里开始。我在 YouTube 上观看了视频,但我更加困惑。基本上,这是针对模拟自动驾驶汽车的。我已经完成了它的 PID 控制器,但我还没有在模拟器上运行它:
但我不知道如何从 MPC 开始。在我的 init 函数中,我有以下值:
我也有以下函数定义。我将省略函数的主体。我知道我必须在 MPC 中使用这些,但这就是我需要指导的内容。
neural-network - 使用神经网络进行投资组合选择
我目前正在尝试构建一种算法来最大化投资组合的终端财富。我正在使用带有 Sutton 和 Barto (2018) 中存在的基线算法的 REINFORCE。我有一个用于策略的神经网络,它以当前的财富和投资期限剩余的时间作为输入,并输出两个值:正态分布的平均值和标准差。然后从该分布中抽取投资于风险资产的贴现美元金额。我有另一个用于价值函数的网络(相同的输入但输出状态值)。我已经分析地解决了这个问题,我的价值网络很好地收敛到了最优解。我的策略网络没有,这让我相信我可以改进网络架构以“帮助”它找到最佳解决方案。我对 pytorch 和神经网络相当陌生,因此我会很感激我如何做到这一点的想法。我的策略网络在下面,它有两个隐藏层,每个隐藏层有 32 个节点。我也玩过学习率,它似乎没有太大帮助。谢谢!