Nesse pedacinho de código ele começa a substituir x por alguns valores para plotar o gráfico
for (var i = -10 / STEP; i < 10 / STEP; i += 1) {
var x = i * STEP;
var y = solveStr(reformat(replaceAll(fxString.toLowerCase(), "x", "(" + x + ")")));
Lembrei de um programa de redes neurais que tinha feito no passado. Era em Excel VBA. Neste programa eu tinha uma fórmula em uma célula.
E meu programa em VBA tinha que descobrir a raiz dessa célula. Então ele ia testando mas quando testava ele mudava o único neuronio dele para ficar mais parecido cada vez mais com a resposta. Vou postar ele aqui e vou passar ele pra Javascript e embutir no GRAFICO.EXE (nome que dei pra minha página).
Sub RedeNeural()
Range("F2:H2").ClearContents
m = 8
tamanhodoj = 1000
a = 1
j = 1
While 2 < 3
tamanhodageracao = 10
For k = 3 To tamanhodageracao
' VarA = Trunc(Rnd(1) * 10 + 1, 0)
' VarB = Trunc(Rnd(1) * 10 + 1, 0)
VarA = Rnd * 2 ^ m
VarB = Rnd * 2 ^ m
VarC = Range("F2")
VarD = Range("G2")
If Range("H2") = "" Then
Range("A2") = VarA
Range("B2") = VarB
Else
nivel = (1 / Range("d2") * 10 ^ m) - 1 / (nivel + 0.000001)
If Round(k / 2) = k / 2 Then
Range("A2") = (VarA * nivel + VarC) / (nivel + 1)
Range("B2") = (VarB * nivel + VarD) / (nivel + 1)
Else
Range("A2") = (-VarA * nivel + VarC) / (nivel + 1)
Range("B2") = (-VarB * nivel + VarD) / (nivel + 1)
End If
End If
Cells(k, 1) = Range("A2")
Cells(k, 2) = Range("B2")
If Range("C2") <> 0 Then
Cells(k, 4) = 1 / Sqr(Range("C2") ^ 2)
Else
MsgBox ("Resultado:" & Range("A2") & " e " & Range("B2"))
Exit Sub
End If
precisaodoresultado = 10
Range("A2") = Round(Range("F2"), precisaodoresultado)
Range("B2") = Round(Range("G2"), precisaodoresultado)
If Round(Range("C2"), precisaodoresultado) <> 0 Then
Else
MsgBox ("Resultado:" & Range("A2") & " e " & Range("B2"))
Exit Sub
End If
Cells(k, 3) = Range("C2")
Cells(k, 5) = k
Cells(k, 6) = VarA
Cells(k, 7) = VarB
Next
For k = 3 To tamanhodageracao
scoreAtual = Range("D2")
If maiorScore < Cells(k, 4) Then
maiorScore = Cells(k, 4)
maiorC = Cells(k, 1)
maiorD = Cells(k, 2)
End If
Next
If maiorScore <= scoreAtual Then
maiorC = Range("F2")
maiorD = Range("G2")
contadordederrota = contadordederrota + 1
If nivel <> 0 Then
Range("H3") = contadordederrota / (nivel / 1000)
End If
If contadordederrota > nivel / 10000 And contadordederrota > 1 Then
m = m + 1
contadordederrota = 0
End If
End If
Range("F2") = maiorC
Range("G2") = maiorD
Range("D2") = maiorScore
Range("H2") = Range("H2") + 1
j = j + 1
Wend
End Sub
Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
Trunc = Int(value * (10 ^ num)) / (10 ^ num)
End Function