在 MATLAB 中学习 OOP - 使用哪种方法/函数/例程来构造特定于问题的向量?

问题描述 投票:0回答:1

我正在 MATLAB 中开发一个项目,该项目本质上是一个线性系统求解器,用于解决具有大量参数的物理问题,这是我第一次尝试 OOP。之前,我有很多 MATLAB 脚本,其中有很多非常相似的代码,所以我认为这将是学习 OOP 的一个很好的例子。

我有一个类,其属性包含物理问题中可能存在的所有参数(但不一定需要所有参数),以及我想用来解决它的线性系统的大小。我有两个相关属性,分别表示矩阵 A 和右侧向量 B。求解 Ax = B 是应用程序的全部要点。

我现在正在尝试编写一个 get 方法来确定 B。我的问题是,这不遵循通常可以用类属性来表达的公式。 (可以,但每个问题的方式不同。我的意思是,对于一个问题可以有像 B(n) = obj.parameter1*obj.parameter2 这样的依赖关系,而对于另一个问题可以有 B(n) = 3* obj.参数(1)*obj.参数2)

我想知道上面是否表明必须在类之外定义 B ?如果是这样,我怎样才能避免陷入与以前相同的情况,有很多类似的脚本定义 B?

跨问题始终一致的一件事是 B 的代数定义如下:

nj = -10:10 % array of integers from -10 to 10
for m=1:length(nj)
    if nj(m) == 0
        B(m) = % (function)
    else
        B(m) = % (another function, dependent on m)
    end
end

我希望这是有道理的。感谢您帮助这个无知的数学家。

matlab oop numerical-methods
1个回答
0
投票

这就是我在评论中提出的建议:

classdef MySolver
    properties 
        parameter
        Bform double {mustBeMember(Bform,[1,2])} = 1
        B
    end

    methods
        function B = get.B(obj)
            % Calculates B according to the specific form
            switch obj.Bform
                case 1
                    B = obj.parameter(1)*obj.parameter(2);
                case 2
                    B = 3*obj.parameter(1)*obj.parameter(2);
            end
        end
    end
end

当然,您可以在属性的文档字符串中包含 B 的不同形式的描述、对“参数”的检查等。

© www.soinside.com 2019 - 2024. All rights reserved.