الکترون‍‍ــــ



سلام و عرض ادب!
من مصطفی میزانی هستم. مهندس برق گرایش قدرت از دانشگاه سمنان.
در دوران تحصیل و البته پسا تحصیلم دغدغه‌هایی داشتم و دارم که دوست دارم بهشون بپردازم.
خیلی از دانشجوهای دور و اطراف من و صد البته خود بنده نیازهایی داشتم در زمان تحصیل که فکر می‌کنم به هیچ وجه برآورده نشد! و دلم نمی‌خواد عبث و ابتر باقی‌ بمونه. ایشالا که مسیر درستش رو طی کنه به جای خوب هم برسه.
ممنون می‌شم از دوستان عزیزی که دنبال می‌کنن بنده رو، در صورتی که کمکی از دستشون بر میاد دریغ نکنن.

سلام و روز بخیر
این پروژه‌ای بود که در زمان کارشناسی بنده در طول ترم به عنوان پروژه درس الکترونیک صنعتی باید انجام می‌شد
مدار این پروژه رو آقای مهندس شبیری زحمتش رو کشیدن و استاد درس هم دکتر ناصر اسکندریان هستن.
فعلا عکس مدار رو داشته باشیم تا بعد:


سلام و روز بخیر
این پروژه‌ای بود که در زمان کارشناسی بنده در طول ترم به عنوان پروژه درس الکترونیک صنعتی باید انجام می‌شد
مدار این پروژه رو آقای مهندس شبیری زحمتش رو کشیدن و استاد درس هم دکتر ناصر اسکندریان هستن.
فعلا عکس مدار رو داشته باشیم تا بعد:
در مدار زیر، ترانس سر وسط استفاده شده از نوع ۲۲۰/۹ یا ۲۲۰/۱۲ می‌تونه باشه. همچنین پل دیودی، خازن‌های الکترولیت 2200uf, 25v که پلاریته‌هاشون مهمه در نحوه‌ی بستن مدار، رگولاتور ولتاژ (تثبیت کننده‌ی ولتاژ مثبت (7805) و منفی (7905) ۵ ولت) که پایه‌هاشون باهم دیگه فرق داره و حتما موقع بستن مدار PIN out‌ ها رو چک کنید. نکته اینه که ظرفیت خازن‌های الکترولیتی خیلیییی زیاد مهم نیست و بیشتر ولتاژشون مهمه.

سلام 

وقت بخیر

دکتر زهرا مروج با مرتبه‌ی استاد تمام در دانشگاه سمنان ترم‌های زیادی هست که به تدریس درس حفاظت و رله می‌پردازن.

بنده دانشجوی ایشون بودم در مقطع کارشناسی. دو فایل PDF از تمرین‌های مرتبط با این درس در مورد طراحی حفاظت دیفرانسیل ترانس و باسبار، و همچنین طراحی رله‌های دیستانس از ترم ۹۷-۹۸ ایشون رو براتون به اشتراک می‌ذارم؛ تمرین‌های ارزشمندی هستن و فکر نمی‌کنم جایی بتونید مشابه اینها رو به راحتی تهیه کنید. چون خودم هم خیلی دنبالش گشتم ولی متاسفانه منابع بسیار محدود هستند بخصوص منابع سوال همراه با پاسخ.

برای دانلود فایل‌ها ادامه‌ی مطلب رو باز کنید.

ادامه مطلب


سلام رفقا

توی این پست می‌خوام روش ساده‌ای برای بدست آوردن دنباله‌ی فیبوناچی با استفاده از دستورات متلب رو براتون توضیح بدم.

برای این کار پیش‌نیاز زبان برنامه‌نویسی متلب (پایه‌ی زبان C) و اندکی هم فلوچارت نویسی هست که البته اصلا نگران نباشید اگر این‌ ها رو بلد نیستید. چون زبانی بسیار ساده‌ست و به راحتی می‌تونید تحلیلش کنید

همونطور که می‌دونید دنباله‌ی فیبوناچی این شکلیه:

1, 1, 2, 3, 5, 8, 13, 21 و.

اگر کمی بهش دقت کنید متوجه می‌شید که در مرحله اول عدد ۱ رو با ۱ جمع می‌کنیم. مرحله دوم یا به عبارتی جمله‌ی سوم دنباله‌ی فیبوناچی با جمع کردن دو جمله‌ی قبلی حاصل می‌شه یعنی اگر جملات رو با fn مشخص کنیم، جمله سوم دنباله از طریق رابطه‌ی f3=f2+f1 بدست میاد. و همینطور جمله چهارم هم از حاصل جمع جمله‌ی دوم و سوم، جمله‌ی پنجم از حاصل جمع جمله‌ی چهارم و سوم و الی آخر.

دقیقا کاری که ما می‌خوایم توی محیط متلب انجام بدیم:

این کد‌ها رو ببینید:

clc;
clear all;
i=0;
f1=1;
f2=1;
n=input('set n value:');
while(i<n)
  if i<=n 
    disp(f1);
    f3 = f2+f1;
    f1 = f2;
    f2 = f3;
    i=i+1;
    
  elseif i>n
    disp(f1);
    break;
  end
end
    

برای توضیحش از خط اول شروع می‌کنیم و خط به خط می‌ریم جلو

۱. این دستور به منظور تمیز کردن command prompt متلب استفاده می‌شه و یه جورایی کدهای اضافی رو از صفحه پاک می‌کنه.

۲. هر متغیری که توی workspace شما ذخیره شده باشه با این دستور پاک می‌شه.

۳. برای حلقه‌هایی که داریم باید از یه شمارنده استفاده کنیم. متغیر i رو برای شمارش تعداد تکرارهای حلقه‌مون استفاده می‌کنیم.

۴. جمله‌ی اول دنباله‌ی فیبوناچی رو با مشخص کردن مقدار اولیه برای متغیر f1 مشخص می‌کنیم.

۵. مشابه خط قبلی، جمله‌ی دوم دنباله رو با مشخص کردن مقدار اولیه برای متغیر f2 مشخص می‌کنیم.

۶. حالا وقتشه از کاربر بپرسیم که می‌خواد این دنباله تا چند جمله نمایش داده بشه. یعنی تا کجا این کار ادامه پیدا کنه؟! این مقدار رو از کاربر درخواست می‌کنیم و اون رو توی متغیر n قرار می‌دیم.

۷. ما نیاز به یه حلقه‌ داریم. برای اینکه مجبور نباشیم تمام جملات دنباله رو خودمون وارد کنیم! و این کار توسط کامپیوتر انجام بشه. بنابراین یه حلقه با شرط تعریف می‌کنیم و شرط توقف حلقه رو اینطور تعریف می‌کنیم: مادامی که تعداد جملات نوشته شده به عدد انتخابی کاربر نرسیده حلقه را تکرار کن.

۸. حالا باید مشخص کنیم که اگر هنوز تعداد جملاتی که نوشته شده به تعداد جملاتی که کاربر انتخاب کرده نرسیده، چه اتفاقی باید بیفته! پس یه شرط می‌ذاریم و مقدار شرط رو مطابق کدی که نوشتیم انتخاب می‌کنیم.

۹. توی خط اول، اولین جمله‌ی دنباله‌ی خودمون رو چاپ می‌کنیم.

۱۰. مقدار جمله‌ی سوم رو از مقدار دو جمله‌ی قبلی محاسبه می‌کنیم.

۱۱. از اینجا به بعد یک مقدار کمی پیچیده می‌شه ماجرا. چرا؟! چون باید یک سری تغییراتی توی جملاتمون بدیم. به توضیحات زیر دقت کنید:

شما در تکرار اول این حلقه، مقدار f3 رو محاسبه می‌کنید. یعنی تا الان اعداد زیر رو بدست آوردید:

f1, f2, f3

1,  2, 3

و جمله‌ی اول رو چاپ کردید. یعنی تا الان خروجیتون به این صورته:

1

توی خط ۱۱ کاری که ما انجام می‌دیم اینه که، اعداد رو یه دونه به عقب هل می‌دیم. یعنی چی؟ دنباله فیبوناچی رو اینجا رو ببینید:

f1, f2, f3, f4, f5, f6, .

1,  1, 2,  3, 5, 8, .

و کاری که ما در این مرحله و مرحله‌ی بعدی یعنی خط ۱۲ انجام می‌دیم این دنباله رو به شکل زیر تغییر می‌ده:

f1, f2, f3, f4, f5, f6, .

1,  2, 3,  5, 8, 13, .

فهمیدید چی شد؟ ما با این کار عدد اول دنباله رو نوشتیم و از گردونه‌ی اعداد خارجش کردیم.

حالا باید دوباره اولین عددی که داریم رو بنویسیم.

۱۲. توضیحات مرحله‌ی (خط) ۱۱ رو با دقت بخونید.

۱۳. شمارنده‌ی ما برای اینکه بتونیم تشخیص بدیم تو چه مرحله‌ای هستیم باید یک واحد افزایش پیدا کنه.

۱۴. اما اگر از ابتدا، جمله‌ای که مشخص کردیم یا عدد n برابر صفر بود چی؟!

۱۵. فقط مقدار جمله‌ی اول یا همون ۱ در خروجی نوشته می‌شه و دستور توقف برنامه صادر می‌شه.

 

حالا خودتون هم این کار رو انجام بدید.

ممنون می‌شم اگر سوالی داشتید از طریق کامنت‌ها مطرح کنید تا با هم دیگه بهش پاسخ بدیم.

این پست رو به دوستانتون هم معرفی کنید.

 

 

برای دانلود  m file (فایل نرم‌افزار متلب) دستور دنباله‌ی فیبوناچی در متلب اینجا کلیک کنید.


سلام دوباره

هفته‌ی پیش بود اگر اشتباه نکنم که روش بدست آوردن جمله‌ی nام دنباله‌ی فیبوناچی رو با استفاده از کدهای دستوری متلب یاد دادیم. فایلش هم موجوده که می‌تونید برید به رایگان دانلود کنید و استفاده کنید.

این دفعه قصد دارم بهتون یاد بدم چطوری با استفاده از بسط تیلور توابع سینوس یا کسینوس، مقدار سینوس زاویه‌ی دلخواهتون رو فقط با نوشتن چند خط کد ساده بدست بیارید.

خب. برای شروع اول باید بدونیم که بسط تیلور تابع سینوس به چه صورت نوشته می‌شه. به رابطه‌ی زیر دقت کنید:

بسط تیلور تابع سینوس

خب. همونطور که مشاهده می‌کنید، طرف دوم این تساوی یک دنباله‌ای از اعداد رو شامل می‌شه که در واقع هرچقدر مقدار جملات بیشتر باشن، دقت خروجی شما (یعنی مقدار سینوس زاویه‌ی بدست اومده) دقیق‌تر خواهد بود. به تفاوت دو مقدار بدست اومده‌ی زیر دقت کنید؛ بار اول تعداد تکرارها یا جملات بسط تیلور رو برابر یک قرار دادیم و خروجی سینوس زاویه Pi/6 برابر 0.5236 شده. در حالی که شما می‌دونید سینوس ۳۰ درجه دقیقا برابر 0.5 هست.

x is the angle & n is the number of iterrations
set x value: pi/6
set n value: 1
    0.5236

حالا اگر تعداد جملات رو بیشتر کنیم چی می‌شه؟ ببینید:

x is the angle & n is the number of iterrations
set x value: pi/6
set n value: 5
    0.5000

همونطور که می‌بینید به سادگی با افزایش تعداد جملات از ۱ به ۵ دقت خروجی به طرز چشم‌گیری تغییر می‌کنه. شاید بگید حالا که با ۵ تا جمله این اتفاق می‌افته چه کاریه n رو خیلی بزرگ انتخاب کنیم؟! خب پاسخ در این خلاصه می‌شه که ۱. همیشه اینطور نیست که با ۵ جمله به دقت مطلوب برسید و ۲. مختارید که چه تعداد از جملات رو استفاده کنید.

اما کد اصلی که منتج به این خروجی می‌شه چیه.

کدهای زیر رو نگاه کنید تا توضیحاتش رو باهم مرور کنیم:

clear all;
clc;
s=0;
disp('x is the angle & n is the number of iterrations');
x=input('set x value: ');
n=input('set n value: ');
m=1;
i=1;
f=x;

while(i<=n)
   h=factorial(i);
   z=(f/(h*m));
   s=s+z;
   if i<n
      i=i+2;
      f=f*x*x;
      m=-m;
   else
      break;
   end
end
disp(s);

در بخش اول این کدها، همونطور که در ابتدا توضیح دادیم، مقادیر n (یعنی تعداد جملات بسط تیلور) و x (یعنی زاویه‌ای که می‌خوایم سینوسش رو محاسبه کنیم) رو از کاربر دریافت می‌کنیم و اون‌ها رو توی متغیرهایی به همون اسم ذخیره می‌کنیم. مقادیر m، i و f هم به ترتیب متغیرهایی هستن که داخل حلقه‌ها و شرط‌هامون ازشون استفاده می‌کنیم.

برای اینکه هربار یک جمله از این بسط رو تولید کنیم و با مقادیر قبلی جمع کنیم تا در نهایت به خروجی مطلوبمون برسیم باید از یک حلقه استفاده کنیم. شرط توقف این حلقه رسیدن شمارنده‌ی i به تعداد جملات انتخاب شده توسط کاربر یعنی n هست.

داخل این حلقه هربار مقدار فاکتوریل دیده شده در فرمول رو تولید می‌کنیم و اون روی توی h قرار می‌دیم.

z مقدار محاسبه شده‌ی خروجی بسط تیلور در جمله‌ی iام هست و با کمی دقت به فرمول و کد نوشته شده متوجه ارتباطشون خواهید شد.

اما خروجی اصلی باید مجموع مقادیر z محاسبه شده تا اون جمله باید باشه و این کار رو با جمله‌ی بعدی یعنی s=s+z انجام می‌دیم.

برای ادامه‌ی روند باید یک سری شروط رو چک کنیم تا در صورتی که شرط‌ها برقرار نبودن برنامه متوقف بشه و یا در صورتی که نیاز به ادامه‌ی روند وجود داشت، یک سری تغییرات در مقادیر متغیرها ایجاد کنیم.

شرط اصلی این برنامه رسیدن شمارنده‌ i به مقدار n انتخاب شده توسط کاربره. پس مادامی که i به n نرسیده، برنامه باید به کار خودش ادامه بده. اما برای اینکه به مرحله‌ی بعدی بریم اول باید مقدار شمارنده i و مقدار f یا در واقع همون x که در هر مرحله توانش تغییر می‌کنه و همچنین علامت جمله رو که با متغیر m تعیین می‌کنیم تغییر بدیم. برای درک این قسمت با دقت به فرمول بسط تیلور تابع سینوس نگاه کنید.

بعد از ایجاد تغییرات در متغیرهامون باید به ابتدای حلقه بریم و مجدد کارهایی که در خطوط قبلی توضیح دادیم رو تکرار کنیم.

 

ممنونم که همراهی می‌کنید.

اگر این متلب برای شما یا اشخاصی که می‌شناسید مفید بود، ممنون می‌شم نظرات خودتون رو با من به اشتراک بذارید. همچنین خوشحال می‌شم اگر این صفحه رو به کسانی که فکر می‌کنید علاقمند هستند یا بهش نیاز دارن معرفی کنید.

اگر سوالی دارید از طریق نظرها بپرسید تا جواب بدم.

فایل این برنامه رو بزودی از زیر همین پست به رایگان می‌تونید دریافت کنید.

 


سلام به عزیزان همراه

طبق روالی که در پیش گرفتیم تا به حال دو مثال کاربردی و خوب رو از کدهای متلب در دو پست گذشته باهم بررسی کردیم. تا به حال بدست آوردن مقدار سینوس زاویه از روی بسط تیلور و همچنین بدست آوردن جمله‌ی nام دنباله‌ی فیبوناچی رو باهم بررسی کردیم.

توی پرانتز:
علت اینکه با مثال پیش می‌بریم آموزش‌ها رو اینه که اگر ما بخوایم توابع رو دونه دونه و از پایه‌ توضیح بدیم، روند آموزش بسیار طولانی می‌شه و شاید هرگز به این مقدار کاربردی نباشه. توی مثال‌ها توضیحات به حدی کافی هستند که شما بتونید از توابعی که به کار رفته در برنامه‌های خاص خودتون استفاده کنید.

در این پست سعی دارم تا روش مقلوب کردن اعداد رو با استفاده از دستورات متلب به شما یاد بدم. اما مقلوب یعنی چه؟‍ به مثال زیر دقت کنید:
 

فرض کنید ما یک عدد ۶ رقمی مشابه عدد زیر داریم:


۱۲۳۴۵۶

و اگر این عدد رو مقلوب کنیم:

 

۶۵۴۳۲۱

به همین سادگی! یعنی ارقام این عدد شش رقمی رو برعکس ردیف کنیم!

حالا برای این کار می‌شه به سادگی از کدهای زیر استفاده کرد:

clc;
clear all;
x=input('insert your number: ');
m=mod(x,10);
while(1)
    x=floor(x/10);
    m=mod(x,10)+(10*m);
    if floor(x/10)==0
        out=['the inverse is equal to: ',num2str(m)];
        disp(out);
        break;
    end
end

 

خطوط اول و دوم که مطابق توضیحات

قبلی مربوط به تمیز کردن command prompt و workspace هستند.

در خط سوم ما با دستور input عددی رو که کاربر مایل به مقلوب کردنش هست رو دریافت می‌کنیم و اون رو توی متغیر x ذخیره می‌کنیم.

متغیر m در واقع جایی هست که ما تغییرات رو در اون انجام می‌دیم و در نهایت مقدار عدد نهای رو از طریق این متغیر توی خروجی تحویل می‌دیم.

برای اینکه رقم یکان رو از عدد ورودی جدا کنیم از دستور mod‌ استفاده می‌کنیم. این یعنی x رو بر 10 تقسیم کن و بعد، باقی‌مانده‌ی این تقسیم رو در m قرار بده.

مطابق دو برنامه‌ی قبلی که نوشتنش رو تمرین کردیم، اینجا هم برای انجام کار توسط سیستم به یک حلقه و یک شرط توقف احتیاج داریم. چرا حلقه؟ فرض کنید عدد وارد شده 14 رقمی! باشه. اون وقت علت وجود حلقه رو شاید بهتر بشه درک کرد!

در اولین دستور داخل حلقه، دستوری که با floor مشخص شده خروجی حاصل تقسیم عدد ورودی بر ۱۰ رو به سمت پایین گرد می‌کنه تا مقدار اعشار رو از انتهای این عدد بندازه. به مثال زیر توجه کنید:
 

5423 >> 5423/10 >> 542.3 >> floor(542.3)=542

قبل از ورود به حلقه به سادگی رقم یکان رو جدا کردیم. این مقدار حالا با ارزش‌ترین رقمیه که در اختیار داریم. از طرفی عدد جدید رو با استفاده از اولین خط دستور درون حلقه تشکیل دادیم. با تکرار دستوری که خارج از حلقه نوشته شده بود، و کم‌ارزش‌ترین رقم اون عدد رو برای ما جدا می‌کرد، می‌تونیم رقم بعدی رو از عدد اصلی جدا کنیم. کافیه پر ارزش‌ترین رقمی که در اختیار داریم، یا یکان رو با ضرب کردنش در عدد 10 یک جایگاه بالاتر ببریم و با رقم بعدی که بدست آوردیم جمع کنیم! با این کار به سادگی دو رقم از سمت راست عدد اصلی جدا کردیم و به صورت برعکس نوشتیمشون!

می‌تونید بگید در تکرار بعدی حلقه چه اتفاقی می‌افته؟!

بله! رقم بعدی از عدد اصلی جدا می‌شه و کنار m می‌نشینه! به همین ظرافت.

شرط توقفی که برای این تکرار تعیین کردیم اینه که اون عدد گرد شده‌ی رو به پایین دیگه بشه صفر! و در واقع بعد از اون هیچ رقم دیگری وجود نداشته باشه. چرا؟! (کامنت کنید)

برای نمایش خروجی هم از دستور disp استفاده می‌کنیم.

موافق این آموزش بودید؟!

اگر این آموزش و آموز‌ش‌های قبلی رو مفید می‌دونید، ما رو به دوستان خودتون و کسانی که فکر می‌کنید این مطالب بدردشون می‌خوره معرفی کنید.

فایل کد‌ها بزودی روی سایت قرار می‌گیره.


دوستان عزیز سلام

طبق روالی که شروع کردیم اینبار می‌خواهیم به تحلیل و بررسی یک برنامه دیگر در متلب بپردازیم.

هدف تغییر مبنای اعداد بر مبنای 10 به مبنای دلخواه است. البته همونطور که می‌دونید ساختار اعدادی که به مبنای 16 تبدیل می‌شن متفاوته و خب امکان گرفتن خروجی بر مبنای 16 با کد دستوری که نوشتیم وجود نداره مگر اینکه بخواهیم از کدهای دستوری آماده متلب برای این کار استفاده کنیم که با بررسی یک شرط خروجی را بر مبنای 16 تحویل می‌ده که در انتهای همین پست مورد بررسی قرار می‌گیره.

حالا به بررسی کد مربوط به تغییر مبنا می‌پردازیم.

همونطور که می‌دونید عمل تغییر مبنا با تقسیم‌های پیاپی اتفاق می‌افته؛ تلاش می‌کنیم این روند رو در قالب کد متلب دربیاریم.

در ابتدا با دستورهای مربوط به اخذ ورودی‌ها شروع می‌کنیم.

x=input('Input Your Number =');
n=input('Input Your Base =');

x عدد ورودی بر مبنای 10 و n مبنای مدنظر است که می‌خواهیم عدد به آن مبنا برود.

عدد ورودی می‌تواند عدد صحیح یا اعشاری باشد. اگر بخواهیم بخش صحیح و اعشاری را از هم جدا کنیم و ذخیره داشته باشیم از دستورات زیر استفاده می‌کنیم.

f=fix(x);
w(1)=x-f;

دستور fix هد عددی را به جزء صحیح خودش تبدیل می‌کند. برای بدست آوردن بخش اعشار هم واضح است که با تفریق عدد اصلی و بخش صحیح بدست می‌آید.

تا اینجای کار عدد ورودی بر مبنای ده رو به دو بخش عدد صحیح و اعشار تبدیل کردیم.

اکنون وارد حلقه تکرار شده و عملیات تبدیل مبنا را شروع می‌کنیم.

while k >=1
t=f/n;
r(i)=mod(f,n);
k=fix(t);
f=k;

متغیر t حاصل تقسیم عدد بر مبناست. متغیر r باقی مانده تقسیم عدد صحیح بر مبنا رو استخراج می‌کنه و در ادامه برای حاصل تقسیم همان روند قبل برای استخراج عدد صحیح با استفاده از دستور fix استفاده می‌شود و عدد جدید برای تقسیم بدست می‌آید.

حال باید با استفاده از تقسیمات قبل خروجی را که عدد در مبنای n است نشان دهیم.

for j=1:i-1
mj=mj+(10^(i-1-j))*r(i-j);
end

i تعداد مراحل تقسیم را در خود ذخیره کرده است. با استفاده از حلقه و رابطه مشخص فوق، خروجی بر مبنای جدید بدست می‌آید که در انتها آن را نمایش می‌دهیم.

برای مبنای 16 هم با استفاده از کد زیر خواهیم داشت

dec2base(X,16)

ممنونم که همراهی می‌کنید.

اگر این مطلب برای شما یا اشخاصی که می‌شناسید مفید بود، ممنون می‌شم نظرات خودتون رو با ما به اشتراک بذارید. همچنین خوشحال می‌شم اگر این صفحه رو به کسانی که فکر می‌کنید علاقمند هستند یا بهش نیاز دارن معرفی کنید.

اگر سوالی دارید از طریق نظرها بپرسید تا جواب بدیم.

فایل این برنامه رو بزودی از زیر همین پست به رایگان می‌تونید دریافت کنید.

 


سلام دوباره

هفته‌ی پیش بود اگر اشتباه نکنم که روش بدست آوردن جمله‌ی nام دنباله‌ی فیبوناچی رو با استفاده از کدهای دستوری متلب یاد دادیم. فایلش هم موجوده که می‌تونید برید به رایگان دانلود کنید و استفاده کنید.

این دفعه قصد دارم بهتون یاد بدم چطوری با استفاده از بسط تیلور توابع سینوس یا کسینوس، مقدار سینوس زاویه‌ی دلخواهتون رو فقط با نوشتن چند خط کد ساده بدست بیارید.

خب. برای شروع اول باید بدونیم که بسط تیلور تابع سینوس به چه صورت نوشته می‌شه. به رابطه‌ی زیر دقت کنید:

بسط تیلور تابع سینوس

خب. همونطور که مشاهده می‌کنید، طرف دوم این تساوی یک دنباله‌ای از اعداد رو شامل می‌شه که در واقع هرچقدر مقدار جملات بیشتر باشن، دقت خروجی شما (یعنی مقدار سینوس زاویه‌ی بدست اومده) دقیق‌تر خواهد بود. به تفاوت دو مقدار بدست اومده‌ی زیر دقت کنید؛ بار اول تعداد تکرارها یا جملات بسط تیلور رو برابر یک قرار دادیم و خروجی سینوس زاویه Pi/6 برابر 0.5236 شده. در حالی که شما می‌دونید سینوس ۳۰ درجه دقیقا برابر 0.5 هست.

x is the angle & n is the number of iterrations
set x value: pi/6
set n value: 1
    0.5236

حالا اگر تعداد جملات رو بیشتر کنیم چی می‌شه؟ ببینید:

x is the angle & n is the number of iterrations
set x value: pi/6
set n value: 5
    0.5000

همونطور که می‌بینید به سادگی با افزایش تعداد جملات از ۱ به ۵ دقت خروجی به طرز چشم‌گیری تغییر می‌کنه. شاید بگید حالا که با ۵ تا جمله این اتفاق می‌افته چه کاریه n رو خیلی بزرگ انتخاب کنیم؟! خب پاسخ در این خلاصه می‌شه که ۱. همیشه اینطور نیست که با ۵ جمله به دقت مطلوب برسید و ۲. مختارید که چه تعداد از جملات رو استفاده کنید.

اما کد اصلی که منتج به این خروجی می‌شه چیه.

کدهای زیر رو نگاه کنید تا توضیحاتش رو باهم مرور کنیم:

clear all;
clc;
s=0;
disp('x is the angle & n is the number of iterrations');
x=input('set x value: ');
n=input('set n value: ');
m=1;
i=1;
f=x;

while(i<=n)
   h=factorial(i);
   z=(f/(h*m));
   s=s+z;
   if i<n
      i=i+2;
      f=f*x*x;
      m=-m;
   else
      break;
   end
end
disp(s);

در بخش اول این کدها، همونطور که در ابتدا توضیح دادیم، مقادیر n (یعنی تعداد جملات بسط تیلور) و x (یعنی زاویه‌ای که می‌خوایم سینوسش رو محاسبه کنیم) رو از کاربر دریافت می‌کنیم و اون‌ها رو توی متغیرهایی به همون اسم ذخیره می‌کنیم. مقادیر m، i و f هم به ترتیب متغیرهایی هستن که داخل حلقه‌ها و شرط‌هامون ازشون استفاده می‌کنیم.

برای اینکه هربار یک جمله از این بسط رو تولید کنیم و با مقادیر قبلی جمع کنیم تا در نهایت به خروجی مطلوبمون برسیم باید از یک حلقه استفاده کنیم. شرط توقف این حلقه رسیدن شمارنده‌ی i به تعداد جملات انتخاب شده توسط کاربر یعنی n هست.

داخل این حلقه هربار مقدار فاکتوریل دیده شده در فرمول رو تولید می‌کنیم و اون روی توی h قرار می‌دیم.

z مقدار محاسبه شده‌ی خروجی بسط تیلور در جمله‌ی iام هست و با کمی دقت به فرمول و کد نوشته شده متوجه ارتباطشون خواهید شد.

اما خروجی اصلی باید مجموع مقادیر z محاسبه شده تا اون جمله باید باشه و این کار رو با جمله‌ی بعدی یعنی s=s+z انجام می‌دیم.

برای ادامه‌ی روند باید یک سری شروط رو چک کنیم تا در صورتی که شرط‌ها برقرار نبودن برنامه متوقف بشه و یا در صورتی که نیاز به ادامه‌ی روند وجود داشت، یک سری تغییرات در مقادیر متغیرها ایجاد کنیم.

شرط اصلی این برنامه رسیدن شمارنده‌ i به مقدار n انتخاب شده توسط کاربره. پس مادامی که i به n نرسیده، برنامه باید به کار خودش ادامه بده. اما برای اینکه به مرحله‌ی بعدی بریم اول باید مقدار شمارنده i و مقدار f یا در واقع همون x که در هر مرحله توانش تغییر می‌کنه و همچنین علامت جمله رو که با متغیر m تعیین می‌کنیم تغییر بدیم. برای درک این قسمت با دقت به فرمول بسط تیلور تابع سینوس نگاه کنید.

بعد از ایجاد تغییرات در متغیرهامون باید به ابتدای حلقه بریم و مجدد کارهایی که در خطوط قبلی توضیح دادیم رو تکرار کنیم.

 

ممنونم که همراهی می‌کنید.

اگر این مطلب برای شما یا اشخاصی که می‌شناسید مفید بود، ممنون می‌شم نظرات خودتون رو با من به اشتراک بذارید. همچنین خوشحال می‌شم اگر این صفحه رو به کسانی که فکر می‌کنید علاقمند هستند یا بهش نیاز دارن معرفی کنید.

اگر سوالی دارید از طریق نظرها بپرسید تا جواب بدم.

فایل این برنامه رو بزودی از زیر همین پست به رایگان می‌تونید دریافت کنید.

 


آخرین ارسال ها

آخرین وبلاگ ها

آخرین جستجو ها