Академический Документы
Профессиональный Документы
Культура Документы
f1=f2;
fprintf(' i
xf(i)
Error aprox (i) \n');
%fprintf('%2d\t%11.7f\t\n',0,x(1));
for k=2:j;
fprintf('%2d\t%11.7f\t%7.3f\n',k-1,xf(k),ea(k-1));
end
clear all;
clc;
fprintf('\nCalculo de la raiz de una ecuacion por el metodo de la
Secante\n\n');
f=input('Dame la funcion f(x) : ','s');
x0=input('Dame el valor del intervalo inferior de x : ');
x1=input('Dame el valor del intervalo superior de x : ');
e=input('Dame el porciento del error : ');
ea=1000;
c=1;
while ea>e
x=x0;
g=eval(f);
x=x1;
gg=eval(f);
xi=x1-((gg*(x0-x1))/(g-gg));
ea=abs((xi-x1)/xi)*100;
x0=x1;
x1=xi;
c=c+1;
end
fprintf('\n\n\n\nLa raiz exacta es: %d',xi)
fprintf('\n\nNumero de iteraciones: %d\n',c);
function [n,DD]=Newton_int_1(x,y)
% Interpolacin con polinomios de Newton
% Vectores de entrada x e y; salida: coeficientes en n y dif. en DD
N = length(x)-1;
DD = zeros(N+1,N+1); DD(1:N+1,1) = y(:);
for k=2:N+1
for m=1:N+2-k
DD(m,k)=(DD(m+1,k-1)-DD(m,k-1))/(x(m+k-1)-x(m)); % Diferencias
divididas
end
end
a = DD(1,:); n = a(N+1);
for k=N:-1:1
n = [n a(k)] - [0 n*x(k)]; % n(x)*(x-x(k-1))+a_k-1
end
ejemplo
%do_newton_int_1.m
x=[-2 -1 1 2 4]; y=[-6 0 0 6 60]; % datos ordenados
[n,DD] = Newton_int_1(x,y)
n0 = lagrang_int(x,y) % por comparar con Lagrange
x = [1 2 4 -1 -2]; y=[0 6 60 0 -6]; % orden aleatorio datos
[n1,DD]= Newton_int_1(x,y)
xx = [-2: 0.02 : 4]; yy = polyval(n,xx);
clf, plot(xx,yy,b-,x,y,o) % se dibuja ltimo caso
function [l,L]=lagrang_int(x,y)
% Calcula el polinomio de interpolacin de Lagrange
% x e y vectores de datos; l, coeficientes polinomio resultante,
% L polinomio base
N=length(x)-1; l=0;
for m=1:N+1
P=1;
for k=1:N+1
if k~=m, P=conv(P,poly(x(k)))/(x(m)-x(k)); end
end
L(m,:)=P; % Polinomios de Lagrange base
l=l+y(m)*P; % Coeficientes el polinomio resultante
end
ejemplo
% do_Lagrange_int
x = [-2 -1 1 2]; y=[-6 0 0 6];
l = lagrang_int(x,y)
xx = [-2:0.02:2]; yy = polyval(l,xx);
plot(xx,yy,b,x,y,o)
else
end
end
X(i,3) = 100;
end
i = i + 1;
El primer parmetro que recibe es la funcin a la que queremos sacar las races, el
segundo y tercer parmetro son los puntos iniciales y el cuarto parmetro representa el
porcentaje de error permitido.
Para probar el mtodo se utiliza la siguiente funcin:
secante
clear all;
clc;
fprintf('\nCalculo de la raiz de una ecuacion por el metodo de la
Secante\n\n');
f=input('Dame la funcion f(x) : ','s');
x0=input('Dame el valor del intervalo inferior de x : ');
x1=input('Dame el valor del intervalo superior de x : ');
e=input('Dame el porciento del error : ');
ea=1000;
c=1;
while ea>e
x=x0;
g=eval(f);
x=x1;
gg=eval(f);
xi=x1-((gg*(x0-x1))/(g-gg));
ea=abs((xi-x1)/xi)*100;
x0=x1;
x1=xi;
c=c+1;
end
fprintf('\n\n\n\nLa raiz exacta es: %d',xi)
fprintf('\n\nNumero de iteraciones: %d\n',c);
function secante
global fun
fprintf('Metodo de la secante:\n');
fun=input('Ingrese la funcion:\n','s');
x0=input('Ingrese el primer punto inicial:\n');
x1=input('Ingrese el segundo punto inicial:\n');
tol=input('Ingrese la tol:\n');
it=0;
fprintf('it x0 x1 x2 x1-x2');
while(it<50) it="it+1;" x="x0;" f0="eval(fun);" x="x1;" f1="eval(fun);"
x2="(x0*f1-x1*f0)/(f1-f0);"> fprintf('el procedimiento se completo
satisfactoriamente:\n');
break
end
x0=x1;
x1=x2;
end
fprintf('la raiz buscada es=%15.9f\n',x2);
ezplot(fun),
grid on
Ejemplo:
Metodo de la secante:
Ingrese la funcion:
x^2+10*cos(x)
Ingrese el primer punto inicial:
1.5
Ingrese el segundo punto inicial:
2
Ingrese la tol:
10^(-5)