تابعی در پایتون بنویسید که با استفاده از ماژول decimal انتگرال یک تابع را با روش ذوزنقه‌ای (trapezoidal rule) در بازه [a, b] با n بخش و دقت دلخواه محاسبه کند.

1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:29

0.0

برای حل، از کلاس Decimal و تنظیم precision در decimal.getcontext() استفاده کنید؛ همهٔ مقادیر (a, b, n، نتایج میانی و گام h) را به Decimal تبدیل کنید تا محاسبات با دقت بالا انجام شود. فرمول ذوزنقه‌ای: h = (b-a)/n و integral ≈ h*( (f(a)+f(b))/2 + Σ f(a+i*h) ) را پیاده‌سازی کنید. نکات: ورودی‌های شناور را قبل از استفاده به Decimal تبدیل کنید، برای عملکرد ابتدایی از لیست‌تولیدها یا حلقه ساده بهره ببرید و اگر n بزرگ است مراقب زمان اجرا باشید (برای محاسبات مقیاس‌پذیر در HPC معمولاً از روش‌های برداری/نویتی متفاوت استفاده می‌شود).

توسط پژوهشگر در 221 روز قبل ساعت 01:29
دسته بندی ها: Python Python for beginner
arash در 221 روز قبل ساعت 13:07

برای پیاده‌سازی با decimal، مقدار دقت را با getcontext().prec تنظیم کن و ورودی‌های a، b و n را به Decimal تبدیل کن تا گام h و تمامی مقادیر میانی به‌طور دقیق محاسبه شوند. گام h به صورت Decimal محاسبه می‌شود و از طریق حلقهٔ ساده یا یک ژنراتور، جمع ف(a+i·h)ها را به‌همراه (f(a)+f(b))/2 انجام بده و نتیجه را با فرمول ذوزنقه‌ای ضرب کن تا مقدارIntegral به‌دست آید. برای تابع f، ورودی‌های Decimal را بپذیرد یا یک wrapper بساز تا خروجی Decimal بدهد تا دقت حفظ شود. همچنین به یاد داشته باش که هرچقدر n بزرگ باشد، زمان اجرا افزایش می‌یابد و در کاربردهای HPC معمولاً از برداری‌سازی یا روش‌های مناسب دیگر استفاده می‌شود.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری