مشكلةفي الفور لوب


(السكروب1) #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

وش الحل ماابغى كثرة الاصفار ممكن تاثر في الرسم باعطاء قيم صفر غير انه يكثر النتائج


#2

ابعتلى الكود حتى ارى ما به من أخطاء


(المهندس سعود) #3

لازم تحط الكود


(السكروب1) #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
 


#5

اخى العزيز انت تقوم بحساب

 theta(i,j)

وبسبب ذلك فانه عند وجود قيم i لا توجد قيم j والعكس مما يودى البرنامج الى اعتبارهم اصفار


(السكروب1) #6

اخي احمد

اشكرك او على الرد

ثانيا لماذا لا يوجد قيم ؟ ففي كل لوب يوجد قيم

مثلا اذا اخذ ال i بواحد ياخذ ال j بسبعة ثم بثمانية ثم بتسعة

وفي هذه يكون قيم لا يكون اصفار

ولو شغلت البرنامج ورأيت النتيجة لوجدنا انه يعطي نتائج ل j ثلاث قيم مثلا لكن ماهو اقل من قيمة j يعطي اصفار

جرب اعطائة قيم لل j من واحد الى 9 تجد القيم تظهر

اسف لازعاجك باسئلتي ياصديقي وارجوا الله ان يجزل لك المثوبة ويعظم لك الاجر ويبارك لكم في موقعكم


(السكروب1) #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

والسؤال ، لماذا لا يبدأ من حيث تبدأ اللوب ؟ لماذا يبدأ من الواحد؟

اشكركم جميعا وجعل ماتقدمون في ميزان حسناتكم وكفاكم شر فور لوب الحياه اللي تخلي الواحد يدور بمكانه


(ايجيبت) #8

بصراحه يا بشمهندس انا مش شايف حاجه غريبه في الحل ده الناتج الطبيعي


(ايجيبت) #9

يعني انت عاوز اللوب تبدا من عند بدايه اللوب اذاي ؟؟؟؟؟؟؟؟؟؟؟؟؟

طب والمصفوفه من البدايه لحد بدايه اللوب يعوض عنها بأيه يعني


(السكروب1) #10

اخي ايجبت شكرا لك على الرد

لا اظن هذا الامر طبيعي لانني لو افترضت انني سابدأ حساباتي في الفور لوب من 100 الف هل سيعطيني 100 الف صفر لا داعي لها؟


(غــلا) #11

السلام عليكم ورحمه الله وبركاته
المشكله مو فى 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]
 
 


(ايجيبت) #12

[SIZE=4][B]تمام كده هو ده كان قصدي يا بشمهندس زي ما المهندسه وضحت كده

[/b][/size]


#13

أخى العزيز هذا يسمى 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)


(السكروب1) #14

مشكور ايجيب
مشكور غلا وسلمت يمينك

الف شكر للريس الديب وسلمت اناملك