اسفه gme لم استطع المساعده
انا ارى ان الكود سليم
و قد جربته على مصفوفه
واشتغل تمام
بس على الصوره ما رضى
ومثل ما انتى عارفه انا مبتدئه
بس انا عملت المتوسط بطريقه ثانيه من غير for
استخدمت داله sum
السلام عليكم اخي لقد وجدت تفسير للمشكله وحل مبدئي لها وقد شدني الى ذلك الرقم 255 الذي يمثل اكبر قيمه يمكن ان يا خذها Unsigned 8-bit integer وعليه فان المات لاب وضعت الs على انه من هذا النوع فكان اكبر قيمه له هي 255 وعند قسمته على ال L الذي هو قيمه كبيره 1394811 فان النتيجه سوف تكون صغيره جدا جدا يتم تقريبها الى الصفر واذا حاولنا ان نعرف ال s على انه Unsigned 32-bit integer حيث بامكانه ان ياخذ قيمه كبيره فسوف تتم عمليه الfor بطريقه سليمه ويكون لدينا الناتج كالاتي
اولا عدم وجود الرقم العشري يرجع الى نوع المتغير فهو interger يعني عدد صحييح وليس عشري ومهما كان كبير فلن تظهر الارقام بعد العلامه العشريه وعليه فيتم تغييره الى double or float التى يتم تمثيلها في الذاكره عشريا
ثانيا على حسب علمي والله اعلم ان 32 هو اكبر عدد يمكن تمثيله ك integer في الحاسبات اما في الماتلاب فانا شبه متاكد انه اكبر رقم ولايمكن ولو انظرنا الى هذا الشي من زاويه اخرى لوجدنا أن نظام التشغيل هو 32-bit (اعني الويندوز الذ نعمل عليه) مع انه قد لا تكون العلاقه مباشره فبلامكان تلافي هذا بالمشين سايكلز وتكوين رقم 32000000000000000000000-bit
ثالثا ال32-bit يكفي ويزيد لتمثيل الرقم الذي قد ينتج لدينا في برنامجنا هذا
على اي حال هذا هو الكود
[CENTER]x=imread('G.jpg');
[M,N]=size(x);
L=M*N;
x1=reshape(x,1,L);
s=double(0);
for i=1:L
s=s+ double(x1(i));
end
Avg=s/L[/center]
ولاكن اذا كنت سوف تحولها الى في النهايه الى uint فسوف يضيع ما بعد العلامه العشريه وعلى هذا لا داعي لاستخدام ال double من اصله فالحل الاخير هو الامثل بدون تحويل