Ecuaciones de Newton-Raphson simples

Iniciado por karurosu, Junio 11, 2014, 10:34:22 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 11, 2014, 10:34:22 AM Ultima modificación: Junio 11, 2014, 11:10:01 AM por Lah-Vahn
Bueno pues por si alguien quiere practicar o algo, les dejo este código que hice hace poco que es para obtener ecuaciones de newton-raphson simples con un máximo de 4 variables a través de los cortes de cadena, espero les sirva mínimo como ejemplo respecto a ciertas funciones que les llamen la atención, aunque el programa es bastante simple, consta de 3 formularios, la presentación, el segundo en el que ingresas la función y el tercero que te muestra los resultados.



Código: php

Public Class Form3

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'salir
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        End
    End Sub

    Private Sub Button23_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button23.Click
        'comenzar
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        Me.Hide()
        Form1.Show()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox("1.- Presione 'comenzar' para continuar o 'salir' para cerrar el programa." & vbCrLf & "2.- Escriba la función con los botones de la pantalla y el valor inicial de Xi con el teclado, no olvide poner siempre '+' o '-' dependiendo del signo sin importar que sea el primer elemento de la función." & vbCrLf & "3.- Si no coloca ningún valor en Xi se tomará como un valor inicial de 0." & vbCrLf & "4.- Presione 'guardar valores' para continuar y luego coloque el número de variables, sólo se permiten entre 1 y 4 variables." & vbCrLf & "5.- Si desea colocar sólo una 'x' escriba 'x^1' pues esto no afecta la función, o si desea colocar sólo un número por ejemplo '6' escriba '6x^0' pues esto tampoco afecta la función." & vbCrLf & "7.- Se mostrarán los resultados, presione 'volver' para regresar o 'salir' para finalizar el programa.", MsgBoxStyle.Information, "Instrucciones")
    End Sub

    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Arranque del formulario
        My.Computer.Audio.Play(My.Resources.inicio, AudioPlayMode.BackgroundLoop)
    End Sub
End Class




Código: php
Public Class Form1

    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button.Click
        'botón 1
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "1"
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'botón 2
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "2"
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'botón 3
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "3"
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        'botón 4
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "4"
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        'botón 5
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "5"
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        'botón 6
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "6"
    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        'botón 7
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "7"
    End Sub

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        'botón 8
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "8"
    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        'botón 9
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "9"
    End Sub

    Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
        'botón +
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "+"
    End Sub

    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        'botón -
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "-"
    End Sub

    Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'botón *
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "*"
    End Sub

    Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'botón /
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "/"
    End Sub

    Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click
        'botón ^
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "^"
    End Sub

    Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
        'botón x
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "x"
    End Sub

    Private Sub Button21_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button21.Click
        'botón retroceso
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        If TextBox1.Text.Length > 0 Then
            TextBox1.Text = TextBox1.Text.Remove(TextBox1.Text.Length - 1, 1)
        Else
            MsgBox("No hay carácteres que borrar.", MsgBoxStyle.Information, "Error")
        End If
    End Sub

    Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
        'botón 0
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "0"
    End Sub

    Private Sub Button17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button17.Click
        'botón guardar
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        funcion = TextBox1.Text
        If funcion <> "" Then
            xi = Val(TextBox2.Text)
            n = InputBox("Ingrese los términos:")
            Me.Close()
            Form2.Show()
        Else
            MsgBox("Por favor escriba la función.", MsgBoxStyle.Exclamation, "Alto")
        End If
    End Sub

    Private Sub Button18_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button18.Click
        'botón salir
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        End
    End Sub

    Private Sub Button22_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button22.Click
        'punto
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Text = TextBox1.Text & "."
    End Sub

    Private Sub Button23_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button23.Click
        'botón limpiar
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        TextBox1.Clear()
        TextBox2.Clear()
        xi = 0
        funcion = ""
        n = 0
    End Sub
End Class




Código: php
Public Class Form2

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'botón salir
        End
    End Sub

    Private Sub Button18_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button18.Click
        'botón volver
        My.Computer.Audio.Play(My.Resources.click, AudioPlayMode.Background)
        Form1.TextBox1.Text = funcion
        Form1.TextBox2.Text = xi
        Me.Close()
        Form1.Show()
    End Sub

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'arranque del formulario
        My.Computer.Audio.Play(My.Resources.tambor, AudioPlayMode.WaitToComplete)
        Dim tamaño As Integer = 0
        Dim corte As String
        Dim uno As Integer
        Dim dos As Integer
        Dim tres As Integer
        Dim cuatro As Integer
        Dim bandera As Integer
        Dim signo1 As Integer
        Dim signo2 As Integer
        Dim signo3 As Integer
        Dim signo4 As Integer
        Dim bloque1 As Double = 1
        Dim bloque2 As Double = 1
        Dim bloque3 As Double = 1
        Dim bloque4 As Double = 1
        Dim exponente As Integer
        Dim numero1 As Double = 0
        Dim numero2 As Double = 0
        Dim numero3 As Double = 0
        Dim numero4 As Double = 0
        Dim corte2 As String = 0
        Dim marca As Integer = 0
        bandera = 0

        For ciclo = 0 To 15
            bloque1 = 1
            bloque2 = 1
            bloque3 = 1
            bloque4 = 1
            iteracion(ciclo) = ciclo
            TextBox1.Text = TextBox1.Text & iteracion(ciclo) & vbCrLf
            TextBox2.Text = TextBox2.Text & xi & vbCrLf
            If n = 4 Then
                tamaño = Len(funcion)
                For x = 1 To tamaño
                    corte = Mid(funcion, x, 1)
                    If corte = "+" Or corte = "-" Then
                        If bandera = 3 Then
                            cuatro = x
                            bandera = 4
                            If corte = "+" Then
                                signo4 = 1
                            Else
                                signo4 = -1
                            End If
                        End If
                        If bandera = 2 Then
                            tres = x
                            bandera = 3
                            If corte = "+" Then
                                signo3 = 1
                            Else
                                signo3 = -1
                            End If
                        End If
                        If bandera = 1 Then
                            dos = x
                            bandera = 2
                            If corte = "+" Then
                                signo2 = 1
                            Else
                                signo2 = -1
                            End If
                        End If
                        If bandera = 0 Then
                            uno = x
                            bandera = 1
                            If corte = "+" Then
                                signo1 = 1
                            Else
                                signo1 = -1
                            End If
                        End If
                    End If
                Next
                uno = Len(funcion)
                'bloque 1
                For x = 1 To dos
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque1 = bloque1 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque1 = bloque1 * signo1
                        Else
                            numero1 = Val(Mid(funcion, 2, x - 1))
                            bloque1 = bloque1 * numero1 * signo1
                        End If
                    End If
                Next
                'bloque2
                For x = dos To tres
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque2 = bloque2 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque2 = bloque2 * signo2
                        Else
                            numero2 = Val(Mid(funcion, dos + 1, x - 1))
                            bloque2 = bloque2 * numero2 * signo2
                        End If
                    End If
                Next
                'bloque 3
                For x = tres To cuatro
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque3 = bloque3 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque3 = bloque3 * signo3
                        Else
                            numero3 = Val(Mid(funcion, tres + 1, x - 1))
                            bloque3 = bloque3 * numero3 * signo3
                        End If
                    End If
                Next
                'bloque4
                For x = cuatro To uno
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque4 = bloque4 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque4 = bloque4 * signo4
                        Else
                            numero4 = Val(Mid(funcion, cuatro + 1, x - 1))
                            bloque4 = bloque4 * numero4 * signo4
                        End If
                    End If
                Next
                'f (xi)
                n = 4
                fxi(ciclo) = bloque1 + bloque2 + bloque3 + bloque4
                TextBox3.Text = TextBox3.Text & fxi(ciclo) & vbCrLf
            End If


Código: php

            '3 valores
            If n = 3 Then
                tamaño = Len(funcion)
                For x = 1 To tamaño
                    corte = Mid(funcion, x, 1)
                    If corte = "+" Or corte = "-" Then
                        If bandera = 2 Then
                            tres = x
                            bandera = 3
                            If corte = "+" Then
                                signo3 = 1
                            Else
                                signo3 = -1
                            End If
                        End If
                        If bandera = 1 Then
                            dos = x
                            bandera = 2
                            If corte = "+" Then
                                signo2 = 1
                            Else
                                signo2 = -1
                            End If
                        End If
                        If bandera = 0 Then
                            uno = x
                            bandera = 1
                            If corte = "+" Then
                                signo1 = 1
                            Else
                                signo1 = -1
                            End If
                        End If
                    End If
                Next
                uno = Len(funcion)
                'bloque 1
                For x = 1 To dos
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque1 = bloque1 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque1 = bloque1 * signo1
                        Else
                            numero1 = Val(Mid(funcion, 2, x - 1))
                            bloque1 = bloque1 * numero1 * signo1
                        End If
                    End If
                Next
                'bloque2
                For x = dos To tres
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque2 = bloque2 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque2 = bloque2 * signo2
                        Else
                            numero2 = Val(Mid(funcion, dos + 1, x - 1))
                            bloque2 = bloque2 * numero2 * signo2
                        End If
                    End If
                Next
                'bloque 3
                For x = tres To uno
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque3 = bloque3 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque3 = bloque3 * signo3
                        Else
                            numero3 = Val(Mid(funcion, tres + 1, x - 1))
                            bloque3 = bloque3 * numero3 * signo3
                        End If
                    End If
                Next
                'f (xi)
                n = 3
                fxi(ciclo) = bloque1 + bloque2 + bloque3
                TextBox3.Text = TextBox3.Text & fxi(ciclo) & vbCrLf
            End If
            '2 valores
            If n = 2 Then
                tamaño = Len(funcion)
                For x = 1 To tamaño
                    corte = Mid(funcion, x, 1)
                    If corte = "+" Or corte = "-" Then
                        If bandera = 1 Then
                            dos = x
                            bandera = 2
                            If corte = "+" Then
                                signo2 = 1
                            Else
                                signo2 = -1
                            End If
                        End If
                        If bandera = 0 Then
                            uno = x
                            bandera = 1
                            If corte = "+" Then
                                signo1 = 1
                            Else
                                signo1 = -1
                            End If
                        End If
                    End If
                Next
                uno = Len(funcion)
                'bloque 1
                For x = 1 To dos
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque1 = bloque1 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque1 = bloque1 * signo1
                        Else
                            numero1 = Val(Mid(funcion, 2, x - 1))
                            bloque1 = bloque1 * numero1 * signo1
                        End If
                    End If
                Next
                'bloque2
                For x = dos To uno
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque2 = bloque2 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque2 = bloque2 * signo2
                        Else
                            numero2 = Val(Mid(funcion, dos + 1, x - 1))
                            bloque2 = bloque2 * numero2 * signo2
                        End If
                    End If
                Next
                'f (xi)
                n = 2
                fxi(ciclo) = bloque1 + bloque2
                TextBox3.Text = TextBox3.Text & fxi(ciclo) & vbCrLf
            End If
            '1 valor
            If n = 1 Then
                tamaño = Len(funcion)
                For x = 1 To tamaño
                    corte = Mid(funcion, x, 1)
                    If corte = "+" Or corte = "-" Then
                        If bandera = 0 Then
                            uno = x
                            bandera = 1
                            If corte = "+" Then
                                signo1 = 1
                            Else
                                signo1 = -1
                            End If
                        End If
                    End If
                Next
                uno = Len(funcion)
                'bloque 1
                For x = 1 To uno
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        For x2 = 1 To exponente
                            bloque1 = bloque1 * xi
                        Next
                        corte2 = Mid(funcion, x - 1, 1)
                        If corte2 = "+" Or corte2 = "-" Then
                            bloque1 = bloque1 * signo1
                        Else
                            numero1 = Val(Mid(funcion, 2, x - 1))
                            bloque1 = bloque1 * numero1 * signo1
                        End If
                    End If
                Next
                n = 1
                fxi(ciclo) = bloque1
                TextBox3.Text = TextBox3.Text & fxi(ciclo) & vbCrLf
            End If


Código: php
'derivación **********************************************************************************************************
            bloque1 = 1
            bloque2 = 1
            bloque3 = 1
            bloque4 = 1
            If n = 4 Then
                tamaño = Len(funcion)
                For x = 1 To tamaño
                    corte = Mid(funcion, x, 1)
                    If corte = "+" Or corte = "-" Then
                        If bandera = 3 Then
                            cuatro = x
                            bandera = 4
                            If corte = "+" Then
                                signo4 = 1
                            Else
                                signo4 = -1
                            End If
                        End If
                        If bandera = 2 Then
                            tres = x
                            bandera = 3
                            If corte = "+" Then
                                signo3 = 1
                            Else
                                signo3 = -1
                            End If
                        End If
                        If bandera = 1 Then
                            dos = x
                            bandera = 2
                            If corte = "+" Then
                                signo2 = 1
                            Else
                                signo2 = -1
                            End If
                        End If
                        If bandera = 0 Then
                            uno = x
                            bandera = 1
                            If corte = "+" Then
                                signo1 = 1
                            Else
                                signo1 = -1
                            End If
                        End If
                    End If
                Next
                uno = Len(funcion)
                'bloque 1
                For x = 1 To dos
                    corte = Mid(funcion, x, 1)
                    If corte = "x" Then
                        exponente = Val(Mid(funcion, x + 2, 1))
                        If exponente <> 1 And exponente <> 0 Then
                            corte2 = Mid(funcion, x - 1, 1)
                            If corte2 = "+" Or corte2 = "-" Then
                                numero1 = exponente
                                exponente = exponente - 1
                                For x2 = 1 To exponente
                                    bloque1 = bloque1 * xi
                                Next
                                bloque1 = bloque1 * numero1 * signo1
                            Else
                                numero1 = Val(Mid(funcion, 2, x - 1))
                                numero1 = numero1 * exponente
                                exponente = exponente - 1
                                For x2 = 1 To exponente
                                    bloque1 = bloque1 * xi
                                Next
                                bloque1 = bloque1 * numero1 * signo1
                            End If
                        Else
                            If exponente = 1 Then
                                corte2 = Mid(funcion, x - 1, 1)
                                If corte2 = "+" Or corte2 = "-" Then
                                    bloque1 = 1 * signo1
                                Else
                                    numero1 = Val(Mid(funcion, 2, x - 1))
                                    numero1 = numero1 * 1
                                    bloque1 = numero1 * signo1
                                End If
                            End If
                            If exponente = 0 Then
                                corte2 = Mid(funcion, x - 1, 1)
                                If corte2 = "+" Or corte2 = "-" Then
                                    numero1 = 1
                                    bloque1 = numero1 * signo1
                                Else
                                    bloque1 = 0
                                End If
                            End If
                        End If
                    End If
                Next
               


Nota: aún falta código pero no me deja ponerlo porque es demasiado XD si les interesa se los voy compartiendo, lo restante, ¡saludos!  :D

Muy bueno bro!!!
Me trajo muchos recuerdos tu app!

Saludos!
ANTRAX