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

السلام عليكم

عندي 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

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

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

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

الله يجزاكم خير ويكثر من امثالكم ويحفظكم

هذا الكود وانا صغرت اللوب حتى ماتطول عليكم واخذت اللي فيه المشكلة من الكود حتى ماتطول الشغلة لان المعادلات شوية طويلة

فكرة البرنامج يحسب الاشعاع الشمسي لكل يوم من طلوع الشمس الى غروبها
حطيت 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 والعكس مما يودى البرنامج الى اعتبارهم اصفار

اخي احمد

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

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

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

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

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

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

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

لو جربنا هذا المثال البسيط لظهرت فيه ايضا المشكلة وهو انه يبدأ من اللوب من الواحد حتى لو كنت معطيه اللوب يبدأ من 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

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

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

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

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

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

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

لا اظن هذا الامر طبيعي لانني لو افترضت انني سابدأ حساباتي في الفور لوب من 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]
 
 

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

[/b][/size]

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

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

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