得到不正确的数学值后,Matlab代码转换为c#
本文关键字:Matlab 代码 转换 不正确 | 更新日期: 2023-09-27 18:10:46
我使用的是使用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];
}
哔哔你在用切比雪夫多项式拟合数据吗?使用傅里叶级数,你已经写出了方程并且测试了每个人都满意。方程是有界于曲线的所以你不用担心测试数据范围之外的不连续。嘿,我有个好主意…我会的
我能看到的唯一区别是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。