我正在尝试使用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
始终处于相反状态,但该代码不是必需的。
我想我明白这里发生了什么,当我调用getter时,对象正在“按值”传递 - 它的副本将转到getter,所以当我发出语句时{{1} },obj的本地副本被修改,但它不会传递回调用该函数的obj,因此该位的翻转不会返回到父对象。
如果我使用setter,一个句柄类或其他返回对象本身的函数,那么我无法将实际值返回给调用函数(我认为)。
如何在对象中使用单个方法基本上执行set / get? (如果我无法使用赋值运算符'=',则可以,如果必须调用其他方法,则可以。)
答案 0 :(得分:0)
我已经弄清楚了。使用句柄类,我可以传递一个值并引用原始对象。
classdef qparticle < handle
%qparticle class
% models spin state of one of two particles in a quantum entangled pair
properties
observed_spin_state;
end
properties (Hidden = true, Access = private)
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 [] = set.spinstate(obj, value)
if islogical(value)
obj.spinstate = value;
else
obj.spinstate = NaN;
end
end
end
end