یک برنامه به زبان C++ بنویسید که یک ماتریس مربعی و بردار راستطرف را گرفته و با استفاده از حذف گاوسی همراه با partial pivoting (یافتن سطر حاوی قدر مطلق بیشینه برای هر pivot و تعویض سطرها با std::swap) دستگاه را حل کرده و بردار پاسخ را چاپ کند.
3.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:06 0.0
برای پیادهسازی از کتابخانهٔ استاندارد C++ استفاده کنید و هدر را برای تابع std::swap اضافه کنید؛ ماتریس را میتوان بهصورت vector> یا بهصورت بردار یکبعدی مسطح نگهداری کرد. برای هر ستون pivot، سطر با بیشینه مقدار قدر مطلق را پیدا کرده و با std::swap سطرها (و عنصر متناظر در بردار راستطرف) جابجا کنید، سپس عملیات حذف را انجام دهید و در پایان با روش بازگشتی (back substitution) جوابها را محاسبه کنید. نکات: از double استفاده کنید، وجود pivot نزدیک به صفر را بررسی نموده و برای کارایی در محیطهای HPC به مرتبسازی حافظه (ذخیرهٔ مسطح و دسترسی بهصورت سطری) و کاهش کپیهای غیرضروری توجه کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکتهٔ کلیدی در این پیادهسازی، استفاده از حذف گاوسی با pivoting جزئی است تا از تقسیم بر مقادیر نزدیک به صفر جلوگیری شود. برای کارایی در HPC، ماتریس را بهصورت یکبعدی با چیدمان row-major ذخیره کنید تا دسترسی به عناصر در هر سطر پیوسته باشد و از std::swap برای جابجایی سطرها و مقادیر متناظر در بردار راستطرف استفاده کنید. قبل از هر تقسیم، قدر مطلق pivot را بررسی کنید و اگر بسیار کوچک بود، با جابهجایی سطری که قدر مطلق بزرگتر دارد اقدام کنید. در پایان با روش بازگشتی، جوابهای بردار پاسخ را محاسبه کنید و به احتمال وجود ماتریس نامعین توجه کنید.
گزارش