करने के लिए को आसान बनाने में, मैं विचार एक उत्पादन, दो इनपुट uniquetol
की संस्करण,
C = uniquetol(A, tol);
जहां पहले इनपुट एक double
वेक्टरA
है। विशेष रूप से, यह संकेत मिलता है कि:
uniquetol
की 'ByRows'
विकल्प नहीं किया जाता है।
- पहला इनपुट एक वेक्टर है। यदि यह नहीं था,
uniquetol
सामान्य रूप से कॉलम पर निहित रूप से रैखिक होगा।
दूसरे इनपुट, जो सहिष्णुता को परिभाषित करता है, as follows व्याख्या की है:
दो मूल्यों, u
और v
, सहिष्णुता के भीतर हैं, तो abs(u-v) <= tol*max(abs(A(:)))
है, निर्दिष्ट सहिष्णुता रिश्तेदार है डिफ़ॉल्ट रूप से। तुलना में उपयोग की जाने वाली वास्तविक सहिष्णुता स्केलिंग A
में अधिकतम पूर्ण मूल्य से प्राप्त की जाती है।
इन विचारों के साथ, ऐसा लगता है कि दृष्टिकोण कि uniquetol
का उपयोग करता है:
- क्रमबद्ध
A
।
- क्रमबद्ध
A
की पहली प्रविष्टि चुनें, और इसे संदर्भ मान के रूप में सेट करें (यह मान बाद में अपडेट किया जाना होगा)।
- आउटपुट
C
में संदर्भ मान लिखें।
- क्रमबद्ध
A
की अनुवर्ती प्रविष्टियों को छोड़ दें जब तक कोई ऐसा नहीं पाया जाता है जो संदर्भ मान की सहिष्णुता के भीतर नहीं है। जब कि प्रवेश पाया जाता है, नया संदर्भ मूल्य के रूप में यह लेने के लिए और 3.
बेशक
कदम के लिए वापस जाओ, मैं यह नहीं कह रहा हूँ कि यह क्या uniquetol
आंतरिक करता है। लेकिन आउटपुट समान प्रतीत होता है। तो यह कार्यात्मक रूप सेuniquetol
के बराबर है। (अक्षम कोड, बिंदु सिर्फ वर्णन करने के लिए)
कोड निम्नलिखित शायद स्पष्ट है
% Inputs A, tol
% Output C
tol_scaled = tol*max(abs(A(:))); % scale tolerance
C = []; % initiallize output. Will be extended
ref = NaN; % initiallize reference value to NaN. This will immediately cause
% A(1) to become the new reference
for a = sort(A(:)).';
if ~(a-ref <= tol_scaled)
ref = a;
C(end+1) = ref;
end
end
करने के लिए इस की पुष्टि, चलो कुछ यादृच्छिक डेटा उत्पन्न करते हैं और uniquetol
के उत्पादन की तुलना और इसके बाद के संस्करण की कोड:
clear
N = 1e3; % number of realizations
S = 1e5; % maximum input size
for n = 1:N;
% Generate inputs:
s = randi(S); % input size
A = (2*rand(1,S)-1)/rand; % random input of length S; positive and
% negative values; random scaling
tol = .1*rand; % random tolerance (relative). Change value .1 as desired
% Compute output:
tol_scaled = tol*max(abs(A(:))); % scale tolerance
C = []; % initiallize output. Will be extended
ref = NaN; % initiallize reference value to NaN. This will immediately cause
% A(1) to become the new reference
for a = sort(A(:)).';
if ~(a-ref <= tol_scaled)
ref = a;
C(end+1) = ref;
end
end
% Check if output is equal to that of uniquetol:
assert(isequal(C, uniquetol(A, tol)))
end
मेरे सभी परीक्षणों में यह असफलता के बिना चला गया है।
तो, सारांश में, uniquetol
इनपुट सॉर्ट करने के लिए, अपनी पहली प्रविष्टि लेने लगता है, और रखें जब तक कि यह कर सकते हैं के लिए लंघन प्रविष्टियों।
प्रश्न में दो उदाहरणों के लिए, आउटपुट निम्नानुसार हैं। ध्यान दें कि दूसरे इनपुट 2.5/9
के रूप में निर्दिष्ट किया जाता है, जहां 9
पहला इनपुट की अधिकतम है, 2.5
की एक निरपेक्ष सहिष्णुता प्राप्त करने के लिए:
>> uniquetol([1 3 5 7 9], 2.5/9)
ans =
1 5 9
>> uniquetol([3 5 7 9], 2.5/9)
ans =
3 7
क्यों 'रिवर्स engineering' टैग? – arrowd
@arrowd क्योंकि वह फ्यूशन –
@arrowd ईमानदार होने के लिए उलटा हुआ है, मुझे पूरा यकीन नहीं है कि यह यहां लागू होता है। मुझे लगता है कि यह करता है, जैसा कि वर्णन कहता है _Reverse इंजीनियरिंग मानव के तकनीकी सिद्धांतों की खोज करने की प्रक्रिया है [...] ऑब्जेक्ट या सिस्टम [...] फ़ंक्शन और ऑपरेशन._ –