Documente Academic
Documente Profesional
Documente Cultură
RAICES DE ECUACIONES
Presenta:
Sergio Andrés Perdomo Aguirre
20172163214
Docente
Ing. YAMIL ARMANDO CERQUERA ROJAS MSc.
Crecimiento de Tilapia
4.5
4
CRECIMIENTO DEL PEZ (GR/DIA)
3.5
2.5
1.5
0.5
0
0 5 10 15 20 25 30 35 40
SEMANAS
3. Revisión bibliográfica
Splines Cúbicos.
Es conocido que una función se puede aproximar mediante una interpolación polinómica así
como también son conocidas algunas técnicas para mejorar dicha aproximación, por ejemplo la
interpolación polinómica a trozos (del grado que sea) o la interpolación de Hermite a trozos en
la que se emplearían no solo los valores de la función sino también los de las derivadas de dicha
función. Esta última interpolación suele proporcionar buenos resultados pues al tener en cuenta
no solo los valores puntuales de la función sino también los valores de las derivadas, se obtiene
una función polinómica a trozos con derivada continua. Hay que observar eso sí, que para
calcular una interpolación de Hermite a trozos se necesita que la función sea derivable hasta el
orden de las derivadas que aparecen (e incluso más regularidad para alcanzar el orden óptimo
de convergencia).
Sin embargo las interpolaciones de Hermite a trozos no son calculables cuando lo que queremos
aproximar es una simple tabla de datos, es obvio que en este caso no podemos hablar de
derivadas. En esta situación lo que viene a ser de utilidad son los polinomios interpoladores a
trozos conocidos como Splines cúbicos (en adelante solamente Splines) que no son más que
funciones interpoladoras a trozos en los que, además de los valores de la tabla (o de la función),
se aplican unas condiciones de compatibilidad en los nodos comunes de sub–intervalos
adyacentes que lleva a una construcción similar a la de los polinomios interpoladores de Hermite
a trozos.
Una forma para la construcción de del Spline cúbico con matriz tridiagonal es la siguiente:
Aplicando las condiciones de continuidad del Spline S y de las derivadas primera S' y segunda
S'', es posible encontrar la expresión analítica del Spline.
Suponga:
𝑥1 < 𝑥2 < 𝑥3 < ⋯ < 𝑥𝑛 𝑓𝑖 = 𝑓(𝑥𝑖 )
ℎ𝑖 = 𝑥𝑖+1 − 𝑥𝑖
Para
𝑖 = 1,2, … , 𝑛 − 1
Sea 𝑆𝑖 (𝑥) la restricción de 𝑆(𝑥) a [𝑥𝑖 , 𝑥𝑖+1]. Si 𝑆𝑖 (𝑥) es cúbico entonces 𝑆𝑖′′ es lineal, tal que si
𝑆𝑖′′(𝑥𝑖 ) = 𝑧𝑖 y 𝑆𝑖′′(𝑥𝑖+1) = 𝑧𝑖+1, se puede escribir:
Esto garantiza que 𝑆(𝑥) es continua y coincide con 𝑓 en todos los puntos 𝑥𝑖,𝑖=1,2,...,𝑛
Se definen los polinomios cúbicos que forman la función Spline cúbica S, como:
La Ecuación 4, con 𝑖=1,2,..,𝑛−1 genera un sistema de 𝑛−1 ecuaciones lineales con 𝑛+1
incógnitas 𝑧0,𝑧1,𝑧2,…,𝑧𝑛, Se puede elegir 𝑧0 y 𝑧𝑛 de forma arbitraria y resolver el sistema de
ecuaciones resultante para obtener los valores de 𝑧1,𝑧2,…,𝑧𝑛−1. Una elección especialmente
adecuada es hacer 𝑧0=𝑧1=0. La función Spline resultante se denomina Spline cúbico natural y
el sistema de ecuaciones lineal expresado en forma matricial es:
El sistema visto como una ecuación de la forma 𝑚∗𝑧=Δ𝑖, sería:
En donde:
También podemos usar para hallar los coeficientes tomando en cuenta esta ecuación.
4. Planteamiento de la solución
Se pretende realizar un código en lenguaje c++ utilizando dev c++ 5.11 para que por medio del pc
se puedan hallar los coeficientes de los trozos de la función spline cubica que describe el
comportamiento del crecimiento de la tilapia. Para ello se aplica el método enseñado en clase y
el cual se puede encontrar en el libro (Cerquera Rojas, MATRICES TRIDIAGONALES SPLINES
CÚBICOS, 2017). Del ingeniero Yamil Armando Cerquera. Para realizar el código se usa como base
uno suministrado por el ingeniero nombrado anteriormente.
7. Bibliografía
Cerquera Rojas, Y. A. (2017). MATRICES TRIDIAGONALES SPLINES CÚBICOS. Neiva, Huila, Colombia:
Universidad Surcolombiana.
Nicovita Tilapia. (2014). Manual de Crianza de Tilapia. Manual, Lima, Av. Argentina 4695 Carmen
de la Legua - Callao 3. Obtenido de
http://www.industriaacuicola.com/biblioteca/Tilapia/Manual%20de%20crianza%20de%20
tilapia.pdf
8. Anexos: Códigos
#include <iostream>
#include <math.h>
//#include <h://metodos//datos.txt>
/* run this program using the console pauser or add your own getch, system("pause") or
input loop */
#define PI 3.1415924
FILE *arc;
#define z1 36
long double
x[z1]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,3
1,32,33,34,35,36};
long double
yc[z1],y[z1]={0.27,0.27,0.34,0.36,0.46,0.58,0.71,0.93,1.14,1.29,1.51,1.79,2.07,2.43,2.85,2.8
6,3.14,3.14,3.29,3.43,3.57,3.71,3.85,4,4,4,4.14,4.14,4.14,4.14,4.14,4.14,4.14,4.14,4.14,4.1
4,};
long double
hi[z1],delta[z1],sum[1000],o[500][500],m[500][500],v[500],ti[500],A,B,C,D,P,Q,PF;
int i,j,f,c,n,N,tm;
long PE;
int main()
{ system("color f5");
tm=n-2;
lim_arc();
cmatriz();exy();
rmatriz();ematriz();eterind();
enc_var();esc_var();enc_coe();
return 0;
void lim_arc()
fclose(arc);
void exy()
while (w<=n)
sx+=x[w-1];sy+=y[w-1];
w++;
ym=sy/n;
{ i=1;
while (i<=n-2)
{ ti[i-1]=6*(delta[i]-delta[i-1]);
i++;
void eterind()
arc=fopen("C:/Users/MELISSA SERRATO/Downloads/metodos
(1)/matriz.txt","a");fprintf(arc,"\nti=[\n");
while (i<=n-2)
{ printf("\n%20.5Lf ",ti[i-1]);
fprintf(arc,"%20.5Lf\n",ti[i-1]);
i++;
fprintf(arc,"];");
fprintf(arc,"\n v=inv(m)*ti");
fclose(arc);
}
void cmatriz()
{ int i=1;
while (i<=n-1)
{ hi[i-1]=x[i]-x[i-1];
delta[i-1]=(y[i]-y[i-1])/hi[i-1];
i++;
i=1;
while (i<=n-2)
{ m[i-1][i-1]=2*(hi[i-1]+hi[i]);
m[i-1][i]=hi[i];
m[i][i-1]=hi[i];
i++;
void ematriz()
arc=fopen("C:/Users/MELISSA SERRATO/Downloads/metodos
(1)/matriz.txt","a");fprintf(arc,"m=[\n");
while (f<=n-2)
{ c=1;
while (c<=n-2)
{ printf("%7.2Lf ",m[f-1][c-1]);
fprintf(arc,"%7.2Lf ",m[f-1][c-1]);
c++;
//printf("%20.4Lf ",ti[f-1]);
printf("\n");fprintf(arc,"\n");
f++;
}
fprintf(arc,"];");
fclose(arc);
void rmatriz()
{ int f,c;
int k=0;
{ f=k+1;
while (f<=tm)
while (c<=tm)
det=is*di-ii*ds;
if (k==0) m[f][c]=det;
else m[f][c]=det/m[k][k];
c++;
ds=ti[k];di=ti[f];det=is*di-ii*ds;
if (k==0) ti[f]=det;
else ti[f]=det/m[k][k];
f++;
k++;
void enc_var()
int k,i=n-3;v[0]=0;v[n-1]=0;
while (i>=0)
{ s=0;
j=i+1;
while (j<=n-3)
{ s=s+m[i][j]*v[j+1];
j++;
temp=(ti[i]-s)/m[i][i];
v[i+1]=temp;
i--;
void esc_var()
while (j<=n)
{ printf("\nv[%d]=%10.3Lf",j-1,v[j-1]);
j++;
void enc_coe()
while (j<=n-1)
{ ai=(v[j]-v[j-1])/(6*hi[j-1]);
bi=v[j-1]/2;
ci=delta[j-1]-(2*v[j-1]+v[j])*hi[j-1]/6;
di=y[j-1];
j++;