我正在尝试使用 Matlab 进行一个有趣的实验。这里的目标是用一个简单的二元模型来模拟一对量子纠缠粒子(“未知”或“叠加”状态暂时被忽略)。这不是在寻找物理建议,我知道这是对量子比特的过度简化。我想对粒子的一个特定方面/过程进行建模。
被建模的过程是这样的:每当你试图“读取”粒子的状态时,你也改变了粒子的状态。在这种情况下,我只对两个纯状态 0 和 1 进行建模。这导致了一个有趣的编程问题,在不破坏传统编程智慧的情况下,我无法找到一种建模方法,或者根本没有。这是我第一次尝试的来源:
classdef qparticle
%qparticle class
% models spin state of one of two particles in a quantum entangled pair
properties
observed_spin_state;
end
properties (Hidden = true)
spinstate = [];
end
methods
function obj = qparticle(initspin)
if islogical(initspin)
obj.spinstate = initspin;
else
obj.spinstate = NaN;
end
end
function value = get.observed_spin_state(obj)
%Getting spin state changes spinstate
obj.spinstate = ~obj.spinstate;
value = obj.spinstate;
end
%% set.spinstate should be private, only callable by getspinstate
function obj = set.spinstate(obj, value)
if islogical(value)
obj.spinstate = value;
else
obj.spinstate = NaN;
end
end
end
end
我有一个总体类qpair
,它将确保其中的两个qparticle
s 始终处于相反的状态,但该代码不是必需的。
我想我明白这里发生了什么,当我调用 getter 时,对象是“按值”传递的——它的副本将传递给 getter,所以当我发表声明时obj.spinstate = ~obj.spinstate
,obj 的本地副本是修改,但它不会传回调用该函数的 obj,因此位的翻转不会回到父对象。
如果我使用 setter、句柄类或其他返回对象本身的函数,那么我无法将实际值返回给调用函数(我认为)。
我怎样才能在对象中有一个方法基本上同时执行 set/get?(如果我不能使用赋值运算符'='也可以,如果它必须调用其他方法也可以)。