الگوریتم محاسبه سینوس (در پایتون)---بخش اول
بسم الله الرحمن الرحیم
برای ظهور امام زمان (عج) یک صلوات بفرستید
سلام!
امروز میخوایم الگوریتم محاسبه سینوس رو در پایتون بنویسیم! البته از توابع آماده استفاده نمی کنم و میخوام الگوریتمشو بنویسم!
سینوس! کلمه ای نام آشنا که برای برخی کابوس است و برای...
خب ولش کنید چون ما بهش کار نداریم.
اینم بگم برای محاسبه سینوس با استفاده از کتابخانه math کافیه بنویسید:( به اینم کار نداریم)
import math math(sin(x))
و جای x زاویه(توجه کنید به رادیان نه به درجه باید بنویسید) رو بنویسید تا سینوس رو محاسبه کنه.
برای تبدیل درجه به رادیان هم کافیه :
math.radians(x)
رو بنویسید، که x زاویه به درجه هست.
اما این تابع هم از یه الگوریتم استفاده میکنه نه؟!
ما امروز با اون کار داریم!
کد کامل :
from math import factorial as fact from math import radians power = 1 result = 0 x = radians(int(input("عددی وارد کن تا سینوس آن به دست آید." + "\n").strip())) for i in range(10): if power % 2 == 0: result += (x**(2*power-1)/fact(2*power-1)) else: result -= (x**(2*power-1)/fact(2*power-1)) power += 1 print(round(abs(result),15))
خب این کد چیکار میکنه؟
خط اول و دوم : از کتابخانه math چیزای مورد نیازو وارد کردیم.
خط سوم و چهارم : متغیر power که اساس کار ما هست، و متغیر result رو برای ذخیره کردن نتیجه نوشتیم.
خط پنجم : زاویه رو به درجه گرفتم و اونو به رادیان تبدیل کردم.
حالا اساس کار اینجاست.
فرمول ما چیه؟
اگر x زاویه بر حسب رادیان باشه، sin(x) برابر است با :
x - (x^3/3!) + (x^5/5!) - (x^7/7!) + (x^9/9!) ...
خب حالا من اومدم ده بار قانون بالا رو انجام دادم.(با حلقه for ) و بعدش نتایج رو با هم جمع کردم و به power یکی اضافه کردم.
power یکی یکی میره بالا و میدونیم اگه n طبیعی باشه پس
2n - 1
قطعا عددی فرده، و در آخر گفتم تا ۱۵ رقم اعشار کافیه.
یه مشکلی که پیش اومد ( نمیدونم چرا، اگه کسی فهمید بهم بگه) ، پاسخ منفی میشد و در واقع قرینه جواب واقعی بود!
در نتیجه اونو تو قدر مطلق گذاشتم تا مثبت بشه.
میشه تو یه تابع قرارش داد تا بهتر بشه، یعنی اینطوری :
from math import factorial as fact from math import radians def my_sin(x = radians(int(input("عددی وارد کن تا سینوس آن به دست آید." + "\n").strip()))): power = 1 result = 0 for i in range(10): if power % 2 == 0: result += (x**(2*power-1)/fact(2*power-1)) else: result -= (x**(2*power-1)/fact(2*power-1)) power += 1 return round(abs(result),15)
امتحانش بکنیم؟
print(sin()) #30 --> 0.5
خب، الحمدلله .
خوشحال میشم پیشنهادات و انتقادات خودتون رو بفرمایین!
فعلا خدانگهدار