انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
دستور if

دستور if

#1
سلام وقتتون به خیر باشه دستوری برای if به صورت زیر نوشتم

کد پی‌اچ‌پی:
Ci=2.75e-10;
       
Vd=0.9dia=1.5e-9VT=0.29
       Vg
=0:0.1:0.9
       
if (Vg<VT)
           
delta_phib=0;
       else
           
alfa=-1*(0.55*exp(-20*Vd)+(0.02*dia-0.046)*Ci*1e11+0.298)
           
delta_phib=alfa*(Vg-VT)
       
end 

ولی هنگام اجرا خط اول را اجرا نمی کند و به ازای تمامی مقادیر Vg رابطه دوم را اجرا می کند و آنرا مقدار دهی میکند!

کد پی‌اچ‌پی:
Vg =

         
0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000    0.9000


alfa 
=

    
0.9670


delta_phib 
=

   -
0.2800   -0.1833   -0.0866    0.0101    0.1068    0.2035    0.3002    0.3969    0.4936    0.5903 

آیا نوع نوشتن دستور if را اشتباه نوشتم؟ اگر نه چرا این مشکل دارد؟
برای رفع آن چه باید کرد؟؟

با تشکر
پاسخ

دستور if

#2
سلام.
شیوه کدنویسی غلط است و باعث می شود که روندی غیر از آنچه شما انتظار دارید، اجرا شود.
من چند نکته را تذکر می دهم و بعد کد صحیح را به شما نشان خواهم داد.
شما ابتدا باید delta_phib را با دستور zeros به صورت برداری شامل عناصر صفر، تعریف کنید (با طولی برابر طول Vg).
چون Vg یک بردار است، ولی VT تنها یک عدد است، بنابراین باید از حلقه for استفاده کنید و سپس برای  Vg  که بردار است، در هر گام حلقه، تنها به یک عنصر آن ارجاع بدهید (زیرا در غیر این صورت، ممکن است که عملیات مورد نظر، بر روی همه عناصر آن اجرا گردد). 

کد متلب صحیح :

کد:
clear all
close all
clc

Ci=2.75e-10;
Vd=0.9; dia=1.5e-9; VT=0.29
Vg=0:0.1:0.9
Vg_length=length(Vg);
delta_phib=zeros(1,Vg_length);
for nn=1:Vg_length
      if (Vg(nn)<VT)
          delta_phib(nn)=0;
      else
          alfa=-1*(0.55*exp(-20*Vd)+(0.02*dia-0.046)*Ci*1e11+0.298);
          delta_phib(nn)=alfa*(Vg(nn)-VT);
      end
end
delta_phib

نتیجه اجرای کد متلب بالا :

کد:
VT =

    0.2900


Vg =

  Columns 1 through 9

         0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000

  Column 10

    0.9000


delta_phib =

  Columns 1 through 9

         0         0         0    0.0097    0.1064    0.2031    0.2998    0.3965    0.4932

  Column 10

    0.5899
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

دستور if

#3
از شما بابت وقتی که می گذارید متشکرم 

 
پاسخ
 سپاس شده توسط admin ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان