کلیدستان

نسخه‌ی کامل: یافتن نزدیکترین عدد در ماتریس
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام خسته نباشید
من یه سوال دارم که در زیر کامل توضیح دادم:
من این اعداد رو دارم که تعدادی از اونارو اینجا میذارم
 
0.3750    0.4059    0.45290    0.50    0.5309    0.57790    0.62390    0.639    0.67090    0.7019    0.71790    0.74890    0.7790
 
میخوام به ترتیب دادها رو بر اساس نزدیکترین به 0 به 0.1 به 0.2 به 0.3 به 0.4 و الی آخر انتخاب کنم. انقدر این کار ادامه داشته باشه تا داده ها تموم بشه. به اینصورت که در اینجا نزدیکترین عدد به 0 خود صفر هستش. نزدیکترین عدد به 0.1 هم صفر هستش. من 0 رو برای صفر انتخاب کردم پس مجبورم 0.375 رو  برای 0.1 انتخاب کنم. 0.4059 رو برای 0.2 انتخاب کنم و 0.4529 رو برای 0.3 انتخاب کنم و  0.5 رو برای 0.4 انتخاب کنم و 0.5309 رو برای 0.5 و 0.5779 رو برای 0.6 و 0.7019 رو برای 0.7 و الی آخر. ممکنه چند تعداد از این داده ها به گام هایی از این 0.1 ها نزدیک باشه.باید اولین نزدیکترین رو انتخاب کنم و اونو بذارم کنار و برم دومین نزدیکترین رو به گام بعدی انتخاب کنم.یعنی باید برم اولین عدد رو که به 0 نزدیک هست رو پیدا کنم بذارمش کنار و برم عددی رو که  به0.1 نزدیک هست رو پیدا کنم و بذارم کنارو بعد برم عددی که به 0.3 نزدیک هست رو پیدا کنم و بذارم کنار و الی آخر.فقط نباید عدد تکراری باشه

خیلی ممنون میشم کمک کنین
سلام        شما میتوانید به طریق زیر عمل کنید :   


   اعداد ورودی به صورت یک سری وارد میشوند یعنی به صورت یک ماتریس با ابعاد یک ضرب در تعداد درایه های ماتریس. حال باید تمام اعداد ماتریس رو از عدد 0 کم کنید و اعداد باقیمانده را از کوچک به بزرگ مرتب کرده و عدد اول ماتریس که کوچکترین عدد باقیمانده است و مشخص میکند که دو عدد تفریق شده از هم نزدیک هم بوده اند . برای اعداد بعدی 0.1 و ... هم به همین شکل عمل میشود. ولی سوال اینجاست وقتی کوچکترین باقیمانده را پیدا کنیم چطور به عدد موردنظر دست پیدا کنیم؟ جواب ساده است ، عددی که منهای درایه های ماتریس کردید رو بعلاوه کوچکترین باقیمانده کنید، عدد موردنظر بدست می آید.
دستور کوچکترین --------------min
تا اینجای کار برای هر عدد به طور خاص، بهترین عددی که نزدیک به آن عدد است را از ماتریس ورودی انتخاب کردیم. ولی سوال شما این است که اعدادی که نزدیک به عدد موردنظر هستند، تکراری نباشند. بنابراین وقتی نزدیکترین عدد به صفر رو انتخاب کردید ، اون عدد را در ماتریس ورودی حذف میکنید. با چه دستوری ؟ مثلا اگر ماتریس زیر رو داشته باشیم:





کد:
a=[1,2,12,4,8,6]

دستور زیر رو برای حذف درایه 12 به کار میبریم :




کد:
a(find(a==12))=[]
مثال : میخواهیم نزدیکترین عدد به 0.2 را از ماتریس ورودی زیر پیدا کنیم:




کد:
b=[0.231,0.234,0.121,3,0.54,0.1,0.53,0.123];
ابتدا ماتریس b-0.2  را میسازیم:




کد:
>> c=b-.2

کد:
c =

0.0310 0.0340 -0.0790 2.8000 0.3400 -0.1000 0.3300 -0.0770
در ادامه قدرمطلق ماتریس c را محاسبه و با دستور min ، کوچکترین عدد را محاسبه میکنیم:





کد:
d=min(abs(c))
سپس محل کوچکترین عدد در ماتریس باقیمانده را پیدا کرده و در ماتریس ورودی درایه واقع در آن محل را به عنوان نزدیکترین درایه به 0.2 انتخاب میکنیم:



کد:
f=find(d);

nazdiktain=b(f);
سپس برای مرحله بعدی که عدد دیگر را میخواهیم بررسی کنیم، نزدیکترین عدد به 0.2 را در ماتریس ورودی حذف میکنیم:





کد:
b(f)=[]