All pastes #2066346 Raw Edit

Unnamed

public text v1 · immutable
#2066346 ·published 2011-05-21 20:14 UTC
rendered paste body
Private Sub Euler(ByVal f As Array, ByVal U As Array, ByVal Steps As Single, ByVal SimTime As Double, ByVal m1 As Double, ByVal m2 As Double, ByVal k1 As Double, ByVal k2 As Double, ByVal b1 As Double, ByVal b2 As Double)

        Dim x1 As Array = Array.CreateInstance(GetType(Double), CInt(Steps))
        Dim x2 As Array = Array.CreateInstance(GetType(Double), CInt(Steps))
        Dim v As Array = Array.CreateInstance(GetType(Double), CInt(Steps)) ' pochodna U
        Dim v1 As Array = Array.CreateInstance(GetType(Double), CInt(Steps)) 'pochodna x1
        Dim v2 As Array = Array.CreateInstance(GetType(Double), CInt(Steps)) 'pochodna x2


        x1(0) = 0
        x2(0) = 0
        v(0) = 0
        v1(0) = 0
        v2(0) = 0

        Dim h As Double = SimTime / Steps
        Dim v1new, x1new As Double
        Dim v2new, x2new As Double
        Dim vnew As Double

        For i As Integer = 0 To CInt(Steps - 2)
            v1new = v1(i) + h * (k1 / m1 * (x2(i) - x1(i)) + b1 / m1 * (v2(i) - v1(i)) + f(i))
            x1new = x1(i) + h * v1(i)

            v2new = v2(i) + h * (k1 / m2 * (x2(i) - x1(i)) + b1 / m2 * (v1(i) - v2(i)) + k2 / m2 * (U(i) - x2(i)) + b2 / m2 * (v(i) - v2(i)))
            x2new = x2(i) + h * v2(i)

            vnew = v(i) + h * U(i)

            v1(i + 1) = v1new
            x1(i + 1) = x1new

            v2(i + 1) = v2new
            x2(i + 1) = x2new

            v(i) = vnew

        Next

        Dim HTab As Array = Array.CreateInstance(GetType(Double), CInt(Steps))
        Dim HTab2 As Array = Array.CreateInstance(GetType(Double), CInt(Steps))
        Dim n As Integer
        n = 0
        Rysuj(PictureBox2, x1, HTab2, CInt(Steps), h, SimTime, n)

        n = 1
        Rysuj(PictureBox2, x2, HTab, CInt(Steps), h, SimTime, n)

        Tabela(x1, x2, f, U, Steps)

        Dim fuckyou As Bitmap = PictureBox3.Image
        fuckyou.Save("as1.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
        PictureBox3.Image.Save("as2.bmp", System.Drawing.Imaging.ImageFormat.Bmp)

    End Sub

Private Sub Rysuj(ByVal e As PictureBox, ByVal Arr As Array, ByVal H As Array, ByVal Steps As Integer, ByVal TimeStep As Double, ByVal SimTime As Double, ByVal n As Integer)

        Dim g As Graphics = Graphics.FromImage(e.Image)
        'Dim g As Graphics = e.CreateGraphics
        'Dim j As 
        Dim kk As Double
        H = Arr.Clone
        Array.Sort(H)
        Dim MaxArr As Double = H.GetValue(CInt(Steps - 1))
        Dim MinArr As Double = H.GetValue(0)

        If Math.Abs(MinArr) > MaxArr Then
            kk = MinArr
            g.DrawString(CStr(MinArr), Font3, Brushes.Red, xPos + 12, yPos + (yRectSize + 10) * n + 120)
            kk = Math.Abs(MinArr)
            g.DrawLine(Pens.Red, xPos + 8, yPos + (yRectSize + 10) * n + 15 + 120, xPos + 12, yPos + (yRectSize + 10) * n + 15 + 120)
        Else
            kk = Math.Abs(MaxArr)
            g.DrawString(CStr(MaxArr), Font3, Brushes.Red, xPos + 12, yPos + (yRectSize + 10) * n)
            g.DrawLine(Pens.Red, xPos + 8, yPos + (yRectSize + 10) * n + 15, xPos + 12, yPos + (yRectSize + 10) * n + 15)
        End If

        If kk = 0 Then
            kk = 1
        End If

        For k As Integer = 0 To CInt(Steps - 2)
            If Arr(k + 1) > 10000000000 Then
                k = CInt(Steps - 3)
                MsgBox("Overflow")
            End If

            g.DrawLine(Pens.Blue, CInt(xPos + 10 + k * TimeStep * xRectSize / SimTime), CInt(yPos + (yRectSize + 10) * n + yRectSize / 2 - Arr(k) * 120 / kk), CInt(xPos + 10 + (k + 1) * TimeStep * xRectSize / SimTime), CInt(yPos + (yRectSize + 10) * n + yRectSize / 2 - Arr(k + 1) / kk * 120))


        Next k

       
    End Sub