gpt4 book ai didi

将 matlab 函数转换为 C

转载 作者:行者123 更新时间:2023-11-30 21:24:18 25 4
gpt4 key购买 nike

这是一个Matlab函数,我正在尝试用C重写它。输入x1是一个3维数组,hx、hy、hz只是数字。我遇到的问题是准确理解 3D 数组的元素是如何分配的。最后一行是如何工作的?

function Ax = D_XX_YY_ZZ(x1,hx,hy,hz)

[mx1, my1, mz1]=size(x1);

Ax = (x1(1:mx1-2,2:my1-1,2:mz1-1)+ ...
+x1(3:mx1,2:my1-1,2:mz1-1) )/(hx^2) + ...
(x1(2:mx1-1,1:my1-2,2:mz1-1)+ ...
+x1(2:mx1-1,3:my1,2:mz1-1) )/(hy^2) + ...
(x1(2:mx1-1,2:my1-1,1:mz1-2)+ ...
+x1(2:mx1-1,2:my1-1,3:mz1) )/(hz^2) ;

最佳答案

假设您有一个 matlab 矩阵 A。

 A(1:end) = 3;

这将从 A(1) 到 A(end) 的所有元素设置为 3。同样,如果您有

 B = A(5:8)

然后 B 将包含元素 A(5)、A(6)、A(7) 和 A(8)。

所以代码如果代码是

 Ax = x1(3:mx1,2:my1-1,2:mz1-1) )/(hx^2)

可以写成:

 for (int i = 3; i <= mx1; i++)
for(int j = 2; j <= my1-1; j++)
for(int k = 2; k <= mz1-1; k++)
Ax[i-3][j-2][k-2] = pow(x1[j][i][k], 2);

如果我没记错的话,matlab是列在前,c是行在前,这就是为什么它是x1[j][i]...而不是x1[i][j],但我可能记错了,所以你可能希望确认一下。

另请注意,这会影响数组在内存中的存储方式,因此如果您关心代码的效率,则应该考虑到这一点。这个wikipedia article解释了在 c 中数组如何以行优先方式存储,以及在 matlab 中如何以列优先方式存储。基本上,访问内存中彼此更接近的元素会更快,因为您必须写入缓存更少。

更多信息:What is "cache-friendly" code? .

关于将 matlab 函数转换为 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38214696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com