
PROGRAMAFICIÓN
R-suelve tus dudas
PRÁCTICA 6:
Polinomio interpolador de Lagrange en R
EJERCICIO 1:

SOLUCIÓN:
#Paso 1#
PolBase=function(t,s){
n=length(s)
L=c(0)
for (i in 1:n){
L[i]=1
for (j in 1:n){
if (j!=i){
L[i]=L[i]*(t-s[j])/(s[i]-s[j])
}
}
}
return(L)
}
#Paso 2#
PolInterp=function(B,L){
n=length(B)
p=0
for (i in 1:n){
p=p+B[i]*L[i]
}
return(p)
}
#Paso 3#
#t=2
t=2
L1=PolBase(t,s)
pol1=PolInterp(B,Lb)
L1
pol1
#t=6.5
t=6.5
L2=PolBase(t,s)
pol2=PolInterp(B,Ln)
L2
pol2
#Paso 4#
x=seq(s[1],s[n],length=1001)
#Paso 5#
f=c(0)
for (k in 1:1001){
t=x[k]
lo=PolBase(t,s)
f[k]=PolInterp(B,lo)
}
f

SOLUCIÓN:
plot(s,B,xlim=c(s[1],s[n]),ylim=c(0,60),pch=19,col='blue', xlab='x',ylab='Concentracion',main='Produccion de bioetanol')
par(new='TRUE')
plot(x,f, xlim=c(s[1],s[n]),ylim=c(0,60))
Otra idea: para obtener 1001 abscisas equidistantes en el intervalo [s[1],s[n]] y almacenarlas en el vector x
1º: otra opción es poner lo que mide cada trozo
h= ((s[n]- s[1]) / 1000)
x=seq(s[1],s[n],h)
2º: y otra opción sería hacer un bucle:
for (i in 1:1001){
x[i]=s[1]+(i-1)h
¡¡CUIDADO!!
ERRORES COMUNES:

-La función está definida por un sumatorio, asegúrate de inicializar el vector L, como L=0, FUERA del bucle for.
-
Cada bucle que abres, ya sea condicional, while o for, DEBES CERRARLO. Las funciones TAMBIÉN.
-
Ten cautela con los paréntesis, todos los que abres se deben cerrar.
-
Si son vectores debes añadir el igual y la c como digo en la explicación. El vector tiene la siguiente: vector=c(Datos)
-
Deberás poner () en el bucle para poner desde donde oscila n
-
Se escribe lenght en lugar de length.
-
Deberás poner el comando return () tras la función
-
par=(new...) es incorrecto, la forma correcta es par(new...)
-
Deberás poner las llaves de los if, según se cierre el paréntesis
-
Mantén el orden de las variables de las funciones descritas a la hora de realizar las operaciones. Ej: Polbase=function(n,s,t)
Explicación en vídeo:
Para más información se puede acceder al repositorio a través del enlace