13

Google や MATLAB のドキュメントを使用するのは非常に難しく、数時間費やしましたが、方法を学ぶことができません。

x = 1
y = x
x = 10
y

ans = 10

代わりに何が起こるか:

x = 1
y = x
x = 10
y

ans = 1

x の値は y に格納されます。しかし、y の値を x に等しくなるように動的に更新したいと考えています。

これを行うにはどのような操作を使用しますか?

ありがとうございます。

4

4 に答える 4

17

Matlab は 99% 値渡し環境であり、これはあなたが今実証したものです。参照渡しである 1% はハンドルであり、ハンドル グラフィックス (ここでは関係ありません) またはハンドル クラスのいずれかであり、必要なものにかなり近いものです。

説明したことを実行するためにハンドル クラスを使用するには、以下をファイル呼び出しに入れますRefValue

classdef RefValue < handle
    properties
        data = [];
    end
end

これにより、「データ」と呼ばれる単一のプロパティを持つ「ハンドル」クラスが作成されます。

今すぐ試すことができます:

x = RefValue;
x.data = 1;
y = x;
x.data = 10;
disp(y.data)   %Displays 10.
于 2013-02-10T01:35:40.180 に答える
8

次のいずれかを試すことができます。

x=10;
y='x'
y

y = 
    x

eval(y)
x =
    10
于 2013-02-10T01:26:07.153 に答える
5

x関数 on を定義しyてそれを参照することで、暗黙のハンドル on を定義することもできます。

x = 1;
y = @(x) x;
y(x) % displays 1
x = 10;
y(x) % displays 10
于 2013-02-10T21:34:20.673 に答える
1

MATLABでは、これは不可能です。ただし、同様の動作を実現する方法はたくさんあります。たとえば、配列a = [1, 5, 3, 1]を作成し、それをxとでインデックス付けすることができますy。の場合、、x = 2を割り当てることができます。変更したら、、。a(x) = 7y = xa(x) = 4a(y) == 4

したがって、インデックス付けは参照をエミュレートするための最速の方法かもしれませんが、洗練されたソリューションが必要な場合は、@natanが指摘するようにシンボリック変数を調べることができます。これから理解することが重要なのは、MATLABにはポインターがないということです。

于 2013-02-10T01:28:28.593 に答える