我正在使用一个使用TableCurve程序生成并用Matlab编写的方法。我试图将方法转换为C#以在我的项目中使用,但它返回不正确的值。我想我已经把问题缩小到一个特定的位置,原始代码是
iv=1;
for j=1:1:tcnt
for m=j:-1:1
v(iv)=tx(m)*ty(j-m+1);
iv=iv+1;
end
end
其中tx,ty和v是数字列表,iv是计数器。我已将其翻译成
n = 0;
for (int j = 1; j <= tcnt; j++)
{
for (int m = j; m >= 1; m--)
{
v[n] = tx[m - 1] * ty[j - m];
n++;
}
}
有人看到我的指数有问题吗?因为我没有做。如果我的索引没有问题,我会编辑这个问题,试着找到实际的问题区域。
修改
这是整个工作的Matlab代码(在设置变量之后)
tx(1)=1.0;
ty(1)=1.0;
tx(2)=x;
ty(2)=y;
for j=2:1:tcnt-1
tx(j+1)=2*x*tx(j)-tx(j-1);
ty(j+1)=2*y*ty(j)-ty(j-1);
end
iv=1;
for j=1:1:tcnt
for m=j:-1:1
v(iv)=tx(m)*ty(j-m+1);
iv=iv+1;
end
end
z=0.0;
for j=1:1:order+1
z = z + p(j)*v(j);
end
这是我的C#代码
tx[0] = 1.0;
ty[0] = 1.0;
tx[1] = x;
ty[1] = y;
for (int j = 2; j <= tcnt; j++)
{
tx[j] = 2 * x * tx[j - 1] - tx[j - 2];
ty[j] = 2 * y * ty[j - 1] - ty[j - 2];
}
n = 0;
for (int j = 1; j < tcnt; ++j)
{
for (int m = j; m >= 1; --m)
{
v[n] = tx[m] * ty[j - m + 1];
n++;
}
}
z = 0.0;
for (int j = 0; j <= order; j++)
{
z += constantList[j] * v[j];
}
答案 0 :(得分:0)
我能看到的唯一区别是matlab索引从1开始,而c#索引从0开始,所以以下内容应该是等价的:
iv=1;
for (int j = 1; j < tcnt; ++j) {
for (int m = j; m >= 1; --m) {
v[iv-1] = tx[m] * ty[j-m+1];
iv++;
}
}
此外,第一个matlab循环从2运行到tcnt - 1,而C#版本从2运行到tcnt。
答案 1 :(得分:0)
哔哔你用Chebyshev多项式拟合数据是什么?使用傅立叶级数,你已经写出了方程式并测试了每个人的满意度。并且该等式与曲线有界,因此您不必担心在测试数据范围之外的不连续性。嘿,我有个好主意......我会这样做。