Afficher commentaires plus anciens
点(a, b)とn次関数の式が与えられているとき、両者の最短距離を求める方法を教えてください。
Réponses (1)
Haruki SHIMOTORI
le 9 Déc 2020
厳密解ではありませんが、以下のスクリプトで最小距離に近い値は計算できました。
計算の流れですが、まずn次関数を
として、十分に細かい離散的なxに対するyを計算します。次に、任意の点
と先ほど求めた
それぞれとのユークリッド距離を
関数で計算します。最後に、ユークリッド距離の最小値を
関数で求めます。
として、十分に細かい離散的なxに対するyを計算します。次に、任意の点
関数で計算します。最後に、ユークリッド距離の最小値をclf
x = (-2 : 0.001 : 2)'; % 十分に細かい x のベクトルを定義
y = x.^3 -2 * x; % n次関数を定義
point = [1, 1]; % 任意の点(a, b)を定義
func = [x, y]; % n次関数のxとyの行列
distances = pdist2(func, point); % n次関数の各点と任意の点とのユークリッド距離を計算
min_distance = min(distances); % 最小値を計算
% 以下は可視化処理のため直接関係ありません
hold on
axis equal
plot(x, y, 'b')
scatter(point(1), point(2), '.')
for k = 1:length(x)-1
g = plot([x(k), point(1)], [y(k+1), point(2)], 'g--');
t = text(point(1), point(2), num2str(distances(k)), 'FontSize',10);
drawnow limitrate
if distances(k) <= min_distance % 最小値になったらアニメーションをストップ
break
end
delete(g);
delete(t);
end
以下の画像は可視化の結果です。
と点
との最小距離は
となりました。
と点
となりました。
Catégories
En savoir plus sur Networks dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!