0

実数値パラメーターとして与えられt1,t2,t3,t4 、次の形式の制約があります。

(t1>=0 and t2>=0 and t3>=0 and t4>=0) 

((t2<=5) or (t1+t2+t3+t4<=3))

この制約は、matlab の .net ライブラリを使用してプロットできますか? (私はC#を使用しています)。

私の懸念は次のとおりです。1.これには4つの次元があります。Matlabでグラフをどのように表現できるかわかりません。2.基本的に、この制約は凸多角形になる可能性がありますが、そのような多角形はMatlabで描画できますか?

私はMatlabでまったく新しいので、これが可能であれば、いくつかのコードフラグメントとその結果は私にとって非常に役立ちます. ありがとう。

4

1 に答える 1

3

私は C# に慣れていないので、Matlab 側しか解決できませんが、Matlab .NET コンパイラはすべての関数をエクスポートできるはずだと思いますか?

1: アニメーション化された 3D 散布図 (およびサーフェス、メッシュ、ライン プロットなどのバリアント) を使用して、4 次元データをプロットできます。考えてみれば、平均的な 3D ビデオ ゲームは基本的に 4D プロットです。散布図の場合、0 秒から開始して、t4 = 0、x=t1、y=t2、z=t3 の点のみを描画します。1 秒で、t4=1 のものだけをプロットします。2 秒では、t4=2 のみというように、max(t4) に到達してループバックするまで続きます。

色を 4 次元として使用して、3D 空間に色付きの点を配置​​することもできます。

他のプロットに一般化できるポイントから、私は思います。

http://www.mathworks.com/help/techdoc/ref/scatter3.htmlおよびhttp://www.mathworks.com/help/techdoc/ref/surf.htmlを参照してください。

2: いくつかのことを明確にさせてください。座標が負になることはできないという初期条件を考えると、次のようになります。

  • t2<=5は、無限の 4 次元空間の「スラブ」を定義します。これは、3 次元では無限であり、1 次元では有限です (5 単位の厚さです)。スラブの 1 つのエッジは原点と の間にあり、原点に接続する他の 3 つのエッジは、軸と軸<0, 5, 0, 0>に沿って正の方向に無限に伸びます。t1t3t4
  • t1+t2+t3+t4<=3頂点を原点に、底部をその<+, +, +, +>方向に向けた有限の 4 次元ピラミッドを定義します。

を指定するORと、結果はこれら 2 つのスペースの結合になります。(ハイパー) ピラミッドは既に (ハイパー) スラブのサブセットであるため、2 番目の式は冗長です。スラブは些細なことなので、ピラミッドだけを視覚化する方法を示します。

それを視覚化するには、たとえば t4 を 10 個の異なる値に設定し、他の 3 つのパラメーターをそれぞれ異なる色の面としてプロットする必要があると思います。

例:

clc
clear
close all

n = 10;

% Manually calculated maximae of x, y, z axes
x = [0 0; 0 3];
y = [0 0; 3 0];
z = [3 3; 0 0];   % surf can only draw polygons, not triangles, so we just squash two points together

% Actual t will be derived from this algorithmically
t = [3 3; 3 3];

% So plots don't replace each other
hold on

for i = 0:0.1:1
    % Manually derived
    surf(x*i, y*i, z*i, t*(1-i));
end
hold off

% Just some aesthetic stuff
xlabel('t1'); 
ylabel('t2'); 
zlabel('t3');
grid on
colormap('hot')

ここに画像の説明を入力

各色は、異なる t4 のピラミッドの底面 (先端が原点) です。時間の経過とともに 3D ピラミッドが「縮小」することを想像するかもしれません。

関連性はわかりませんが、Matlab では凸多角形は完全に問題ありません。

plot([0 0 1 1 2 2 3 3 0], [0 2 2 1 1 2 2 0 0]); axis([-1 4 -1 4])
于 2012-09-01T03:25:37.433 に答える