برونسپاری
آموزش آنلاین
کسب درآمد
×
افزایش شانس استخدام

چالش کد متلب

۱۰ روز پیش
بودجه
از
۲۰۰,۰۰۰ تومان
تا
۳۰۰,۰۰۰ تومان
زمان پیشنهادی
۱ روز
(۲)
کرمان
وضعیت
منتشر شده
ثبت پیشنهاد روی پروژه
ثبت پروژه مشابه
سلام یک سوال متلب دارم. کسی بتونه کمک من این مسئله رو حل کنه دوست دارم بلند مدت باهاش کار کنم. من یک ماتریس دارم به اسم newarr با اعداد مختلف مثلا 100 عدد یا 10 عدد. هرچی خلاصه ولی هر عدد یک گنجایش خاص داره مثلا گنجایش عدد 2 به مقدارم 0.5 هست. که میشه همون آرایه متناظر WofP توی کد من. حالا یه ظرف دارم به اسم Sum_WofA که باید موجودیش هرچی هست به صورت مساوی بین اعداد newarr تقسیم بشه اما یه قانون خیلی مهم داره این تقسیم مساوری: اونم اینکه متناسب با تکرار شون میگیرن، یعنی مثلا اگر توی newarr عدد شماره 5 یک بار تکرار شده و عدد 2، 10 مرتبه تکرار شده یعنی عدد 2 ده برابر میگیره نسبت به 5. البته اگر بتونه دیگه قاعدتا چون ممکنه گنجایش عدد 2 اصلا اونقد نباشه و هیچ عددی نمیتونه بیشتر از گنجایشش بگیره. حالا من برای اینکه این داستان و مشکل رو حل کنم یه تریک زدم و اونم اینکه Sum_WofA رو تقسیم بری میانگین repeatability کردم که توی کد من counts اسمش. بعدش هم WofP رو تقسیم بر counts کردم. بعدش اونم Sum_WofA جدید رو به صورت مساوی بین نقاط تقسیم کردم و بعدش WofP ضرب کردم در counts اما یه ارور خیلی کوچیک کارم داره و نمیدونم چیه! کسی میتونه حل کنه ممنون میشم و انشالله همکاری بلند مدت خواهیم داشت. هزینه درخواستی رو بفرمایید کد: clear; clc; close all; % Generate Random Numbers numPoints=10; newarr(:,1) = randi([1, 5], numPoints, 1); Sum_WofA = 0.5; WofP = rand(numPoints, 1); WofP = WofP/sum(WofP); % Get unique points and their occurrence counts [uniquePoints, ~, idx] = unique(newarr); counts = accumarray(idx, 1); disp('Unique numbers in newarr and their occurrence counts:'); for i = 1:length(uniquePoints) fprintf('Number: %d, Count: %d\n', uniquePoints(i), counts(i)); end % store Weight of point in WofP_new to work with WofP_new WofP_new = WofP; %Scale down the agent weight Sum_WofA_average = Sum_WofA/mean(counts); % Scale down the sample points based on the repeatability for cnt_u = 1:length(uniquePoints) WofP_new(uniquePoints(cnt_u)) = WofP(uniquePoints(cnt_u)) / counts(cnt_u); end WofP_new_initial = WofP_new; size_g_0_in = length(uniquePoints); %order them from the minimum to maximum [minarray_in, Index_min_in] = sort(WofP_new(uniquePoints)); %Define some parameters Criterion_in = 0; PrevWgt_in = 0; % Sum_WofA_average should distribute equally between sample points for count_s=1:length(uniquePoints) CurWgt_in = minarray_in(count_s); if Sum_WofA_average >= Criterion_in+((size_g_0_in - count_s + 1) * (CurWgt_in-PrevWgt_in)) Criterion_in=Criterion_in+((size_g_0_in -count_s + 1) * (CurWgt_in-PrevWgt_in)); PrevWgt_in = CurWgt_in; else break; end end WofP_new(uniquePoints) = WofP_new(uniquePoints)-PrevWgt_in; non_zero_length = length(find(WofP_new(uniquePoints) > 0)); if non_zero_length > 0 WofP_new (uniquePoints) = WofP_new(uniquePoints) - (Sum_WofA_average - Criterion_in) / non_zero_length; else % Handle the case where there are no non-zero values WofP_new(uniquePoints) = WofP_new(uniquePoints); end WofP_new(WofP_new<0) = 0; %Up to here we distributed the Sum_WofA_average to the sample points and I’m pretty sure it works fine % because check_WofP_new is zero which make sense to us %Check it works fine: dist_wofp_new = sum(WofP_new_initial)-sum(WofP_new); check_WofP_new = Sum_WofA_average - dist_wofp_new % Now I want to Scaling back for cnt_e = 1:length(uniquePoints) WofP_new(uniquePoints(cnt_e)) = WofP_new(uniquePoints(cnt_e)) * counts(cnt_e); end % Final check is: dist_wofp_new = sum(WofP_new_initial)-sum(WofP_new); check_WofP_new_Final = (Sum_WofA_average * mean(count_s)) - dist_wofp_new % If you code is correct check_WofP_new_Final should be zero, right? Because the weight transported is equal to Sum_WofA

مشاهده جزئیات پیشنهادهای این پروژه
گزارش تخلف
ثبت پیشنهاد روی پروژه
ثبت پروژه مشابه
پروژه را با دوستان خود به اشتراک بگذارید
کپی لینک
کارلنسر را در شبکه های اجتماعی دنبال کنید
شماره تماس ۲۸۴۲۶۴۴۳ ۰۲۱
آدرس ایمیل info@karlancer.com
پشتیبانی