Construir un algoritmo que calcule el "seno integral"

Ante todo Muchas gracias por calentarte la cabeza y sacarnos a los inexpertos de lo atolladeros en los que nos metemos:
Estoy tratando de construir un algoritmo que me calcule el "Seno integral" de un número X. Sebes que en una calculadora, igual que en VB la función seno "sin(x)" se calcula mediante la suma de los términos de la serie
Sin(x)=x-x^3/(3!)+x^5/(5!)-x^7/(7!)+.......
La serie converge lentamente por lo que hay que emplear un número elevado de términos. La primera dificultad la encuentro en que en el denominador existe el factorial de un número que es una función matemática, no incluida en VB.
Pues el seno integral se calcula con la misma serie variando el denominador de manera que:
si(x)=x-x^3/[3*(3!)]+x^5/[5*(5!)]-x^7/[7*(7!)]+.......
Se consigue suficiente eexactitud con 100 términos
La fórmula empírica es: si=^SUMA(acumulativa) para k DESDE 0 a 100 de: (-1)^k*x^(2*k+1)/[(2*k+1)*(2*k+1)!]
He hecho lo siguiente en un command button ("Caption=calcular")
'DECLARO VARIABLES
Dim si as double
Dim fact as double
Dim I as integer
Dim n as double
Introduzco el valor de "x" en un textbox
'SUMA ACUMULATIVA Y CALCULO DE FACTORIAL PARA CADA VALOR DE "I"
si=0
x=val(Text1.Text)
For I=0 to 100
n=(2*I+1)
'Calculo el factorial
If n=1 then
fact=1
Else
fact=fact*(n+1)*(n+2)
'Hallo el valor de la variable "si" y sumo
si=[(-1)^I*X^n/(n*fact)
si=si+si(I)
Next I
Text2.Text=si 'para que aparezca el resultado en otro textBox
En la barra de menús, voy a Run-Start With Full Compile (Ctrl+F5) .El programa se para en "si(I)" y aparece un mensaje de "Compile error, Expected array".
Aquí estoy parado y ya no se seguir.
¿Qué hago mal?
Un abrazo

1 respuesta

Respuesta
1
Diría que el error lo tienes en:
si=[(-1)^I*X^n/(n*fact)
Se te ha colado el corchete [ que Visual Basic entiende que es para crear vectores o Arrays.
Aparte de que no está cerrado el corchete, aquí no tiene sentido. Debería funcionarte simplemente con:
si=(-1)^I*X^n/(n*fact)
Dime si así te funciona.
Estimado experto:
Sigue sin funcionar.
En vez de preguntar por un aspecto concreto, te digo lo que he hecho:
Como recordarás trato de hacer una calculadora que determine el valor de un "seno integral" así que en una form he insertado:
Un TexBox 1 para entrada de datos (supongamos un 5)
Un CommandButton1 para ordenar el cálculo
Un textBox3 para mostrar el resultado., que para x=5, debe ser, 1'54993 (según tablas)
Los Códigos que he puesto, son:
Private Sub Form_Load()
End Sub
-----------------------------------------------------------------------------------
Private Sub Text1_Change()
Dim x As Single
End Sub
--------------------------------------------------------------------------------------
Private Sub Command1_Click()
'declaro variables
Dim seno As Double
Dim fact As Double
Dim z As Integer
Dim n As Double
Dim a As Single
Dim x As Single
'suma acumulativa y calculo factorial para cada valor de "z"
seno = 0
x = Val(Text1.Text)
For z = 0 To 100
n = (2 * z + 1)
'Calculo el factorial
If n = 1 Then
fact = 1
Else
fact = fact * (n + 1) * (n + 2)
'Hallo el valor de "seno" y sumo
seno = ((-1) ^ z) * (x ^ n) / (n * fact)
seno = seno + seno(z)      (¡¡ERROR!!)             
Next z
Text3.Text.SetFocus
End Sub
----------------------------------------------------------------------------
Private Sub Text3_Change()
'coloco el valor de "seno" en el TexBox3
Text3.Text = seno
End Sub
-------------------------------------------------------------------------------
Texto de la ayuda al error
ERROR-Ayuda
Se espera una matriz
Un nombre de variable con un subíndice indica que la variable es una matriz. Las causas y posibles soluciones de este error son las siguientes
La sintaxis que ha especificado es apropiada para una matriz, pero no existe una matriz con este nombre en el alcance.
Verifique para asegurarse de que el nombre de la variable está bien escrito. A menos que el módulo contenga Option Explicit, una variable se crea la primera vez que se utiliza. Si escribe mal el nombre de una variable de matriz, puede que se cree la variable, pero no como matriz.
Si desea más información, seleccione el tema en cuestión y presione F1.
Ya no se más
Un abrazo
En el código este deberías darle un nombre distinto al seno.
Con seno(z) estas diciéndole que busque un vector llamado "seno" y le saque la posición z. Aquí no usas vectores así que nada.
Después, en el Next no tienes que poner "Next z", eso ya lo defines al poner For z = 0 To 100.
Te propongo mi solución:
Private Sub Command1_Click()
'declaro variables
Dim seno As Double
Dim seno_temp As Double 'Variable para almacenar temporalmente el valor del seno antes de sumarlo a seno
Dim fact As Double
Dim z As Integer
Dim n As Double
Dim a As Single
Dim x As Single
'suma acumulativa y calculo factorial para cada valor de "z"
seno = 0
x = Val(Text1.Text)
For z = 0 To 100
n = (2 * z + 1)
'Calculo el factorial
If n = 1 Then
fact = 1
Else
fact = fact * (n + 1) * (n + 2)
'Hallo el valor de "seno" y sumo
seno_temp = ((-1) ^ z) * (x ^ n) / (n * fact)
seno = seno + seno_temp            
Next
Text3.Text.SetFocus
End Sub
Marcado en negrita lo que deberías corregir.
Gracias. Esto se ha solucionado. Al correr el código aún me ha indicado que faltaba una instrucción "end if" para que funcionara el bucle. Lo he insertado despues de "fact=..." y ya corre. Ahora me sale ERROR en el valor "seno" del Text3Box y no me aparece el resultado. Según la ayuda debo tener algún problema con la "OPTION EXPLICIT" así que seguimos peleando para que aparezca el resultado del cálculo.
Un abrazo
Armando
Mmm, no se ver ahora sin probarlo donde puede estar el error.
Haz un Mesagebox mostrando el valor de seno al final del bucle para ver si te muestra los valores correctamente así.
Si te sale mal el Mesagebox busca en las variables que componen "seno".
Si sale bien podrías probar de poner
Text3.Text = seno.ToString()
¡Ya está!
Esto último era un tontería de sintaxis. Una variable mal declarada.
Y ya por último, te ampliaré la información que no te he dado antes (para que el bosque no tuviera demasiado árboles), diciéndote que todo lo anterior forma parte de un programa calculador que determina los parámetros de radiación de una antena de radio vertical como las de las emisoras de Onda Media. Es un algoritmo largo y trabajoso que de esta manera se facilita enormemente.
Te estoy muy agradecido por tu interés en ayudarme. El código del programa entero está a tu disposición si lo deseas. Aunque seguro que le sobran o no son las más adecuadas, un montón de instrucciones, pero yo no se más y para mí, es una lástima que el visual basic sea tan débil en funciones de ingeniería( en comparación con excel).
Un abrazo
Perfecto. Me alegro que lo hayamos solucionado.
No te olvides de cerrar y puntuar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas