0

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 の両方を実行するにはどうすればよいですか? (代入演算子「=」を使用できなくても問題ありません。他のメソッドを呼び出さなければならない場合でも問題ありません)。

4

1 に答える 1

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
于 2015-11-09T18:04:50.397 に答える