PDA

View Full Version : سوال: بدست آوردن ماتریس معکوس و دترمینان



agalika
چهارشنبه 15 آبان 1387, 07:36 صبح
با سلام به دوستان
برنامه که ماتریس n*n را گرفته ودترمینان و ماتریس معکوس آنرا در صورت وجود نمایش دهد لطفا هر کی بلده کمک کنه

hamed aj
چهارشنبه 15 آبان 1387, 11:51 صبح
با سلام

من این رو قبلاً نوشتم، میگردم پیدا کردم اینجا میگذارم (البته اگر کد C++ می خوای همین الان میتونم بگذارم؟)
امیدوارم این یکی رو دیگه پاک نکرده باشم

Itist82
چهارشنبه 15 آبان 1387, 12:50 عصر
اینی که گذاشتم دترمینان یه ماتریس سه در سه رو حساب می کنه، قسمتی از کد یه برنامه بود که خیلی وقت پیش نوشتم، یه خورده تازه کارانه است!
ماتریس دو در دو خیلی راحت تره




Public Function deter(x1 As Integer, x2 As Integer, x3 As Integer, y1 As Integer, y2 As Integer, y3 As Integer) As integer
Dim mat(3, 3) As Integer, i As Integer
Dim a11A1 As Long, a12A2 As Long, a13A3 As Long
Dim A1 As Integer, A2 As Integer, A3 As Integer
mat(1, 1) = x1
mat(1, 2) = y1
mat(1, 3) = 1

mat(2, 1) = x2
mat(2, 2) = y2
mat(2, 3) = 1

mat(3, 1) = x3
mat(3, 2) = y3
mat(3, 3) = 1

For i = 1 To 3
Select Case i
Case 1
A1 = mat(2, 2) * mat(3, 3) - mat(2, 3) * mat(3, 2)
a11A1 = x1 * A1
Case 2
A2 = (mat(2, 1) * mat(3, 3) - mat(2, 3) * mat(3, 1))
a12A2 = mat(1, 2) * A2
Case 3
A3 = (mat(2, 1) * mat(3, 2) - mat(2, 2) * mat(3, 1))
a13A3 = mat(1, 3) * A3
End Select
Next
i = a11A1 - a12A2 + a13A3
deter=i

End Function

[code]
6 تا عدد رو می گیره، یکی از ستون ها رو کامل 1 می ذاره بعد دترمینان رو حساب می کنه
امیدوارم به دردتون بخوره

hamed aj
جمعه 17 آبان 1387, 13:16 عصر
با سلام

این هم برنامه ای که قولش رو داده بودم

محاسبه ی دترمینان یک ماتریس n*n

با توجه به اینکه محاسبه ی دترمینان رو بصورت تابع نوشتم، محاسبه ی ماتریس معکوس هم کار ساده ای خواهد بود

این تابع بصورت recursive (بازگشتی) نوشته شده

تابع محاسبه دترمینان




Public Function Determinan(EMat() As Double) As Double

Dim i, j As Integer
Dim ClmCount As Integer

Dim EntMat() As Double
Dim Det As Double

EntMat() = EMat()

Dim newMat() As Double
ReDim newMat((UBound(EntMat) - 1), (UBound(EntMat) - 1))

Dim q As Integer


If UBound(EntMat()) > 2 Then

For ClmCount = 1 To UBound(EntMat)
q = 0
For i = 1 To UBound(EntMat)
For j = 1 To UBound(EntMat)
If (i <> 1) And (j <> ClmCount) Then
q = q + 1
newMat(i - 1, q) = EntMat(i, j)
End If
Next j
q = 0
Next i
Det = Det + EntMat(1, ClmCount) * ((-1) ^ (1 + ClmCount)) * Determinan(newMat())
Next ClmCount

ElseIf UBound(EntMat()) = 2 Then
Det = (EntMat(1, 1) * EntMat(2, 2)) - (EntMat(1, 2) * EntMat(2, 1))
End If


Determinan = Det

End Function






برنامه

25271


موفق باشید

hamed aj
یک شنبه 19 آبان 1387, 11:40 صبح
با سلام

دوستان اگر نظری راجع به برنامه بالا دارید دریغ نکنید

kurdistan132
پنج شنبه 21 آبان 1388, 12:32 عصر
با سلام

این هم برنامه ای که قولش رو داده بودم

محاسبه ی دترمینان یک ماتریس n*n

با توجه به اینکه محاسبه ی دترمینان رو بصورت تابع نوشتم، محاسبه ی ماتریس معکوس هم کار ساده ای خواهد بود

این تابع بصورت recursive (بازگشتی) نوشته شده

تابع محاسبه دترمینان




Public Function Determinan(EMat() As Double) As Double

Dim i, j As Integer
Dim ClmCount As Integer

Dim EntMat() As Double
Dim Det As Double

EntMat() = EMat()

Dim newMat() As Double
ReDim newMat((UBound(EntMat) - 1), (UBound(EntMat) - 1))

Dim q As Integer


If UBound(EntMat()) > 2 Then

For ClmCount = 1 To UBound(EntMat)
q = 0
For i = 1 To UBound(EntMat)
For j = 1 To UBound(EntMat)
If (i <> 1) And (j <> ClmCount) Then
q = q + 1
newMat(i - 1, q) = EntMat(i, j)
End If
Next j
q = 0
Next i
Det = Det + EntMat(1, ClmCount) * ((-1) ^ (1 + ClmCount)) * Determinan(newMat())
Next ClmCount

ElseIf UBound(EntMat()) = 2 Then
Det = (EntMat(1, 1) * EntMat(2, 2)) - (EntMat(1, 2) * EntMat(2, 1))
End If


Determinan = Det

End Function






برنامه

25271


موفق باشید

دوست عزیز اگه کدشو با زبان C# هم بذاری ممنون میشم

mansoor-sg
پنج شنبه 07 اردیبهشت 1391, 07:23 صبح
با سلام

دوستان اگر نظری راجع به برنامه بالا دارید دریغ نکنید

با سلام،
برنامه ی شما همیشه صفر برمیگردونه.
لطفا راهنمایی کنید.
با تشکر