c# - 在 C# 中使用 alglib 进行双线性变换的计算错误
问题描述
对于一个项目,我正在尝试从 z 变换到 s 变换。为此,我编写了使用双线性变换的代码,并使用 Matlab 检查了结果。不幸的是,他们错了,我没有看到错误。也许有人可以帮助我提示。
public double[] BiliTransf(double[] a, double Ts)
{
int n = a.Length;
double[] bil_p = { 2, Ts };
double[] bil_m = { 2, -Ts };
init[0] = 1;
for (int i = 1; i < n; i++)
{
init[i] = 0;
}
int j;
for (int i=0; i<n; i++)
{
// (1+s)^i
s_p = init;
for (j = 0; j < i; j++)
{
alglib.convr1d(s_p, 1+j, bil_p, 2, out s2_p);
s_p = s2_p;
}
// (1-s)^n-1-i
s_m = init;
for (j = 0; j < n-1-i; j++)
{
alglib.convr1d(s_m, 1+j, bil_m, 2, out s2_m);
s_m = s2_m;
}
// s_m * s_p
alglib.convr1d(s_m, s_m.Length, s_p, s_p.Length, out s2_m);
VektorMulti(ref s2_m, a[n-1-j]);
VektorAddV2ToV1(ref a_cont, ref s2_m);
}
return a_cont;
}
调用 C# Fbk:
a_tf = sv.BiliTransf(new double { 1, 0.5, 0.1}, 0.05);
a_tf[0]/a_tf[0] ; a_tf[0]/a_tf[1] ; a_tf[0]/a_tf[2]);
结果:a0:1 / a1:-35,56 / a2:4266,67
调用 Matlab:
H = tf([1 0.5 0.1],[1 0.5 0.1 ],0.05)
sysc = d2c(H, 'tustin')
结果:a0:1 / a1:120 / a2:4267
解决方案
推荐阅读
- python - 使用 time.sleep() 12 小时有多糟糕?(Python 3.8)
- sharepoint - 用于确定共享点站点的搜索设置的 API
- javascript - 使用 obj 键减少,值未按预期工作
- anylogic - 尝试使用动态和动作参数
- python - 将单个图像输入到 H5 文件并获取每个类的百分比作为输出
- database - 无法运行 arangodump 时如何在 ArangoDB 中复制数据库
- javascript - 如何在 Office FabricUI TagPicker 上指示大型数据集的加载/搜索?
- c# - Shell 导航底部和上部 TabBar 滚动行为
- python - 从 asyncio 子进程获取实时输出
- java - 带有 ON 子句或替代方法的休眠 LEFT JOIN FETCH