در پایتون تابعی بنویسید که با استفاده از روش ذوزنقهای (Trapezoidal rule) عددی انتگرال یک تابع دلخواه را روی بازه [a, b] با n بخش محاسبه کند و با استفاده از numpy برداریزهسازی را انجام دهد.
3.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:14 0.0
برای حل این مسئله در پایتون از numpy برای ایجاد نقاط شبکه و محاسبهی مقادیر تابع بهصورت برداری استفاده کنید، سپس فرمول ذوزنقهای را روی آرایهها اعمال کنید. ورودیها شامل تابع f، حد پایین a، حد بالا b و تعداد بخشها n باشند؛ گام h = (b-a)/n است و نتیجه جمع وزنی مقادیر f در نقاط شبکه ضرب در h خواهد بود. برای افزایش کارایی از نگاشت برداری numpy و نوع داده float64 استفاده کنید و برای بررسی صحت میتوانید نتیجه را با تابع scipy.integrate.quad مقایسه کنید یا n را افزایش دهید تا همگرایی مشاهده شود؛ در صورت نیاز به سرعت بیشتر میتوان از numba یا موازیسازی بهره برد.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای بهرهگیری از برداری، x را با np.linspace(a, b, n+1) بسازید و f را روی آرایه x اعمال کنید تا مقادیر f(x) به دست آید. نتیجه نهایی با فرمول ذوزنقهای: h * (0.5*f[0] + f[1:-1].sum() + 0.5*f[-1]) باشد که h=(b-a)/n است. برای کارایی، از dtype=float64 استفاده کنید و تابع خود را به صورت برداری پیادهسازی کنید یا در صورت لازم از np.vectorize سود ببرید؛ اگر f با آرایهها سازگار نیست، تبدیل آن به آرایه را انجام دهید. برای اعتبارسنجی، نتیجه را با scipy.integrate.quad مقایسه کنید یا با افزایش n همگرایی را بررسی کنید و در صورت نیاز از numba یا موازیسازی برای سرعت بیشتر استفاده کنید.
گزارش