از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش اعمال ریاضی با پایتون – تحلیل عددی توضیح داده شده است
سرفصلهای مطلب
تحلیل عددی پل ارتباطی بین ریاضی و علوم کامپیوتر است.
اساساً، این توسعه الگوریتمهایی است که راهحلهایی را تقریب میکنند که ریاضی خالص نیز حل میکند، اما با استفاده از منابع محاسباتی کمتر و سریعتر.
این رشته بسیار مهم است. زیرا برای اکثر راه حل ها در دنیای واقعی، ما فقط به تقریب های خوب نیاز داریم و نه راه حل های دقیق.
در این مقاله به بررسی موارد زیر خواهیم پرداخت:
- قیاس نشان دهنده اهمیت آنالیز عددی
- مبانی تحلیل عددی
- کاربرد تحلیل عددی در مسائل دنیای واقعی
- مقدمه ای بر معادلات دیفرانسیل جزئی (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
ما اینجاییم import 2 python کتابخانه ها:
- NumPy
- SciPy
این دو python کتابخانه ها برخی از پرکاربردترین ها در علم داده هستند.
چگونه معادله سر و شرایط مرزی را تعریف کنیم
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
هدف در این مثال به حداقل رساندن هزینه حمل و نقل در یک شبکه است.
به عنوان مثال، بیایید یک مسئله بهینه سازی در لجستیک را در نظر بگیریم، جایی که هدف به حداقل رساندن هزینه حمل و نقل در سراسر یک شبکه است.
SciPy’s minimize
تابع را می توان برای یافتن بهترین استراتژی برای به حداقل رساندن هزینه در حین رعایت تمام محدودیت ها استفاده کرد:
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
یک بار دیگر ما import کتابخانه لازم:
روش تعریف معادله هدف و محدودیت
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 (Sequential Least SQuares Programming) استفاده می کنیم.bounds=bounds
: این پارامتر مرزهای هر یک از متغیرهای تصمیم را مشخص می کند.constraints=[con_eq]
: این پارامتر محدودیت های اعمال شده در مسئله بهینه سازی را به ما می گوید.
اینگونه است که بسیاری از مشکلات زندگی واقعی حل می شود
بسیاری از چیزها در زندگی واقعی با معادله دیفرانسیل جزئی مدل می شوند.
سپس با روش های بهینه سازی توسعه یافته با تحلیل عددی، بهینه سازی می شوند.
من این را می نویسم زیرا می دانم که ریاضی برای برخی افراد خسته کننده است و آنها ممکن است از جایی که برای حل مسائل واقعی استفاده می شود آگاه نباشند. حساب دیفرانسیل و انتگرال آنها را می توان در موقعیت های غیر ایده آل خارج از تمرینات امتحان اعمال کرد.
در اینجا، در نهایت می توانیم ببینیم که چرا ریاضی در دو سناریو مهم است:
- مدل سازی سیستم ها برای گرفتن راه حل از آن
- برای بهینه سازی یک سیستم خاص
نتیجه
تحلیل عددی یکی از مهمترین حوزه های ریاضی کاربردی در STEM است.
از حل PDE تا بهینه سازی مسائل، تحلیل عددی در همه جا وجود دارد.
با مسائل پیچیدهتر، اهمیت آنالیز عددی برای بدست آوردن الگوریتمهای سریعتر که جوابهای ریاضی خالص را تقریب میکنند، افزایش مییابد.
به این ترتیب پلی بین ریاضیات نظری و کاربرد عملی است.
در صورت تمایل می توانید کد کامل استفاده شده در این مقاله را دریافت کنید روی GitHub.
منتشر شده در 1403-02-29 16:42:11