نحوه اعمال ریاضی با پایتون – تحلیل عددی توضیح داده شده است
تحلیل عددی پل ارتباطی بین ریاضی و علوم کامپیوتر است.
اساساً، این توسعه الگوریتمهایی است که راهحلهایی را تقریب میکنند که ریاضی خالص نیز حل میکند، اما با استفاده از منابع محاسباتی کمتر و سریعتر.
این رشته بسیار مهم است. زیرا برای اکثر راه حل ها در دنیای واقعی، ما فقط به تقریب های خوب نیاز داریم و نه راه حل های دقیق.
در این مقاله به تحلیل موارد زیر خواهیم پرداخت:
قیاس نشان دهنده اهمیت آنالیز عددی
کاربرد تحلیل عددی در مسائل دنیای واقعی
مقدمه ای بر معادلات دیفرانسیل جزئی (PDEs)
مقدمه ای بر بهینه سازی در تحلیل عددی
قیاسی که اهمیت آنالیز عددی را نشان می دهد
چگونه خط ساحلی یک جزیره را اندازه گیری کنیم؟
اگر بخواهیم هر سانتی متر از هر بخش کوچک را اندازه گیری کنیم، غیرممکن و احتمالاً زمان بر خواهد بود.
به دلیل دریا، خط ساحلی همیشه در آن سطح از جزئیات در حال تغییر است.
با این حال، با تقریب و اندازه گیری در بخش های بزرگتر، می توانیم اندازه گیری عملی خط ساحلی را بدست آوریم.
این وضعیت منعکس کننده تحلیل عددی است.
تقریب در موقعیت هایی که اندازه گیری دقیق غیرممکن یا غیرعملی است بینش هایی به دست می دهد.
همانطور که ما یک تخمین خوب از طول خط ساحلی را می پذیریم، تحلیل عددی از تقریب برای حل مسائل سخت استفاده می کند.
مبانی تحلیل عددی
تجزیه و تحلیل عددی همه چیز در مورد تقریب است. مانند استفاده از دوربین دوچشمی برای دیدن منظره ای است که بسیار دور است. ما نمی توانیم هر برگ را ببینیم. اما ما یک تصویر به اندازه کافی خوب برای درک زمین بدست می آوریم.
این در تحلیل عددی بسیار مهم است.
در این، ما مسائل ریاضی سخت را حل میکنیم که در آن راهحلهای دقیق یا غیرممکن هستند یا به شدت نیازمند منابع هستند.
با تقریب، نتایج خوب کافی با تلاش محاسباتی کمتر بدست می آوریم.
کاربرد تحلیل عددی در مسائل دنیای واقعی
کاربردهای زیادی از تحلیل عددی وجود دارد
در مهندسی، شبیه سازی سازه ها و سیالات را امکان پذیر می کند.
در امور مالی، برای ارزیابی ریسک و بهینه سازی پورتفولیو.
در علم محیط زیست، الگوهای آب و هوایی را پیش بینی می کند.
در هر زمینه، تجزیه و تحلیل عددی ابزاری برای حل مسائلی است که در آن ریاضی محض صرفاً زمان زیادی را صرف میکند یا نمیتوان نتایج خوبی به دست آورد.
مقدمه ای بر معادلات دیفرانسیل جزئی (PDEs)
معادلات دیفرانسیل جزئی (PDEs) معادلاتی هستند که چگونگی تغییر مقادیری مانند گرما، صدا یا الکتریسیته را در مکانهای مختلف و با گذشت زمان توصیف میکنند.
حل PDE ها بسیار مهم است. زیرا به ما این امکان را می دهد که این تغییرات را کنترل کنیم.
با اجازه دادن به ما برای کنترل آنها، می توانیم:
پیش بینی الگوهای آب و هوا
درک انتشار صدا در محیط های مختلف.
طراحی سیستم های حمل و نقل کارآمد
بهینه سازی توزیع انرژی
با این حال، بیشتر PDE را فقط با روش های عددی می توان تقریب زد.
یافتن آن از طریق محاسبات عادی یا خیلی سخت یا غیرممکن است.
به این ترتیب، با روش های عددی، ما قادر به حل PDE ها هستیم که به نوبه خود به ما امکان می دهد بسیاری از مسائل زندگی واقعی را حل کنیم.
راه حل های عددی PDE ها با SciPy
حل PDE ها با روش های عددی اغلب شامل تقسیم PDE ها به بخش های کوچک و قابل مدیریت است. هر کدام را حل کنید و سپس جمع کنید.
SciPy، یک کتابخانه پایتون برای محاسبات علمی و فنی، ابزارهای زیادی را برای این منظور ارائه می دهد.
حالا بیایید مشکل انتقال حرارت در یک میله را حل کنیم.
در کد زیر، خط به خط خواهیم دید که چگونه به ما امکان می دهد بدانیم که چگونه گرما در یک میله پخش می شود:
import numpy as np from scipy.integrate import solve_bvp def heat_equation(x, y): return np.vstack((y[1], -y[0])) def boundary_conditions(ya, yb): return np.array([ya[0], yb[0] - 1]) x = np.linspace(0, 1, 5) y = np.zeros((2, x.size)) sol = solve_bvp(heat_equation, boundary_conditions, x, y)
بیایید ببینیم که کد به صورت بلوک به بلوک در بخش های زیر چگونه کار می کند.
نحوه وارد کردن کتابخانه ها
import numpy as np from scipy.integrate import solve_bvp
در اینجا ما 2 کتابخانه پایتون را وارد می کنیم:
این دو کتابخانه پایتون از پرکاربردترین کتابخانهها در علم داده هستند.
چگونه معادله سر و شرایط مرزی را تعریف کنیم
def heat_equation(x, y): return np.vstack((y[1], -y[0])) def boundary_conditions(ya, yb): return np.array([ya[0], yb[0] - 1])
heat_equation(x, y)
و boundary_conditions(ya, yb)
را ایجاد می کنیم.
در heat_equation(x, y)
معادله دیفرانسیل را تعریف می کنیم که قصد داریم حل کنیم.
تابع boundary_conditions(ya, yb)
قیود را در ابتدا و انتهای یک راه حل تعریف می کند. شرط این است که انتهای محلول باید یک واحد کمتر از شروع باشد.
چگونه معادله را حل کنیم
x = np.linspace(0, 1, 5) y = np.zeros((2, x.size)) sol = solve_bvp(heat_equation, boundary_conditions, x, y)
خط sol = solve_bvp(heat_equation, boundary_conditions, x, y)
راه حل است.
کدsolve_bvp
مخفف حل مشکل مقدار مرزی است .
چهار آرگومان نیاز دارد:
heat_equation
: این مشکل اصلی است که ما سعی در حل آن داریم.
boundary_conditions
: اینها قیود ریاضی در ابتدا و انتهای یک راه حل هستند.
x
: نقاطی هستند که ما برای تحلیل پاسخ های خود انتخاب می کنیم.
y
: تلاش های اولیه برای حل مشکل بر اساس مقادیر x
انتخابی شما هستند.
مقدمه ای بر بهینه سازی در تحلیل عددی
بهینه سازی یافتن بهترین راه حل از میان همه راه حل ه است. این مانند یافتن کارآمدترین مسیر در شبکه پیچیده جادهها است.
روش های بهینه سازی عددی کارآمدترین یا مقرون به صرفه ترین راه حل را برای یک مسئله پیدا می کنند، خواه این باشد:
به حداقل رساندن ضایعات در تولید
به حداکثر رساندن کارایی در یک شبکه لجستیکی
یافتن بهترین تناسب برای یک مدل داده خاص
مروری بر تکنیک های بهینه سازی عددی با SciPy
هدف در این مثال به حداقل رساندن هزینه حمل و نقل در یک شبکه است.
به عنوان مثال، بیایید یک مسئله بهینه سازی در لجستیک را در نظر بگیریم، جایی که هدف به حداقل رساندن هزینه حمل و نقل در سراسر یک شبکه است.
تابع minimize
SciPy را می توان برای یافتن بهترین استراتژی برای به حداقل رساندن هزینه و در عین حال رعایت تمام محدودیت ها استفاده کرد:
from scipy.optimize import minimize def objective_function(x): return x[0]**2 + x[1]**2 def constraint_eq(x): return x[0] + x[1] - 10 con_eq = {'type': 'eq', 'fun': constraint_eq} bounds = [(0, 10), (0, 10)] x0 = [5, 5] result = minimize(objective_function, x0, method='SLSQP', bounds=bounds, constraints=[con_eq])
بیایید توضیح دهیم که کد بلوک به بلوک چگونه کار می کند.
نحوه وارد کردن کتابخانه
from scipy.optimize import minimize
یک بار دیگر کتابخانه لازم را وارد می کنیم:
نحوه تعریف معادله هدف و محدودیت
def objective_function(x): return x[0]**2 + x[1]**2 def constraint_eq(x): return x[0] + x[1] - 10 con_eq = {'type': 'eq', 'fun': constraint_eq}
تابع هدف تابعی است که ما قصد داریم برای یافتن بهترین پاسخ آن را کمینه کنیم.
معادله محدودیت معادله ای است که فضای جستجو را به مقادیر x
محدود می کند که این معادله را برآورده می کند.
con_eq
با موارد زیر تعریف می شود:
'type': 'eq'
نوع محدودیت را نشان می دهد. 'eq'
به معنای برابری است، به عبارت دیگر، تابع باید در محلول برابر با صفر باشد.
'fun': constraint_eq
تابع محدودیت را اختصاص می دهد.
ما در بلوک کد بعدی خواهیم دید، جایی که ما راه حل های ممکن مشکل را محدود می کنیم.
چگونه یک شرط اولیه و نتیجه را تعریف کنیم
bounds = [(0, 10), (0, 10)] x0 = [5, 5] result = minimize(objective_function, x0, method='SLSQP', bounds=bounds, constraints=[con_eq])
برای درک این بلوک کد، اجازه دهید هر یک از پارامترهای result = minimize(objective_function, x0, method='SLSQP', bounds=bounds, constraints=[con_eq])
درک کنیم:
objective_function
: آیا تابعی است که باید حداقل شود.
x0
: حدس اولیه برای متغیرها است.
method='SLSQP'
: این الگوریتم بهینهسازی مورد استفاده ما را مشخص میکند. در این مورد، ما از SLSQP (برنامه نویسی حداقل مربعات متوالی) استفاده می کنیم.
bounds=bounds
: این پارامتر مرزهای هر یک از متغیرهای تصمیم را مشخص می کند.
constraints=[con_eq]
: این پارامتر محدودیت های اعمال شده در مسئله بهینه سازی را به ما می گوید.
اینگونه است که بسیاری از مشکلات زندگی واقعی حل می شود
بسیاری از چیزها در زندگی واقعی با معادله دیفرانسیل جزئی مدل می شوند.
سپس با روش های بهینه سازی توسعه یافته با تحلیل عددی، بهینه سازی می شوند.
من این را می نویسم زیرا می دانم که ریاضی برای برخی افراد خسته کننده است و آنها ممکن است ندانند کجا برای حل مسائل واقعی استفاده می شود. حساب دیفرانسیل و انتگرال آنها را می توان در موقعیت های غیر ایده آل خارج از تمرینات امتحان اعمال کرد.
در اینجا، در نهایت می توانیم ببینیم که چرا ریاضی در دو سناریو مهم است:
مدل سازی سیستم ها برای گرفتن راه حل از آن
برای بهینه سازی یک سیستم خاص
نتیجه
تحلیل عددی یکی از مهمترین حوزه های ریاضی کاربردی در STEM است.
از حل PDE تا بهینه سازی مسائل، تحلیل عددی در همه جا وجود دارد.
با مسائل پیچیدهتر، اهمیت آنالیز عددی برای بدست آوردن الگوریتمهای سریعتر که جوابهای ریاضی خالص را تقریب میکنند، افزایش مییابد.
به این ترتیب پلی بین ریاضیات نظری و کاربرد عملی است.
اگر می خواهید، می توانید کد کامل استفاده شده در این مقاله را در GitHub دریافت کنید.
ارسال نظر