2

我有一个名为 class_geometry 的类,它保存网格中每个单元格的几何量。这些数量中的一个是单元格四个角中每个角的 x 位置。然后我初始化这些类对象的数组(不确定我的术语是否正确)。我的问题是我不知道如何在我的类 def 中初始化一个数组。这是我的课:

classdef class_geometry
    properties
        dx1;
        dx2;
        dx3;
        dx4;
    end
end

我希望只有 dx 包含四个不同的值:

classdef class_geometry
    properties
        dx;
    end
end

所以最后我可以做这样的事情:

for i = 1:IL+1
    for j = 1:JL+1
        cell(i,j).dx(1) = x_grid(i+1,j)   - x_grid(i,j);
        cell(i,j).dx(2) = x_grid(i+1,j+1) - x_grid(i+1,j);
        cell(i,j).dx(3) = x_grid(i,j+1)   - x_grid(i+1,j+1);
        cell(i,j).dx(4) = x_grid(i,j)     - x_grid(i,j+1);
    end
end

谢谢您的帮助。

4

1 回答 1

1

如果问题是在类中初始化一个数组,则必须定义一个构造函数。初始化对象时调用构造函数,旨在为对象成员分配内存。

这是您如何初始化和清空数组的方法dx

   classdef class_geometry
       methods

         function obj = class_geometry()   //Constructor function
             obj.dx = zeros(1,4);   //because you had 4 entries
             ...

         end

        end
        .....
   end

此外,如果要初始化dx构造函数中包含的值,则必须将当前网格单元的索引/索引传递给它

       function obj = class_geometry(i,j)   //Constructor function, 2nd version
                                            //i,j indices of the cell
             obj.dx = zeros(1,4);   //because you had 4 entries
              dx(1) = x_grid(i+1,j)   - x_grid(i,j);
              dx(2) = x_grid(i+1,j+1) - x_grid(i+1,j);
              dx(3) = x_grid(i,j+1)   - x_grid(i+1,j+1);
              dx(4) = x_grid(i,j)     - x_grid(i,j+1);

       end

现在,您可以将单元格初始化为

      cell(i,j) = class_geometry(i,j); //forall i,j.

相反,如果问题是对象数组的初始化,您可能需要考虑这个参考


最后,我的猜测是您正在尝试的矢量化是次优的。

因为你在矩阵中有你的网格,所以x_grid像(对于第一种情况)这样的矢量化

  dx_1 = diff(x_grid,1,1); //computes x_grid(i+1,j) - x_grid(i,j); 
                           //forall i,j producing the difference matrix

会更有效率。它会为你节省很多外部周期(在课堂上)。

于 2012-11-12T13:04:46.843 回答