_11321
(السكروب1)
6 مايو 2009، 9:59ص
1
السلام عليكم
عندي 2 فور لوب
مثلا
i=1:5
j=7:8
منطقيا مفروض يبدا لوب ال j من 7
لكن في الواقع يبدا ال j من واحد ويعطي نتايجها اصفار زي كذا
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
95.3005 95.2434 95.1814 95.1147 95.0432
85.9876 85.9249 85.8570 85.7839 85.7056
وش الحل ماابغى كثرة الاصفار ممكن تاثر في الرسم باعطاء قيم صفر غير انه يكثر النتائج
ابعتلى الكود حتى ارى ما به من أخطاء
_11321
(السكروب1)
7 مايو 2009، 2:03ص
4
الله يجزاكم خير ويكثر من امثالكم ويحفظكم
هذا الكود وانا صغرت اللوب حتى ماتطول عليكم واخذت اللي فيه المشكلة من الكود حتى ماتطول الشغلة لان المعادلات شوية طويلة
فكرة البرنامج يحسب الاشعاع الشمسي لكل يوم من طلوع الشمس الى غروبها
حطيت i هو عدد ايام السنة (لكن هنا كمثال خمس ايام فقط)
وساعات طلوع الشمس ب j (وهنا حناخذ مثلا ساعتين بس)
وتظهر المشكلة
وهذا الكود ( مع ملاحظة ان القيمة المدخلة تكون مثلا 42)
clear all
clc
phi=input ('Enter the latitude: ');
for i=1:5
for j=7:9
delta(i)=23.45*sind(((284+i)/365)*360);
nhfn(j)=j-12;
omega(j)=nhfn(j)*360/24;
theta(i,j)=acosd((cosd(phi)*cosd(delta(i))*cosd(omega(j)))+(sind(phi)*sind(delta(i))))
end
end
اخى العزيز انت تقوم بحساب
theta(i,j)
وبسبب ذلك فانه عند وجود قيم i لا توجد قيم j والعكس مما يودى البرنامج الى اعتبارهم اصفار
_11321
(السكروب1)
7 مايو 2009، 2:53ص
6
اخي احمد
اشكرك او على الرد
ثانيا لماذا لا يوجد قيم ؟ ففي كل لوب يوجد قيم
مثلا اذا اخذ ال i بواحد ياخذ ال j بسبعة ثم بثمانية ثم بتسعة
وفي هذه يكون قيم لا يكون اصفار
ولو شغلت البرنامج ورأيت النتيجة لوجدنا انه يعطي نتائج ل j ثلاث قيم مثلا لكن ماهو اقل من قيمة j يعطي اصفار
جرب اعطائة قيم لل j من واحد الى 9 تجد القيم تظهر
اسف لازعاجك باسئلتي ياصديقي وارجوا الله ان يجزل لك المثوبة ويعظم لك الاجر ويبارك لكم في موقعكم
_11321
(السكروب1)
7 مايو 2009، 6:21ص
7
لو جربنا هذا المثال البسيط لظهرت فيه ايضا المشكلة وهو انه يبدأ من اللوب من الواحد حتى لو كنت معطيه اللوب يبدأ من 3 مثلا
for i=5:8;
for j=7:11;
md(i,j)=i+j
end
end
وهذه النتيجة
md =
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 12 13 14 15 16
0 0 0 0 0 0 13 14 15 16 17
0 0 0 0 0 0 14 15 16 17 18
0 0 0 0 0 0 15 16 17 18 19
والسؤال ، لماذا لا يبدأ من حيث تبدأ اللوب ؟ لماذا يبدأ من الواحد؟
اشكركم جميعا وجعل ماتقدمون في ميزان حسناتكم وكفاكم شر فور لوب الحياه اللي تخلي الواحد يدور بمكانه
1117308
(ايجيبت)
7 مايو 2009، 9:48ص
8
بصراحه يا بشمهندس انا مش شايف حاجه غريبه في الحل ده الناتج الطبيعي
1117308
(ايجيبت)
7 مايو 2009، 9:55ص
9
يعني انت عاوز اللوب تبدا من عند بدايه اللوب اذاي ؟؟؟؟؟؟؟؟؟؟؟؟؟
طب والمصفوفه من البدايه لحد بدايه اللوب يعوض عنها بأيه يعني
_11321
(السكروب1)
7 مايو 2009، 11:48ص
10
اخي ايجبت شكرا لك على الرد
لا اظن هذا الامر طبيعي لانني لو افترضت انني سابدأ حساباتي في الفور لوب من 100 الف هل سيعطيني 100 الف صفر لا داعي لها؟
السلام عليكم ورحمه الله وبركاته
المشكله مو فى loop
المشكله فى التخزين لانه راح يخزن القيمه فى الصف 5 والعمود السابع والباقى مثل ما خبرك المهندس ايجبت انه راح تكون باصفار
فمشان هيك غيرت فى الكود مشان يبدأ من الصف الاول والعمود الاول
[LEFT][B][FONT=Courier New][SIZE=5][FONT=Courier New][SIZE=5]a=[5:8];[/size][/font][/size][/font][/b]
[SIZE=5][FONT=Courier New][B][SIZE=5][FONT=Courier New]b=[7:11];[/font][/size][/b][/font][/size]
[SIZE=5][FONT=Courier New][B][SIZE=5][FONT=Courier New]n=length(a);[/font][/size][/b][/font][/size]
[SIZE=5][FONT=Courier New][B][SIZE=5][FONT=Courier New]n1=length(b);[/font][/size][/b][/font][/size]
[B][FONT=Courier New][SIZE=5][COLOR=#0000ff][FONT=Courier New][SIZE=5][COLOR=#0000ff][FONT=Courier New][SIZE=5][COLOR=#0000ff]for[/color][/size][/font][/color][/size][/font][/color][/size][/font][FONT=Courier New][SIZE=5][FONT=Courier New][SIZE=5][COLOR=#000000] i=1:n[/color][/size][/font][/size][/font][/b]
[B][FONT=Courier New][SIZE=5][COLOR=#0000ff][FONT=Courier New][SIZE=5][COLOR=#0000ff][FONT=Courier New][SIZE=5][COLOR=#0000ff]for[/color][/size][/font][/color][/size][/font][/color][/size][/font][FONT=Courier New][SIZE=5][FONT=Courier New][SIZE=5] j=1:n1[/size][/font][/size][/font][/b]
[SIZE=5][FONT=Courier New][B][SIZE=5][FONT=Courier New]md(i,j)=(i+n)+(j+(n1+1));[/font][/size][/b][/font][/size]
[B][FONT=Courier New][SIZE=5][COLOR=#0000ff][FONT=Courier New][SIZE=5][COLOR=#0000ff][FONT=Courier New][SIZE=5][COLOR=#0000ff]end[/color][/size][/font][/color][/size][/font][/color][/size][/font][/b]
[SIZE=5][FONT=Courier New][COLOR=#0000ff][SIZE=5][FONT=Courier New][COLOR=#0000ff][B][SIZE=5][FONT=Courier New][COLOR=#0000ff]end[/color][/font][/size][/b][/color][/font][/size][/color][/font][/size]
[B][FONT=Courier New][SIZE=5][FONT=Courier New][SIZE=5]md[/size][/font][/size][/font][/b][/left]
[LEFT]md =
12 13 14 15 16
13 14 15 16 17
14 15 16 17 18
15 16 17 18 19[/left]
1117308
(ايجيبت)
8 مايو 2009، 7:12ص
12
[SIZE=4][B]تمام كده هو ده كان قصدي يا بشمهندس زي ما المهندسه وضحت كده
[/b][/size]
لو جربنا هذا المثال البسيط لظهرت فيه ايضا المشكلة وهو انه يبدأ من اللوب من الواحد حتى لو كنت معطيه اللوب يبدأ من 3 مثلا
for i=5:8;
for j=7:11;
md(i,j)=i+j
end
end
وهذه النتيجة
md =
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 12 13 14 15 16
0 0 0 0 0 0 13 14 15 16 17
0 0 0 0 0 0 14 15 16 17 18
0 0 0 0 0 0 15 16 17 18 19
والسؤال ، لماذا لا يبدأ من حيث تبدأ اللوب ؟ لماذا يبدأ من الواحد؟
اشكركم جميعا وجعل ماتقدمون في ميزان حسناتكم وكفاكم شر فور لوب الحياه اللي تخلي الواحد يدور بمكانه
أخى العزيز هذا يسمى index وليس قيمة وهذا index بيعبر بيه عن مصفوفة الناتح md
فلا يصلح منطقيا ان تكون ان العنصر الخامس والسادس والسابع من المصفوفة md يساوى قيمة معينة وتهمل باقى عناصر المصفوفة
ولكن ان فعلت هذا فان الماتلاب يعتقد ان هذه العناصر تساوى اصفار وذلك لانك اهملتها
وعموما فى التطبيقات والمسائل الهندسية فى المصفوفات لاى for فان ال index يبدا من الواحد
ويمكنك تطبيق البرنامج كما يلى لاظهار النتائج كما تريد بجعله يعرض العناصر المطلوبة
for i=5:8;
for j=7:11;
md(i,j)=(i+j)
end
end
md(5:8,7:11)
_11321
(السكروب1)
15 مايو 2009، 4:03ص
14
مشكور ايجيب
مشكور غلا وسلمت يمينك
الف شكر للريس الديب وسلمت اناملك