ورود

View Full Version : مبتدی: مشکل در نرم افزار محاسبه دترمینان



kalantar1991
پنج شنبه 04 آذر 1389, 14:43 عصر
سلام بچه ها من یه برنامه برای محاسبه دترمینان تو توربو پاسکال 7 نوشتم اما درتمینان رو اشتباه حساب مبکنه هر چیم فکر کردم نفهمیدم مشکلش از کجاست
اینم سورس شو زمیمه می کنم

hadisalahi2
پنج شنبه 04 آذر 1389, 17:24 عصر
اگه یه سرچ توی اینترنت بزنی خیلی سریع تر به جواب میرسی.

kalantar1991
پنج شنبه 04 آذر 1389, 18:16 عصر
میدونم سورس نرم افزار محاسبه دترمینان تو اینترنت هست
من می خوام بدونم اشکال نرم افزار من کجاست
چون هرجوری که بش نگاه می کنم کامل به نظرم می رسه اما مقادیر محاسبه شده اشتباه بدست می یاد

mrbm_2007
پنج شنبه 04 آذر 1389, 19:38 عصر
سلام
قسمت مربوط به حذف سطر و ستون و محاسبه ی دترمینان ماتریس حاصل از حذف به نظر اشتباهه
باید یک سطر مثلا سطر اول رو در نظر بگیری و روی همین سطر جلو بری یعنی همیشه سطر اول عوض بشه و یکی از ستون ها
متغیر a هم که برای تعیین علامت استفاده شد باید -1 به توان مجموع اندیس سطر و ستون خذف شده باشه
و از det استفاده شده در صورتی که هنوز محاسبه نشده! اصلا به این متغیر (آرایه ی det نیازی نیست) بعد از حذف سطر و ستون دترمینان ماتریس جدید را محاسبه کن و در ضریبش ضرب کن و به determinant اضافه کن.
در ضمن determinant باید با صفر مقدار دهی اولیه هم بشه
ولی به هر حال این روش برای محاسبه دترمینان روش مناسبی نیست. بهتر از روشهایی مثل Gauss elemination استفاده کنید! سعی کنید ماتریس را قطری کنید سپس دتر مینان همان حاصلضرب درایه های روی قطر اصلی است.
روش مورد استفاده ی شما بسیار کند است و به حافظه بیشتری هم نیاز خواهد داشت (حتی ممکن است stack overflow رخ دهد)!

vcldeveloper
پنج شنبه 04 آذر 1389, 23:39 عصر
متاسفانه شما با برنامه های بازگشتی آشنایی ندارین

شاید هزار روش دیگه واسه محاسبه دترمینان باشه (که نیست) اما این برنامه با تابع بازگشتی نوشته شده
الگوریتم های بازگشتی از نظر کارایی معمولا جزو الگوریتم های با کارایی پایین محسوب میشند، و یکی از موارد رایج بهینه سازی کد، تبدیل این الگوریتم ها به الگوریتم های غیر بازگشتی هست. علت ناکارامدی شون هم یکی همون بحث stack overflow هست، و دیگری سربار بالای فراخوانی تابع به دفعات.

وقتی سوال می پرسید، و دیگران سعی می کنند بهتون کمک کنند، این درست نیست که باهاشون اینطور برخورد کنید. شما یا خودتان جواب مشکل تان را دارید، یا از دیگران برای حل آن کمک می خواید. اگر کسی قصد کمک داشت، و مطلبی مطرح کرد، شما اگر بر فرض اون مطلب را قبول نداشتید، باید به طور فنی اظهار نظر کنید. نه اینکه اینطوری اظهار نظر کنید، و دیگران را از جواب دادن به سوال خودتان پشیمان کنید!

kalantar1991
جمعه 05 آذر 1389, 00:05 صبح
آخه ایراد فنی نگرفته که من فنی جواب بدم
برگشته می گه تو بلد نیستی دترمینان بگیری
یا صورت مسئله رو پاک می کنه میگه اصلا از یه روش دیگه برو
عزیز من استاد من گفته با روش بازگشتی دترمینان رو به روش بسط لاپلاس محاسبه کن نه هر راه دیگه ای

mrbm_2007
جمعه 05 آذر 1389, 00:14 صبح
متاسفانه شما با برنامه های بازگشتی آشنایی ندارین
ولی من فکر میکردم آشنایی دارم!!!!:لبخند: (جنبه دارم ناراحت نمیشم)
میدونم عزیم وفهمیدم که برنامه ات بازگشتی است
مشکلات برنامت رو هم گفتم (از نظر خودم)
حتی اگه وقت داشتم خودم برات مشکلاتش رو بر طرف می کردم!
اون هم یه پیشنهاد بود چون دیدم برنامت کنده و حافظه گیر هم هست. نخواستی استفاده نکن!

از شما هم ممنون آقای علی کشاورز (http://barnamenevis.org/forum/member.php?u=4729) :تشویق:(مخلصم)

kalantar1991
جمعه 05 آذر 1389, 10:14 صبح
از کمک های همتون متشکرم
اون پستم من پاک کردم همون دیروز
و مشکل برنامه ام هم با دو خط بالا بردن دستور فراخوانی دوباره درست شد
فقط همین
البته آقای mrbm هم یه همچین چیزی گفتن در مورد تعریف det و این چیزا
از همتون متشکرم

kalantar1991
جمعه 05 آذر 1389, 11:01 صبح
بازم از همتون تشکر می کنم
اینم برنامه اصلاخ شدم(ضمیمه)