پایتون ترفند

بسم الله الرحمن الرحیم

پایتون ترفند

بسم الله الرحمن الرحیم

سلام خوش آمدید

الگوریتم محاسبه سینوس (در پایتون)---بخش اول

پنجشنبه, ۴ آبان ۱۴۰۲، ۱۱:۴۲ ق.ظ

بسم الله الرحمن الرحیم 

برای ظهور امام زمان (عج) یک صلوات بفرستید 

سلام!

امروز میخوایم الگوریتم محاسبه سینوس رو در پایتون بنویسیم! البته از توابع آماده استفاده نمی کنم و میخوام الگوریتمشو بنویسم!

سینوس! کلمه ای نام آشنا که برای برخی کابوس است و برای...

خب ولش کنید چون ما بهش کار نداریم.

اینم بگم برای محاسبه سینوس با استفاده از کتابخانه 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

خب، الحمدلله .

خوشحال میشم پیشنهادات و انتقادات خودتون رو بفرمایین!

فعلا خدانگهدار

 

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی

بسم الله الرحمن الرحیم. سلام دوست عزیز. اینجا پایتون ترفنده! شاید بعضی وقتا مطالبی اینجا بگذارم!حالا تو میتونی جستجو کنی!

آخرین نظرات