1

2つのサーフェスとxy平面の交点をグラフィカルに見つけようとしています。(サーフェスz1とxy平面の交差および交差z2とxy平面の交差)

メッシュグリッドを使用して、サーフェスz1 = 3 + x+yおよびz2=4-2x-4y、およびxy平面のz3を表す配列を作成しました。どこを見ても、配列間の交差を見つけるために使用できると思われるコマンドは、intersect(A、B)コマンドだけです。ここで、AとBは配列です。ただし、intersect(z1、z3)と入力すると、「AとBはベクトルであるか、「行」を指定する必要があります」というエラーが発生します。交差(z1、z2、'rows')を試みると、0行21列の空行列が返されます。私はここで何が間違っているのですか?

私のコード:

x = -10:10;
y = -10:10;
[X,Y] = meshgrid(x,y);
z1 = 3+X+Y;
z2 = 4-2.*X-4.*Y;
z3 = 0.*X+0.*Y;         %x-y plane
surf(X,Y,z1)
hold on
surf(X,Y,z2)
surf(X,Y,z3)
int1 = intersect(z1,z3,'rows');
int2 = intersect(z2,z3,'rows');
4

2 に答える 2

3

z1 = z2 のポイントが必要なようです。これらを数値的に見つけるには、いくつかのオプションがあります。

1) 数値根探索:fsolve連立方程式を解くことができます。面を 1 つのベクトルの関数として定式化し[x;y]、2 つの面を等しくするベクトルを解くことができます。初期推定 x=1, y=1 を使用した例は次のとおりです。

z1 = @(x) 3 + x(1) + x(2);
z2 = @(x) 4 - 2*x(1) - 4*x(2);
f = @(x) z1(x) - z2(x);

x0 = [1;1]
intersect = fsolve(@(x) f(x), x0);

2) エラーの最小化: 個別のデータ (関数ではなく配列) に行き詰まっている場合は、z1 - z2 がゼロに最も近い点を簡単に見つけることができます。簡単な出発点は、配列 Z1 と Z2 を取得し、差がゼロに近づくすべての点を見つけることです。

tol = 1e-3;
near_zero = abs(Z1 - Z2) < tol;

near_zeroは、Z1 と Z2 の差が に対して小さい場合は常に true となる論理配列になりtolます。これを使用して、X と Y の対応するmeshgrid配列にインデックスを付け、交点の座標を見つけることができます。

于 2012-10-25T03:09:57.427 に答える
0

これを解決する簡単な方法 (主要な関数呼び出しなし) は次のとおりです。

x = -10:.1:10;
y = -10:.1:10;
[X,Y] = meshgrid(x,y);
z1 = 3+X+Y;
z2 = 4-2.*X-4.*Y;
z3 = z1 - z2;
[~,mn] = min(abs(z3));

交点は として定義され(x, y(mn))ます。

もちろん、これは数値近似です(数値法が必要なため)、私が調査していない境界条件に従います(最小関数を実行するときは、ゼロから遠い値を無視する必要があります)

注: 方程式を探している場合は、結果のデータに対して最小二乗近似を実行することを検討してください。

于 2012-10-25T13:44:10.850 に答える