Matlabを使って面白い実験を試みています。ここでの目標は、量子もつれ粒子のペアを単純なバイナリ モデルでモデル化することです (「未知」または「重ね合わせ」状態は、今のところ無視されます)。これは物理学のアドバイスを求めているわけではありません。これは量子ビットの大幅な単純化であることはわかっています。粒子の特定の側面/プロセスをモデル化したいと考えています。
モデル化されているプロセスは次のとおりです。粒子の状態を「読み取ろう」とすると、粒子の状態も変更されます。この場合、0 と 1 の 2 つの純粋な状態のみをモデル化しています。これは、従来のプログラミングの知恵を壊さずにこれをモデル化する方法が見つからないという興味深いプログラミングの問題につながります。これが私の最初の試みのソースです:
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
その中の 2 つの s が常に反対の状態にqpair
あることを保証する包括的なクラスがありますが、そのコードはこれには必要ありません。qparticle
ここで何が起こっているのか理解していると思います。ゲッターを呼び出すと、オブジェクトは「値によって」渡されます-そのコピーがゲッターに渡されるため、ステートメントを作成するとobj.spinstate = ~obj.spinstate
、objのローカルコピーは変更されますが、関数を呼び出した obj には戻されないため、ビットの反転は親オブジェクトには戻りません。
オブジェクト自体を返すセッター、ハンドル クラス、またはその他の関数を使用すると、実際の値を呼び出し元の関数に返す方法がありません (と思います)。
オブジェクト内の 1 つのメソッドで基本的に set/get の両方を実行するにはどうすればよいですか? (代入演算子「=」を使用できなくても問題ありません。他のメソッドを呼び出さなければならない場合でも問題ありません)。