Function: 'ERROR, Inserte Otros Valores Iniciales'
Function: 'ERROR, Inserte Otros Valores Iniciales'
function p=trapezoide(f,a,b,n,m)
h=(b-a)/n;
n=n+1;
Y=zeros(n,1);
X=zeros(n,1);
suma=0;
for i=1:n
X(i)=a+h*(i-1);
x=X(i);
Y(i)=eval(f);
end
for i=2:n-1
suma=suma+Y(i);
end
p=0.5*h*(Y(1)+2*suma+Y(n));
Et=-1/12*dprom(f,a,b,m)*(b-a)^3;
Ea=-1/(12*n^2)*dprom(f,a,b,m)*(b-a)^3;
end
function dp=dprom(f,a,b,m)
dp=int(diff(sym(f),m),a,b)/(b-a);
end
function [z1,z2,z3,v1,v2,v3]=gaussp(a,b,tol)
n=length(b);
er=0;
s=zeros(1,n);
for i=1:n
s(i)=abs(a(i,1));
for j=2:n
if abs(a(i,j))>s(i)
s(i)=a(i,j);
end
end
end
[a,b,s,er,f]=eliminate(a,b,n,s,tol,er);
if er~=-1
x=substitute(a,b,n);
end
z1=x(1);
z2=x(2);
z3=x(3);
%Comprobando
v1=83/100*z1+55/100*z3;
v2=61/100*z2+24/100*z3;
v3=17/100*z1+39/100*z2+21/100*z3;
end
function [a,b,s,er,f]=eliminate(a,b,n,s,tol,er)
%er=0;
disp('f=')
for k=1:n-1
[a,b,s]=pivot(a,b,n,s,k);
if abs(a(k,k)/s(k))<tol
er=-1;
break
end
for i=k+1:n
f(i)=a(i,k)/a(k,k);
%disp(f(i));
for j=1:n
a(i,j)=a(i,j)-f(i)*a(k,j);
end
b(i)=b(i)-f(i)*b(k);
end
end
if abs(a(k,k)/s(k))<tol
er=-1;
end
end
function [a,b,s]=pivot(a,b,n,s,k)
p=k;
big=abs(a(k,k)/s(k));
for r=k+1:n
T=abs(a(r,k)/s(r));
if T>big
big=T;
p=r;
end
end
if p~=k
for m=k:n
T=a(p,m);
a(p,m)=a(k,m);
a(k,m)=T;
end
T=b(p);
b(p)=b(k);
b(k)=T;
T=s(p);
s(p)=s(k);
s(k)=T;
end
end
function x=substitute(a,b,n)
x(n)=b(n)/a(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+a(i,j)*x(j);
end
x(i)=(b(i)-sum)/a(i,i);
end
end
function [I,t,et]=gaussl(f,a,b,n)
syms z
x=((b+a)+(b-a)*z)/2;
dx=(b-a)/2;
fu=eval(f);
fun=fu*dx;
switch n
case 2
c0=1;
c1=1;
x0=-1/sqrt(3);
x1=1/sqrt(3);
z=x0;
fun0=eval(fun);
z=x1;
fun1=eval(fun);
I=c0*fun0+c1*fun1;
case 3
c0=0.5555556;
c1=0.8888889;
c2=0.5555556;
x0=-0.774596669;
x1=0;
x2=0.774596669;
z=x0;
fun0=eval(fun);
z=x1;
fun1=eval(fun);
z=x2;
fun2=eval(fun);
I=c0*fun0+c1*fun1+c2*fun2;
case 4
c0=0.3478548;
c1=0.6521452;
c2=0.6521452;
c3=0.3478548;
x0=-0.861136312;
x1=-0.339981044;
x2=0.339981044;
x3=0.861136312;
z=x0;
fun0=eval(fun);
z=x1;
fun1=eval(fun);
z=x2;
fun2=eval(fun);
z=x3;
fun3=eval(fun);
I=c0*fun0+c1*fun1+c2*fun2+c3*fun3;
case 5
c0=0.2369269;
c1=0.4786287;
c2=0.5688889;
c3=0.4786287;
c4=0.2369269;
x0=-0.906179846;
x1=-0.538469310;
x2=0;
x3=0.538469310;
x4=0.906179846;
z=x0;
fun0=eval(fun);
z=x1;
fun1=eval(fun);
z=x2;
fun2=eval(fun);
z=x3;
fun3=eval(fun);
z=x4;
fun4=eval(fun);
I=c0*fun0+c1*fun1+c2*fun2+c3*fun3+c4*fun4;
case 6
c0=0.1713245;
c1=0.3607616;
c2=0.4679139;
c3=0.4679139;
c4=0.3607616;
c5=0.1713245;
x0=-0.932469514;
x1=-0.661209386;
x2=-0.238619186;
x3=0.238619186;
x4=0.661209386;
x5=0.932469514;
z=x0;
fun0=eval(fun);
z=x1;
fun1=eval(fun);
z=x2;
fun2=eval(fun);
z=x3;
fun3=eval(fun);
z=x4;
fun4=eval(fun);
z=x5;
fun5=eval(fun);
I=c0*fun0+c1*fun1+c2*fun2+c3*fun3+c4*fun4+c5*fun5;
otherwise
disp('ERROR, el nmero de puntos debe estar comprendido entre 2 y 6')
end
t=double(int(sym(f),a,b));
et=(t-I)/t*100;
end
%EULER
%clear all;clc
n=input('Ingrese nmero de ecuaciones: ');
y=input('Variables iniciales dependientes: ');
xi=input('Variable inicial independiente: ');
xf=input('Variable final independiente: ');
dx=input('Tamao de paso: ');
xout=input('Intervalo de salida: ');
x=xi;
m=1;
xp(m)=x;
F=teoricrk(x,y);
for i=1:n
yp(i,m)=y(i);
end
a(m)=9.8-0.27*yp(i,m);
for i=1:n
t(i,m)=eval(F(i));
e(i,m)=(t(i,m)-yp(i,m))/t(i,m)*100;
end
A(m)=9.8-0.27*t(i,m);
while x<xf
xend=x+xout;
if xend>xf
xend=xf;
end
h=dx;
[h,x,y]=integrator(x,y,h,xend);
m=m+1;
xp(m)=x;
for i=1:n
yp(i,m)=y(i);
end
a(m)=9.8-0.27*yp(i,m);
for i=1:n
t(i,m)=eval(F(i));
e(i,m)=(t(i,m)-yp(i,m))/t(i,m)*100;
end
A(m)=9.8-0.27*t(i,m);
end
plot(xp,t)
hold on
plot(xp,yp,'--r')
%plot(xp,a,'--r')
%plot(xp,A,'g')
hold off
grid on
%disp('x ye yt e')
%fprintf('%i %i %i
%i\n',xp(1),yp(1,1),t(1,1),0)
%for i=2:(xf-xi)/dx+1
% fprintf('%1.1f %9.10f %9.10f
%9.10f\n',xp(i),yp(1,i),t(1,i),e(1,i))
%end
disp('x ye1 ye2 yV1 yV2
et1 et2')
fprintf('%i %i %i %i %i
%i %i\n',xp(1),yp(1,1),yp(2,1),t(1,1),t(2,1),e(1,1),e(2,1))
for i=2:(xf-xi)/dx+1
fprintf('%1.1f %5.6f %5.6f %5.6f %5.6f
%5.6f %5.6f\n',xp(i),yp(1,i),yp(2,i),t(1,i),t(2,i),e(1,i),e(2,i))
end
function F=teoricrk(x,y)
syms f(x) g(x)
S=dsolve(diff(f)==f*x^2-1.2*f,diff(g)==(1+x)*g^(0.5),f(0)==1,g(0)==1);
F(1)=S.f(1);
F(2)=S.g(1);
end
function [h,x,y]=integrator(x,y,h,xend)
while x<xend
if xend-x<h
h=xend-x;
end
[x,ynew]=euler(x,y,h);
y=ynew;
end
end
function [x,ynew]=euler(x,y,h)
dydx=derivs(x,y);
ynew=y+dydx*h;
x=x+h;
end
function dydx=derivs(x,y)
dydx(1)=1/(0.55*sqrt(2*9.81*x));
%dydx(2)=(1+x)*(y(2))^0.5;
end
%RUNGE-KUTTA
clear all;clc
n=input('Nmero de ecuaciones: ');
y=input('Valores iniciales dependientes: ');
xi=input('Valor inicial de la variable independiente: ');
xf=input('Valor final de la variable independiente: ');
dx=input('Tamao de paso: ');
xout=input('Tamao de paso: ');
x=xi;
m=1;
xp(m)=x;
F=teoricrk(x,y);
for i=1:n
yp(i,m)=y(i);
end
for i=1:n
t(i,m)=eval(F(i));
e(i,m)=(t(i,m)-yp(i,m))/t(i,m)*100;
end
while x<xf
xend=x+xout;
if xend>xf
xend=xf;
end
h=dx;
[x,y]=integratork(x,y,n,h,xend);
m=m+1;
xp(m)=x;
for i=1:n
yp(i,m)=y(i);
end
for i=1:n
t(i,m)=eval(F(i));
e(i,m)=(t(i,m)-yp(i,m))/t(i,m)*100;
end
end
plot(xp,yp,'--r')
hold on
plot(xp,t)
grid on
hold off
%disp(xp)
%disp(yp)
disp('x yRK zRK yV
zV e1 e2')
fprintf('%i %i %i %i
%i %i%%
%i%%\n',xp(1),yp(1,1),yp(2,1),t(1,1),t(2,1),e(1,1),e(2,1))
for i=2:(xf-xi)/dx+1
fprintf('%1.1f %5.6f %5.6f %5.6f
%5.6f %7.8f%%
%7.8f%%\n',xp(i),yp(1,i),yp(2,i),t(1,i),t(2,i),e(1,i),e(2,i))
end
function [x,y]=integratork(x,y,n,h,xend)
while x<xend
if (xend-x)<h
h=xend-x;
end
[x,y]=RK4(x,y,n,h);
end
end
function [x,y]=RK4(x,y,n,h)
K1=derivrk(x,y);
for i=1:n
ym(i)=y(i)+K1(i)*(h/2);
end
K2=derivrk(x+h/2,ym);
for i=1:n
ym(i)=y(i)+K2(i)*(h/2);
end
K3=derivrk(x+h/2,ym);
for i=1:n
ye(i)=y(i)+K3(i)*h;
end
K4=derivrk(x+h,ye);
for i=1:n
slope(i)=(K1(i)+2*(K2(i)+K3(i))+K4(i))/6;
y(i)=y(i)+slope(i)*h;
end
x=x+h;
end
function [dy]=derivrk(x,y)
dy(1)=y(1)*x^2-1.2*y(1); %Funciones del problema
dy(2)=(1+x)*(y(2))^(0.5);
%dy(3)=sin(x*y(3))+y(4);
%dy(4)=cos(y(4));
end