8

2 つの異なる方程式で定義された 2 つのプロットがあるとします。

x = 0:0.01:30;
y1 = x .^2 + 2;
y2 = x .^3 ;

そして、私はそれらを次のようにプロットします

plot(x, y1, x, y2);

プログラムで交点の周りに小さなリングを作成するにはどうすればよいですか (次のプロットのように)。

ここに画像の説明を入力

4

5 に答える 5

2

あなたの例では、x、y1、y2がある場合、できることは

idx = find(abs(y1 - y2) == min(abs(y1 - y2)));
xInter = x(idx)
yInter = y1(idx) % or y2(idx)

x1, y1 と x2, y2 がある場合、ここで x1 ~= x2 を使用して最初に 1D 補間を行うことができます

yy2 = interp1(x2, y2, x1);

適用する

idx = find(abs(y1 - yy2) == min(abs(y1 - yy2)));
xInter = x1(idx)
yInter = y1(idx) % or yy2(idx)
于 2014-07-29T06:25:14.340 に答える
1

@EitanTによる優れた投稿ですが、交差点を見つける別の(自動化された)方法でこれを補完したいと思います(交差点があり、グラフがうまく動作すると仮定します)。

これが私たちの出発点です:

x = 0:0.01:30;
y1 = x .^2 + 2;
y2 = x .^3 ;

まず、これらの値が正確に等しいかどうかを確認します。非浮動小数点非離散の状況では、これで十分です。

idx = find(y1==y2)

それらが完全に等しいと記録されていない場合、一方が他方を上回った場合に交差が発生するため、違いを調べます。

if isempty(idx)
  d = y1-y2;
  % At the moment of crossing, the sign will change:
  s = diff(sign(d));
  % Now just find the point where it changes
  f = find(s,1);
end

これを変数を追加せずにコンパクトな形式で要約するには、次を使用することをお勧めします。

idx = find(y1==y2)
if isempty(idx)
idx = find(diff(sign(y1-y2)),1)
end
于 2013-08-20T10:14:59.977 に答える
1

特に関数を知っている場合は、記号数学ツールボックスを使用できます。

y1 = x .^2 + 2;
y2 = x .^3 ;
syms x real
intersection=simplify(solve(y1==y2))

vpa(intersection)数値double(intersection)に変換するか、浮動小数点値に変換するために使用します。

于 2015-11-04T18:21:04.100 に答える