آموزش مقدماتی برنامه نویسی با استفاده با نرم افزار MATLAB - قسمت هشتم
حال برای تمرین بیشتر چند مثال ساده را بررسی می کنیم.
مثال 1: برنامه زیر مانند دستور find عمل می کند و ورودی آن یک بردار است و خروجی آن محل قرارگیری عناصری از ورودی است که در شرط صدق می کنند. مثلا اگر ورودی[1 3 -4 5 -6] باشد خروجی با شرط ورودی کوچکتر از صفر (x<0) به صورت [3 5] خواهد بود. یعنی عناصر سوم و پنجم در شرط صدق می کنند.
function index=myfind(vector)
n=1;
x=length(vector);
for i=1:x;
if vector(1,i)<=0;
index(1,n)=i;
n=n+1;
end
end
n در این برنامه یک شمارنده است و برای ساختن ماتریس خروجی به کار می رود. یعنی هر گاه یکی از عناصر ورودی در شرط صدق کند، یکی بیشتر می شود. استفاده از این تکنیک بسیار متداول است. به دلیل اینکه تعداد دفعات تکرار مشخص است و برابر طول بردار ورودی است از حلقه ی for استفاده می شود. حا اگر به جای دستور index(1,n)=i داشته باشیم:
Index(1,n)=vector(1,i)
خروجی چه می شود؟
مثال 2: می خواهیم قابلیت برنامه قبل را برای ورودی ماتریس افزایش دهیم. فرض کنید می خواهیم خروجی همان ورودی باشد ولی به جای عناصری که در شرط صدق نمی کنند صفر داشته باشیم. حال احتیاج به دو حلقه ی for داریم. یکی تعداد سطرها و دیگری تعداد سطون ها را بشمارد.
function index=myfind2(mat);
[x,y]=size(mat);
for i1=1:x;
for i2=1:y;
if mat(i1,i2)<=0;
index(i1,i2)=mat(i1,i2);
else;
index(i1,i2)=0;
end
end
end
مثال 3: همان مثال قبل ولی می خواهیم خروجی را کمی تغییر دهیم. می خواهیم خروجی یک n*2 باشد که n و تعداد درایه های ماتریس ورودی است که در شرط صدق می کنند. ستون اول شماره سطر و ستون دوم شماره ی ستون درایه ی مورد نظر باشد. به عنوان مثال اگر ورودی به شکل زیر باشد:
Input=[-1 2
3 -2]
و شرط کوچکتر از صفر بودن باشد، خروجی به شکل زیر باشد:
Output=[1 1
2 2]
مشخص است که نیاز به یک شمارنده داریم و دو حلقه ی for برای بررسی تمام عناصر ماتریس ورودی و یک دستور if که شرط را چک کند. برنامه به صورت زیر خواهد بود:
function index=myfind3(mat);
n=1;
[x,y]=size(mat);
for i1=1:x;
for i2=1:y;
if mat(i1,i2)<=0;
index(n,1)=i1;
index(n,2)=i2;
n=n+1;
end
end
end
مثال 4 : برنامه ی معادل دستور sum :
ورودی یک ماتریس و خروجی یک بردار که عنصر ستون iام آن برابر وجموع عناصر ستون iام ماتریس ورودی.
function v2=mysum(v)
x=length(v);
v2(1,1)=v(1,1);
for i=2:x;
v2(1,i)=v2(1,i-1)+v(1,i);
end
مثال 5: می خواهیم برنامه ای بنویسیم که انتگرال یک تابع را در بازه ای مشخص را به دست آورد. از قوائد اولیه ی انتگرال گیری استفاده می کنیم. همانطور که می دانید در این روش مساحت زیر تابع در بازه ی مورد نظر را به چند مستطیل تقسیم کرده و مساحت آنها را حساب کره و با هم جمع می کنیم. هر چه تعداد این مستطیل ها بیشتر باشد جواب دقیق تر خواهد بود ولی حجم محاسبات بیشتر می شود. ولی ما نگران بالا رفتن حجم محاسبات نیستیم.

بازه ی a تا b را به n بخش تقسیم می کنیم. عرض هر مستطیل برابر (b-a)/n و ارتفاع مستطیل iام برابر f(a+i*(b-a)/n) است. برنامه به صورت زیر خواهد بود:
function myintegral(a,b,n)
function y=f(x)
y=sin(x);
end
w=(b-a)/n;
s=0;
for i=1:n;
s=s+w*f(a+(i-1)*w);
end
همانطور که در برنامه ی بالا دیده می شود یک تابع در بدنه ی تابع اصلی نوشته شده است. وجود end برای زیر برنامه لازم است. در ادامه ی برنامه از این زیر تابع استفاده شده است. در زیر تابع تابعی که قرار است از آن انتگرال گرفته شود مشخص شده است. می توانیم این تابع را تغییر داده و برنامه را دوباره ذخیره کنیم. N تعداد مستطیل هاست. S مقدار انتگرال است که در یک حلقه که به تعداد مستطیلهاست تگرار می شود و مقدار هر مستطیل را با مقدار انتگرال جمع می کند.
حال می خواهیم برنامه را به گونه ای تغییر دهیم تا تابع انتگرال رسم شود:
function myintegral(a,b,n)
function y=f(x)
y=sin(x);
end
w=(b-a)/n;
s=0;
for i=1:n;
s(1,i+1)=s(1,i)+w*f(a+(i-1)*w);
x(1,i+1)=a+(i-1)*w;
end
plot(x,s)
بر خلاف برنامه ی قبلی s را به صورت یک ماتریس تولید می کند که مقدار درایه ی iام آن برابر مجمع مستطیل های اوا تا iام. در این حلقه عناصر محور x هم برای رسم نمودار ساخته می شوند.
مثال 6: می خواهیم مشتق یک تابع را در بازه ای تعیین شده رسم کنیم. بازه را به n زیر بازه تقسیم می کنیم و تابع را در هر زیر بازه را با یک خط تقریب می زنیم و مشتق تابع در نقطه ی ابتدای این زیر بازه برابر شیب این خط است. برنامه به صورت زیر است:
function difff(a,b,n)
w=(b-a)/n;
for i=1:n;
x(1,i)=a+w*(i-1);
y(1,i)=(f(a+w*i)-f(a+w*(i-1)))/w;
end
plot(x,y)








