kavehmj
سه شنبه 17 آذر 1394, 19:22 عصر
سلام.
دوستان من به یک مشکل بسیار عجیبی برخورد کردم.
من تابعی برای محاسبه ی دترمینان ماتریس نوشته بودم. تابع رو هم با انواع و اقسام ماتریس ها چک کردم و هر دفعه به جواب های درستی می رسیدم.
مشکلم این هست که در کد من، در یک جایی به یک ماتریس 6x6 می رسم. وقتی می خواهم دترمینان آن را حساب کنم، به یک عددی می رسم که غلط است.
اما همین ماتریس 6x6 رو وقتی در محیط کامپایلر وارد می کنم، برنامه مقدار دترمینان را به درستی حساب می کند. (مقدار درست رو با برنامه متلب چک کردم.)
کد من به شرح زیر است:
137336137336
طی فرآیند برنامه، ماتریس Kbound که در این مثال یه ماتریس 6x6 هست ساخته می شه.
همین ماتریس رو من به صورت دستی در خط 1910 با نام Kbound2 وارد کردم.
وقتی که برنامه یک بار در خط 1903 دترمینان Kbound رو حساب می کند و سپس در خط 1930 دترمینان Kbound2 رو حساب می کند (که این دو ماتریس با هم برابر هستند) به دو جواب کاملا متفاوت می رسم.
دترمینان رو به روش گاوس این تابع حساب می کنه. نام تابع هم Determinant2 هست.
توابعی رو هم در تابع Determinant2 تعریف کردم که در هر مرحله خروجی بگیره که بفهمم مشکلش چیه.
چیزایی که تا الان فهمیدم اینه:
هر دو ماتریس با مقادیر کاملا یکسان وارد تابع می شوند.
اما در طول فرآیند محاسبه که در هر مرحله ماتریس از سطر و ستون یک واحد کوچک تر می شود، برخی از درایه هاشون با یکدیگر متفاوت می شود. به همین دلیل در انتها جواب دترمینان دو جواب متفاوت خواهد بود.
کامپایلرم هم Microsoft Visual Studio 2013 هست. حتی با DEV هم امتان کردم. باز هم جواب ماتریسی که در طول برنامه تشکیل می شه دترمینان غلطی می ده و مقدارش هم با کامپایلر MVS13 متفاوته.
ممنون می شوم اگر راهنمایی ام کنید که مشکل از کجاست.
دوستان من به یک مشکل بسیار عجیبی برخورد کردم.
من تابعی برای محاسبه ی دترمینان ماتریس نوشته بودم. تابع رو هم با انواع و اقسام ماتریس ها چک کردم و هر دفعه به جواب های درستی می رسیدم.
مشکلم این هست که در کد من، در یک جایی به یک ماتریس 6x6 می رسم. وقتی می خواهم دترمینان آن را حساب کنم، به یک عددی می رسم که غلط است.
اما همین ماتریس 6x6 رو وقتی در محیط کامپایلر وارد می کنم، برنامه مقدار دترمینان را به درستی حساب می کند. (مقدار درست رو با برنامه متلب چک کردم.)
کد من به شرح زیر است:
137336137336
طی فرآیند برنامه، ماتریس Kbound که در این مثال یه ماتریس 6x6 هست ساخته می شه.
همین ماتریس رو من به صورت دستی در خط 1910 با نام Kbound2 وارد کردم.
وقتی که برنامه یک بار در خط 1903 دترمینان Kbound رو حساب می کند و سپس در خط 1930 دترمینان Kbound2 رو حساب می کند (که این دو ماتریس با هم برابر هستند) به دو جواب کاملا متفاوت می رسم.
دترمینان رو به روش گاوس این تابع حساب می کنه. نام تابع هم Determinant2 هست.
توابعی رو هم در تابع Determinant2 تعریف کردم که در هر مرحله خروجی بگیره که بفهمم مشکلش چیه.
چیزایی که تا الان فهمیدم اینه:
هر دو ماتریس با مقادیر کاملا یکسان وارد تابع می شوند.
اما در طول فرآیند محاسبه که در هر مرحله ماتریس از سطر و ستون یک واحد کوچک تر می شود، برخی از درایه هاشون با یکدیگر متفاوت می شود. به همین دلیل در انتها جواب دترمینان دو جواب متفاوت خواهد بود.
کامپایلرم هم Microsoft Visual Studio 2013 هست. حتی با DEV هم امتان کردم. باز هم جواب ماتریسی که در طول برنامه تشکیل می شه دترمینان غلطی می ده و مقدارش هم با کامپایلر MVS13 متفاوته.
ممنون می شوم اگر راهنمایی ام کنید که مشکل از کجاست.