1

開始点(X,Y)と開始方向(V1,V2) があります。また、2つの特定の曲線があります

g1: 2*x - (y)^2 - 1 = 0;
g2: 9 - 0.8*(x)^2 - 2*y = 0;

(X,Y)(V1,V2)が与えられた場合 (または固定R距離内でまったく発生しない場合) 、最初の交差がどこで発生するかを知る必要があります。

それを行う最も簡単な方法は何ですか?どの標準的な MatLab メソッドを考慮する必要がありますか?


たとえば、(X,Y)=(0,0)および(V1,V2)=(1,1)です。最初の交点は(1,1)で発生し、 g1曲線のポイントです。

交差点

4

3 に答える 3

1

2 つの曲線の交点を見つけるには:

g1 と g2 を明示的な無名関数として宣言する

g1 = @(x)(sqrt(2*x - 1));
g2 = @(x)(-0.4*x.^2 + 4.5);

テストする x の範囲を選択します。

xmin = 0;
xmax = 100;
xres = 0.1;
x = xmin:xres:xmax;

曲線で見つける

G1 = g1(x);
G2 = g2(x);

次に、グラフが互いに交差するインデックスを見つけます。

ind = find(diff(G1 > G2));

そのインデックスをx値に変換するのは簡単です。

xval = xmin + (ind(1)-1)*xres

編集:

だから私はあなたの (V1,V2) が原点からの単なる単位方向ベクトルであると仮定していますか? その場合、直線 y = mx+c を作成し、g1 と g2 が交差する場所を見つけることができます。

m = V2/V1;
c = Y - m*X;
line = @(x)(m*x + c);

line上記の手順に従って、と ととg1の交点を見つけます。V1 が負の場合は、交点を右方向に探すように設定します。交点がない場合、線はおそらくエラーになるため、そこにエラー チェックを追加します。そして、V1 が正の場合は最小の xval を選択し、V1 が負の場合は大きい方を選択します。lineg2xmax = Xxmin = Xxval

if V1 >= 0
    xmin = X;
    xmax = X + 100;
else
    xmin = X - 100;
    xmax = X; 
end;

xres = 0.1;
x = xmin:xres:xmax;

G1 = g1(x);
G2 = g2(x);
L = line(x);
ind1 = find(diff(G1 > L));
xval1 = xmin + (ind1(1)-1)*xres
ind2 = find(diff(G2 > L));
xval2 = xmin + (ind2(1)-1)*xres

xval = (V1 > 0)*max(xval1, xval2) + (V2 < 0)*max(xval1, xval2);
yval = line(xval);
于 2013-04-29T15:12:14.327 に答える
0

私はこのようにしますが、現在テストすることはできません:

編集3

ここで、質問を正しい方法で解釈する必要がありました。したがって、次のように進めます。

f1 = @(x) x - (sqrt( 2.*x - 1 ));
f2 = @(x) x - (4.5 - 0.4.*(x).^2);
x1 = fsolve(f1,x01)
x2 = fsolve(f2,x02)

これにより、期待される結果が得られるはずです。

x1 = 1;
x2 = 2.3295;

または、代わりに、シンボリック アプローチに従うこともできます。

syms x;
x1 = double(solve(x - sqrt(2*x - 1)));
x2 = double(solve(x - (4.5 - 0.4*x^2)));
于 2013-04-29T15:55:12.247 に答える