Marca diferencial de Newton y código de fórmula de interpolación
Dim x(1) as Double 'recibe las raíces de ercigenway respectivamente.
Método 1.0 er para encontrar raíces reales de ecuaciones cuadráticas - probado
subercigenvay privado (A es simple, B es simple, C es simple)' A, B, C corresponden a dos Coeficientes de una ecuación cuadrática.
Cambiar d a doble precisión
d = b ^ 2 - 4
Si d & lt entonces 0
MsgBox "δδ Menos que 0, no hay raíz real", "Mensaje"
x(0) = 0: x(1) = 0
Then ElseIf d = 0
x(0) = -b / (2 * a): x(1) = x(0)
Otros
x(0)=(-b-Sgn(b )* Sqr(d))/(2 * a):x(1)= c/(a * x(0))
Terminará si...
Conector final
2.1 Findway escanea el intervalo raíz con pasos iguales - probado
Subbúsqueda privada (byval a es simple, byval b es simple, h es doble)' a y b deben ser el punto final del intervalo de escaneo, h es el tamaño del paso.
Dim a1 es doble precisión
a1 = a
Hacer
si f(a 1)* f(a 1+h )< entonces = 0
aa = a1: bb = a1 + h
Conector de salida
Terminará si...
a1 = a1 + h
Bucle mientras a 1 & lt;b
Si a 1 >b entonces
MsgBox "No se puede encontrar el intervalo raíz, por favor pruebe con un tamaño de paso más pequeño"
Junta de salida
Terminará si...
Junta final
2.2 Prueba de raíz de bisección
La función privada es fenfun (byval a es simple, byval b es simple, eps es doble)' A y B son los puntos finales del intervalo raíz y EPS es el error.
Dim x0 es Doble, x1 es Doble, x2 es Doble, f0 es Doble, f1 es Doble, f2 es Doble
x1 = a: x2 = b
Hacer
x0 = (x1 + x2) / 2
f0 = f(x0)
Si f0 = 0, entonces
Exportar Hacer
Otro
f1 = f(x1): f2 = f(x2)
Si F0 * f 1 & lt; /p>
x2 = x0
Otros
x1 = x0
Si... terminará
Si. .. finalizará
Abs(x1 - x2)> ciclo de tiempo
x0 = (x1 + x2) / 2
erfenfun = x0
Función final
2.4 Método tangente de Newton - probado
La función privada Newton fxfun (byvalx0 es doble, eps es doble) es doble' x0 es la raíz cercana, EPS es el error.
Dim x1 es un tipo de doble precisión, f0 es un tipo de doble precisión, f1 es un tipo de doble precisión
x1 = x0
Do
x0 = x1
F0 = f(x0): f1 = fd(x0) 'fd representa la función derivada de f.
Si Abs(f 1)& lt; entonces eps
x1 = x0: Salir Do
Si... terminará
x1 = x0 - f0 / f1
Bucle hasta Abs(x 1-x0)<batería
newtonfxfun = x1
Finalizar función
p>2.3 Método iterativo acelerado de stediedaifun sefensen (la forma de la ecuación es prueba x-f(x)= 0).
Función privada stediedaifun (byvalx0 como doble, eps1asdouble, eps2asdouble) como doble' x0 es la raíz cerca de la solución analítica, eps1 es el error del resultado de salida y eps2 es el criterio para juzgar si la iteración puede continuar.
Dim y es Doble, z es Doble, x1 es Doble
x1 = x0
Do
x0 = x1
y = f(x0): z = f(y)
Si Abs(z-2 * y+x0)< entonces eps2
MsgBox "Para el Se cumple la condición eps2 y la iteración no puede continuar"
Salir de la función
Terminará si...
x1 = x0 - (y - x0) ^ 2 / (z - 2 * y + x0)
Bucle hasta Abs(x 1-x0)<eps1
stediedaifun = x1
Fin de función
2.5 Método tangente de Newton para resolver la ecuación algebraica de Newton fxnfun n - probado
La función privada Newton fxnfun (a() es simple, eps es doble, x0 es doble) es doble 'a( ) respectivamente Almacene los n coeficientes de la ecuación en orden descendente, EPS es el error y x0 es la raíz más cercana.
Dim k es un número entero, n es un número entero, f0 es una precisión doble, f1 es una precisión doble, x1 es una precisión doble
n = Sin consolidar (a) p>
x1 = x0
Hacer
x0 = x1
f0 = a(0): f1 = f0
Para k = 1 a n - 1
f0 = a(k) + f0 * x0
f1 = f0 + f1 * x0
Siguiente k p>
f0 = a(n) + f0 * x0
x1 = x0 - f0 / f1
Bucle hasta Abs(x 1-x0)& lt; /p >
newtonfxfun = x 1
Función final
2.6 método de corte de acordes linecutfun - probado
Función privada corte de línea divertido (byval x0 es doble , byval x1 es doble, eps es doble, n es largo) es doble' n es el límite del número de iteraciones, x0 y x 1 son los puntos finales del intervalo raíz y EPS es el error.
Etiquete f0 como Doble, f1 como Doble y f2 como Doble
Dim x2 es Doble, I es Largo
f0 = f(x0) : f1 = f(x1)
Para i = 1 a n
x2 = x 1-(x 1-x0)* f 1/(f 1-F0) p>
f2 = f(x2)
Si Abs(F2)< entonces eps
Salir para...
Si... terminará
x0 = x 1:x 1 = x2:F0 = f 1:f 1 = F2
Siguiente I
Si i = n + 1, entonces
MsgBox "El número de cálculos requeridos es demasiado bajo para cumplir con los requisitos de precisión"
Terminará si...
linecutfun = x2
Función final
4.1 Polinomio de interpolación lagrangiana - probado.
La función privada lagrangeczfun (a() es doble, byval u es doble) almacena n+1 nodos para doble 'a (1, n), u es el punto de interpolación.
Dim i es un número entero, j es un número entero, n es un número entero
Dim l es Doble, v es Doble
v = 0
n = UBound(a, 2)
Para j = 0 a n
l = 1#
Para i = 0 a n
Si i = j, entonces ve a hulu
l = l * (u - a(0,i)) / (a(0,j) - a(0,I) ))
hulue:
Siguiente yo
v = v + l * a(1, j)
Siguiente j p >
Función de Lagrange = v
Función final
4.2 Método de interpolación de Newton - probado
Función privada newtonczfun (a() es doble, u es double) almacena n+1 nodos para double 'a (1, n), u es el punto de interpolación.
Dim n es un número entero, I es un número entero, j es un número entero, k es un número entero
Dim z() es Doble, f() es Doble, v es Doble
n = UBound(a, 2)
ReDim z(n), f(n)
Para i = 0 a n
z( i) = a(1,I)
Siguiente i
Para i = 1 a n
k = k + 1
Para j = 1 a n
f(j) = (z(j) - z(j - 1)) / (a(0,j) - a(0,j - k))
Siguiente j
Para j = 1 a n
z(j) = f(j)
Siguiente j
Siguiente i
f(0) = a(1,0)
v = 0
Para i = n a 0 Tamaño del paso - 1
v = v * (u - a(0,i)) + f(i)
Siguiente i
newtonczfun = v
Función final
4.3 hermiteczfun Prueba de interpolación de Hermite
Función privada Hermiteczfun (a() es doble, FD() es doble, U es doble) es doble ' a (1, n) almacena n+1 nodos, fd(n) almacena los valores derivados de n+1 nodos y U es el punto de interpolación.
Dim l() es Doble, ld() es Doble, g() es Doble, h() es Doble, aim es Doble
Dim n es un número entero, I es un número entero, j es un número entero
n = independiente (a)
ReDim l(n), ld(n), g(n), h(n)
objetivo = 0
Para i = 0 a n
l(i) = 1: ld(i) = 0
Para j = 0 a n
Si j = i, entonces vaya a hulu
l(i) = l(i) * (u - a(0,j)) / (a( 0 , i) - a(0, j))
ld(i) = ld(i) + 1 / (a(0, i) - a(0, j))
hulue:
Siguiente j
g(i) = (1 + 2 * (a(0, i) - u) * ld(i)) * l( i) * l(i)
h(i) = (u - a(0,i)) * l(i) * l(i)
objetivo = objetivo + g(i) * a(1,i) + h(i) * fd(i)
Siguiente i
hermiteczfun = objetivo
Fin de función
5 2 .1 método de integración de pasos variables tixingjfun - probado
La función privada tixingjfff (A es simple, B es simple, eps es doble, M es larga) es doble 'A y B son los límites superior e inferior de integración, EPS es el error y M es el número máximo de cálculos.
Dim h es Doble, t1 es Doble, t2 es Doble, t es Doble, hh es Doble
Dim n As Long: n = 1
h = b - a: t1 = h * (f(a) + f(b)) / 2
Hacer
t = 0
Para i = 1 a n
t = t + f(a + (i - 0.5) * h)
Siguiente i
hh = h * t
p>t2 = (t1 + hh) / 2
Si Abs(T2-t 1)<eps entonces sal de Do
t1 = t2: h = h / 2: n = 2 * n
Ciclo hasta n & gt2 * m
Si n & gt entonces 2 * m
MsgBox "Muy pocos cálculos, no cumple con los requisitos de error"
Terminará si...
tixingjffun = t2
Finalizar función
5.2.2 Paso variable Método integral de Simpson largo - probado
La función privada simplesonjfun (A es simple, B es simple, eps es doble, M es larga) es doble 'A y B son los límites superior e inferior de la integral , EPS es el error, M es el número máximo de cálculos.
Dim n tiene la misma longitud, I tiene la misma longitud
Dim h es Doble, t1 es Doble, t2 es Doble, hh es Doble, s1 es Doble, s2 es Doble
n = 1:h = b-a:t 1 = h *(f(a)+f(b))/2
hh = h *(f((a+ b)/2 )):s 1 =(t 1+2 * hh)/3
Hacer
n = 2 * n: h = h / 2: t2 = ( t1 + hh) / 2
t = 0
Para i = 1 a n
t = t + f(a + (i - 0.5) * h) p>
Siguiente I
hh = t * h
s2 = (t1 + 2 * hh) / 3
Si Abs (S2- s 1)<eps y luego salga Do
t1 = t2: s1 = s2
Ciclo hasta n & gtm
Si n & gtM Entonces MsgBox" El número de cálculos es demasiado pequeño y no cumple con los requisitos de error"
simpsonjffun = s2
Función final
5.3 Método integral de Romberg
Privado La función rombergjfun (a es simple, b es simple, eps es doble) es doble
Representa k como un número entero, n como un número entero y h como una precisión doble
k = 0 : n = 1: h = b - a
Función final
Encontrar la primera derivada - probada
Función privada ds 1 fun(x0 es simple, eps es doble) es doble' x0 es el punto de derivación y EPS es el error.
Dim h es Doble, t1 es Doble, t2 es Doble
h = 1:t 1 =(f(xh)-f(x0-h))/( 2 * h)
h = h/2:T2 =(f(xh)-f(x0-h))/(2 * h)
Hacer mientras abdominales (t2 - t1)>Batería
t1 = t2
h = h / 2
t2 = (f(x0 + h) - f(x0 - h)) / (2 * h)
Anillo
ds1fun = t2
Función final
5 2 ds2fun Segundo. -derivada de orden - probada
Función privada ds 2 fun (x0 es simple, eps es doble) asdouble' x0 es la derivada, EPS es el error.
Dim h es Doble, t1 es Doble, t2 es Doble
h = 1:t 1 =(f(xh)+f(x0-h)-2 * f(x0))/(h * h)
h = h/2:T2 =(f(xh)+f(x0-h)-2 * f(x0))/( h * h)
Hacer mientras Abs(t2 - t1)>Batería
t1 = t2
h = h / 2
T2 =(f(xh)+f(x0-h)-2 * f(x0))/(h * h)
Anillo
ds2fun = t2 p>
Finalizar función