方程必须在C ++嵌入式系统中求解。
背景:
我正在寻找一种算法来近似C ++嵌入式系统中的结果,但我什至不知道要搜索什么。我发现了一些有关link的理论的论文,但是我认为必须有一种更简单的方法来实现这一目标。
还:如何在校准过程中确定算法是否可以解决功能?
答案 0 :(得分:-1)
通常的方法是通过牛顿的迭代,从初始逼近(Xm, Ym)
开始[假设f
仅仅是校正]。由于方程式的特殊形状,您可以将一个未知数中的一个方程式简化为两倍。
Xr = Xm - Fyx(Ym - Fxy(Xr))
Yr = Ym - Fxy(Xm - Fyx(Yr))
读取的迭代
Xr <-- Xr - (Xm - Fyx(Ym - Fxy(Xr))) / (1 + Fxy'(Ym - Fxy(Xr)).Fxy'(Xr))
Yr <-- Yr - (Ym - Fxy(Xm - Fyx(Yr))) / (1 + Fyx'(Xm - Fyx(Yr)).Fyx'(Yr))
因此,尽管准确度并不比计算f
本身重要,但您也应该将f
的导数制成表格。
如果校准点不太嘈杂,我建议使用三次样条插值法,您可以为此预先计算所有系数。同时,这些系数允许您估计导数(作为对应的二次插值,是连续的)。
原则上(除非点被均匀地隔开),您需要执行二分查找以确定参数所处的间隔。但是在这里,您将在附近的值处评估函数,以便从先前位置进行线性搜索会更好。
解决该问题的另一种方法是考虑在点网格上计算的双变量解曲面Xr = G(Xm, Ym)
和Yr = G(Xm, Ym)
。如果表面足够光滑,则可以使用粗网格。
因此,通过任何一种方法(例如上述方法),您都将预先计算每个网格节点处的解以及X
和Y
方向上某些插值的系数。我再次推荐了三次样条。
现在要在网格单元中进行插值,您可以通过Coons公式https://en.wikipedia.org/wiki/Coons_patch将两个univarite插值组合为一个双变量。
答案 1 :(得分:-1)
通过f_xy
拟合二阶多项式?通常这是不可行的。首选解决方案是Runga-Kutta插值。您在参数的左边和右边分别选择两个已知值,权重分别为1,2,2,1。这样可以估算d(f_xy)/dx
,然后将其用于插值。