سؤال

صادفت حل بائع السفر الذي يستخدم برنامج MATLAB Script ، وفي الكود الخاص به ، وجدت أنه يستخدم تمثيلًا يسمى City Coordinates ، والذي يشبه:

CityCood = [0.4000,0.2439,0.1707,0.2239,0.5171;0.4439,0.1463,0.2293,0.7610,0.9414]

لمدة 5 مدن.

في هذه المرحلة ، أنا جاهل حقًا كيف حصل المؤلف على هذا التمثيل ، لأنه من ما رأيته حتى الآن ، يجب أن تكون المعلومات الموجودة في متناول اليد عبارة عن مصفوفة متماثلة 5*5 التي تمثل المسافة بين أي من هذه المدن الخمس.

لذلك سأكون ممتنًا إذا كان بإمكان أي شخص أن يعطيني فكرة عن كيفية عمل هذا التمثيل القائم على الإحداثيات. شكرا مقدما.

هل كانت مفيدة؟

المحلول

CityCoord (أعتقد أن هناك خطابًا مفقودًا) عبارة عن صفيف 2 × 5. أفترض أن هذا يعني ذلكCityCoord يحتوي على إحداثيين (x ، y) لكل مدينة واحدة.

لإنشاء مصفوفة مسافة 5 × 5 ، يمكنك الاتصال

squareform(pdist(CityCoord'))

نصائح أخرى

إذا لم يكن لديك صندوق أدوات الإحصائيات ، فإن نموذجًا مكافئًا للحل الذي يوفره @jonas لحساب المسافة الإقليدية هو:

%# dist(u,v) = norm(u-v) = sqrt(sum((u-v).^2))
D = cell2mat( arrayfun( ...
    @(i) sqrt( sum( bsxfun(@minus, CityCoord, CityCoord(:,i)).^2 ) ), ...
    (1:size(CityCood,2))', ...
    'UniformOutput',false) );

خلاف ذلك ، يمكننا استخدام حقيقة أن ||u-v||^2 = ||u||^2 + ||v||^2 - 2*u.v لتنفيذ رمز متجه أسرع:

X = sum(CityCoord.^2);
D = real( sqrt(bsxfun(@plus,X,X')-2*(CityCoord'*CityCoord)) );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top