我正在 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
我希望这是有道理的。感谢您帮助这个无知的数学家。
这就是我在评论中提出的建议:
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 的不同形式的描述、对“参数”的检查等。