View Full Version : خبر: حل N معادله N مجهولی
  
milade8080
یک شنبه 18 اسفند 1392, 09:55 صبح
سلام دوستان، اگر یادتون باشه من میخواستم تو اکسس فرمی داشته باشم برای حل معادله چند مجهولی، پس از کلی جستجو و گذاشتن پیغام یکی از دوستان فرمی را با اکسس برای حل معادله فقط 4*4 برام ایمیل کرده
سئوال: برای معادلات 3*3  و 5*5 یا بیشتر باید چکار کنم؟ ممنون میشم کسی منو راهنمایی کنه؟
لینک دانلود فایل اکسس برای معادلات 4*4
http://www.access-programmers.co.uk/forums/attachment.php?attachmentid=52914&d=1394298480
لینک کمکی
http://www.uplooder.net/cgi-bin/dl.cgi?key=c1d268ffd8c73de71acce9668250532d
mazoolagh
یک شنبه 18 اسفند 1392, 22:51 عصر
حل n معادله n مجهول که مورد نظر شماست رو بهش میگن دستگاه معادلات خطی و برای حل این دستگاه هم روش (آلگوریتم) های مختلفی هست که روش حذف گوسی از همه متداولتر هست و برنامه ای هم که براتون فرستادن باحتمال خیلی زیاد بر مبنای همین الگوریتم هست.
با گوگل کردن آلگوریتمش رو پیدا کنین و از روی اون تغییرات لازم در کد رو اعمال کنین. اگر برنامه خوشرفتار باشه احتمالا تغییرات در حد جایگزین کردن عدد 4 با عدد دلخواه شماست!
milade8080
دوشنبه 19 اسفند 1392, 09:13 صبح
حل n معادله n مجهول که مورد نظر شماست رو بهش میگن دستگاه معادلات خطی و برای حل این دستگاه هم روش (آلگوریتم) های مختلفی هست که روش حذف گوسی از همه متداولتر هست و برنامه ای هم که براتون فرستادن باحتمال خیلی زیاد بر مبنای همین الگوریتم هست.
با گوگل کردن آلگوریتمش رو پیدا کنین و از روی اون تغییرات لازم در کد رو اعمال کنین. اگر برنامه خوشرفتار باشه احتمالا تغییرات در حد جایگزین کردن عدد 4 با عدد دلخواه شماست!
سلام
بابت جوابتون ممنون، مشکل من اینه که از برنامه نویسی هیچی نمیدونم
اینم کد برنامش:
Option Compare Database
Private Sub Solve_Click()
Dim a(4, 4) As Double
Dim b(4) As Double
Dim n As Integer
Dim temp As Double
n = UBound(a, 1)
'read the values from the form
For r = 1 To n
    For c = 1 To n
        a(r, c) = Nz(Me.Controls("a" & r & c), 0)
    Next c
    b(r) = Nz(Me.Controls("b" & r), 0)
Next r
'reduce to triangular form
For c = 1 To n - 1
    'swap rows if necessary
    For r = c + 1 To n
        If Abs(a(r, c)) > Abs(a(c, c)) Then
            'swap the rows
            For i = c To n
                temp = a(c, i)
                a(c, i) = a(r, i)
                a(r, i) = temp
            Next i
            temp = b(c)
            b(c) = b(r)
            b(r) = temp
        End If
    Next r
    For r = c + 1 To n
        factor = a(r, c) / a(c, c)
        For i = c To n
            a(r, i) = a(r, i) - factor * a(c, i)
        Next i
        b(r) = b(r) - factor * b(c)
    Next r
Next c
'Back substitute and solve
For r = n To 1 Step -1
    If r <> n Then
        For c = r + 1 To n
            b(r) = b(r) - a(r, c) * b(c)
            a(r, c) = 0
        Next c
    End If
    b(r) = b(r) / a(r, r)
    a(r, r) = 1
Next r
'output the solution to the form
For r = 1 To n
    Me.Controls("s" & r) = b(r)
Next r
End Sub
Private Sub printMatrix(ByRef a() As Double, ByRef b() As Double)
    'this is used only for debugging
    n = UBound(a, 1)
    Debug.Print
    For r = 1 To n
        For c = 1 To n
            Debug.Print Tab(c * 8 - 7);
            Debug.Print Round(a(r, c), 2);
        Next c
        Debug.Print Tab(n * 8 + 8);
        Debug.Print Round(b(r), 2)
    Next r
End Sub
---------------------------------------------------
کد بالا را برای معادلات 5 مجهولی دستکاری کردم ولی با یک ارر مواجه شدم به شکل زیر :
http://upload7.ir/imgs/2014-03/96200347990642613653.jpg
mazoolagh
دوشنبه 26 اسفند 1392, 12:50 عصر
برنامه خوش رفتار نیست و برای 4 مجهول هاردکد شده. البته ایرادهای دیگه ای هم داره مثلا اگر دستگاه جواب نداشته باشه نمیتونه تشخیص بده
موقتا بصورت زیر تغییرش بدین و بعد ظاهرش رو هر طور دوست داشتین بسازین:
همه کنترلها بجز باتن SOLVE رو حذف کنین
Private Sub Solve_Click()
Dim A() As Double
Dim B() As Double
Dim N As Integer
Dim r, c, i As Integer
Dim temp, factor As Double
try:
N = InputBox("number of variables (1 to 10)")
If N < 1 Or N > 10 Then GoTo try
ReDim A(1 To N, 1 To N)
ReDim B(1 To N)
'read the values from the form
For r = 1 To N
    For c = 1 To N
        'A(r, c) = Nz(Me.Controls("a" & r & c), 0)
        A(r, c) = InputBox("A(" + Trim(r) + "," + Trim(c) + ")")
    Next c
    'B(R) = Nz(Me.Controls("b" & R), 0)
    B(r) = InputBox("B(" + Trim(r) + ")")
Next r
'reduce to triangular form
For c = 1 To N - 1
    'swap rows if necessary
    For r = c + 1 To N
        If Abs(A(r, c)) > Abs(A(c, c)) Then
            'swap the rows
            For i = c To N
                temp = A(c, i)
                A(c, i) = A(r, i)
                A(r, i) = temp
            Next i
            temp = B(c)
            B(c) = B(r)
            B(r) = temp
        End If
    Next r
    For r = c + 1 To N
        factor = A(r, c) / A(c, c)
        For i = c To N
            A(r, i) = A(r, i) - factor * A(c, i)
        Next i
        B(r) = B(r) - factor * B(c)
    Next r
Next c
'Back substitute and solve
For r = N To 1 Step -1
    If r <> N Then
        For c = r + 1 To N
            B(r) = B(r) - A(r, c) * B(c)
            A(r, c) = 0
        Next c
    End If
    B(r) = B(r) / A(r, r)
    A(r, r) = 1
Next r
'output the solution to the form
For r = 1 To N
    'Me.Controls("s" & R) = B(R)
    MsgBox ("X(" + Trim(r) + ")=" + Str(B(r)))
Next r
End Sub
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.