Modelica三次hermite插值

Modelica三次hermite插值,modelica,Modelica,关于Modelica标准库(Modelica.Fluid.Utilities.CubicHermite)中的CubicHermite函数,我有一个问题 我对函数有以下输入。 输入实x“横坐标值” 我有点困惑,如何计算y1d和y2d值?我理解你的问题,你问的是如何计算导数y1d(点y1处的导数)和y2d(点y2处的导数)。简短的回答是您想要的(例如,简单坡度:(y(i+1)-y(i))/(x(i+1)-x(i)))。只要确保你的选择适合这个案例 虽然可能会更有用一些,但我建议您看看在建筑物库中实现

关于Modelica标准库(Modelica.Fluid.Utilities.CubicHermite)中的CubicHermite函数,我有一个问题

我对函数有以下输入。 输入实x“横坐标值”


我有点困惑,如何计算y1d和y2d值?

我理解你的问题,你问的是如何计算导数y1d(点y1处的导数)和y2d(点y2处的导数)。简短的回答是您想要的(例如,简单坡度:
(y(i+1)-y(i))/(x(i+1)-x(i))
)。只要确保你的选择适合这个案例

虽然可能会更有用一些,但我建议您看看在建筑物库中实现CubicHermite功能的情况

计算的导数是对“SplineDerivations”的函数调用,其代码可以在Github上找到

SPLINEDERIVATION似乎也有考虑数据集边缘以及数据集中的导数的有用案例

更新:


我找到了一份Mathworks pdf,其中描述了他们对三次hermite样条曲线的使用,以及他们使用的两种方法,分别称为“pchip”(第3.4节)和“spline”(第3.5节)。

特别是如果你看看Modelica.Fluid.Utilities.cubicHermite_with derivative的使用(不使用不带导数的方法)您会发现,它用于流动区域中m_流的Modelica.Fluid.Pipes.BaseClasses.WallFriction.LadrandQuadraticTurbulent.Internal.dp_fric_,y1d和y2d与边界处的导数(ddp_fric_dm_流)值相匹配(对于m_流的层流和m_湍流)。
  input Real x1 "Lower abscissa value";
  input Real x2 "Upper abscissa value";
  input Real y1 "Lower ordinate value";
  input Real y2 "Upper ordinate value";
  input Real y1d "Lower gradient";
  input Real y2d "Upper gradient";
  output Real y "Interpolated ordinate value";