Sie sind auf Seite 1von 5

Programas para aproximar races de una funcin no lineal.

% Programa que aproxima la raz de una funcin % utilizando el M todo de Biseccin o Bolzano. clc; clear all; fprintf('Mtodo de la Biseccin o Bolzano\n'); fprintf('para dar solucin a una ecuacin no lineal.\n'); fprintf('Escribe los lmites del intervalo:\n'); a = input('a = '); b = input('b = '); % Se investiga si existe la raz en el intervalo fa = f(a); fb = f(b); if fa*fb < 0 i = 0; % Se inicia el contador de iteraciones. Ea = 100; % Se inicia el error aprox. porcentual. Es = input('Escribe el error sugerido, Es = '); while Ea >= Es x1 =(a+b)/2; fx1 = f(x1); if fa*fx1 < 0 b = x1; end if fa*fx1 > 0 a = x1; fa = fx1; end if fa*fx1 == 0 fprintf('Despus de %i iteraciones.\n', i); fprintf('La raz exacta es: %f\n', x1); break; end x2 = (a+b)/2; Ea = abs((x2-x1)/x2)*100; x1 = x2; i = i + 1; end fprintf('Despus de %i iteraciones la raz\n', i); fprintf('aproximada es %0.10f\n', x1); else fprintf('No hay raz en el intervalo (%g, %g).\n',a, b); end

% Programa que aproxima la raz de una fucnin % utilizando el Mtodo de la Falsa Posicin. clc; clear all; fprintf('Mtodo de la Falsa Posicin (Regula Faisi)\n'); fprintf('para dar solucin a una ecuacin no lineal.\n');

fprintf('Escribe los lmites del intervalo:\n'); a = input('a = '); b = input('b = '); % Se investiga si existe la raz en el intervalo fa = f(a); fb = f(b); if fa*fb < 0 i = 0; % Se inicia el contador de iteraciones. Ea = 100; % Se inicia el error aprox. porcentual. Es = input('Escribe el error sugerido, Es = '); x1 = b - fb*(a-b)/(fa-fb); while Ea >= Es fx1 = f(x1); if fa*fx1 < 0 b = x1; fb = fx1; end if fa*fx1 > 0 a = x1; fa = fx1; end if fa*fx1 == 0 fprintf('Despus de %i iteraciones.\n', i); fprintf('La raz es: %f\n', x1); break; end x2 = b - fb*(a-b)/(fa-fb); Ea = abs((x2-x1)/x2)*100; x1 = x2; i = i + 1; end fprintf('Despus de %i iteraciones la raz\n', i); fprintf('aproximada es %0.10f\n', x1); else fprintf('No hay raz en el intervalo (%g, %g).\n',a, b); end

% Mtodo de Punto Fijo o de las sustituciones Sucesivas, % para aproximar races de funciones. clc; clear all; fprintf('Mtodo de Punto Fijo (Iteracin de punto fijo)\n'); fprintf('para dar solucin a una ecuacin no lineal.\n'); x0 = input('Escriba la primera aproximacin.\nx0 = '); Es = input('Escriba el Error sugerido.\nEs = '); ni = input('Escribe el nmero de iteraciones mximo.\nni = '); Ea = 100; i = 0; while Ea > Es && i < ni

x1 = g(x0); Ea = abs((x1 - x0)/x1)*100; x0 = x1; i = i + 1; end if Ea <= Es fprintf('Despus de %i iteraciones.\n',i); fprintf('La raz aproximada es: %0.8f\n',x0); else fprintf('Despus de %i iteraciones no hay convergencia.\n',i); fprintf('El valor de x alcanzado es: %0.8f\n',x0); end

% Funcin que es llamada por el programa PuntoFijo, para aproximar races de ec. % no lineales, "PuntoFijo.m". function y = g(x) %y =(4*pi*8.85e-12)*(x^2+0.8^2)^(3/2)/(2.0e-5)^2; %y = sqrt((((2.0e-5)^2*x)/(4*pi*8.85e-12))^(2/3)-0.8^2); %y = x^3 - 3 * x^2 + 5 * x - 4 + x; %y = (4 - x^3 + 3*x^2)/5; %y = 1/(4*pi*8.85e-12)*(2.0e-5)^2*x/(x^2+0.8^2)^(3/2)-1+x; %y = 75*exp(-1.5*x)+20*exp(-0.07*x)-15+x; %y = -1/1.5*log((15-20*exp(-0.07*x))/75); %y = -1/0.07*log((15-75*exp(-1.5*x))/20); %y = 9*exp(-0.7*x)*cos(4*x)-3.5+x; %y = 1/(-0.7)*log(3.5/(9*cos(4*x))); %y = 1/4*acos(3.5/(9*exp(-0.7*x))); %y = 40*tan(x)-9.81/(2*20^2*cos(x)^2)*40^2+0.8+x; y = atan((9.81/(2*20^2*cos(x)^2)*40^2-0.8)/40); end

% Mtodo de Newton-Raphson para aproximar races % de una funcin no lineal. % x0, es la primera aproximacin a la raz buscada. % Es, es el error sugerido, tan pequeo como se decee. % ni, es el nmero de iteraciones propuesta. clc; clear all; fprintf('Mtodo de Newton-Raphson para aproximar races\n'); fprintf('de una funcin no lineal.\n'); fprintf('Escriba la aproximacin inicial.\n'); x0 = input('x0 = '); fprintf('Escriba el error aproximado.\n'); Es = input('Es = '); fprintf('Escriba el nmero mximo de iteraciones.\n'); ni = input('ni = '); Ea = 100; i = 0; while Ea > Es && i <= ni

[fx, dfx] = fx_dfx(x0); x1 = x0 - fx / dfx; Ea = abs((x1 - x0)/x1) * 100; x0 = x1; i = i + 1; end if Ea <= Es fprintf('La raz aproximada es: %0.10f\n', x0); fprintf('Despus de %i iteraciones.\n', i); else fprintf('Despus de %i iteraciones no hay convergencia.\n', i); end

% Subprograma que es llamado por el programa principal "NwRaph", % es este subprograma (function) se cdofica la funcin y su derivada. function [fx, dfx]= fx_dfx(x) fx = (1.6-x)/x^2-(x-0.32)/0.1024; df = diff('(1.6-x)/x^2-(x-0.32)/0.1024'); dfinline = inline(df); dfx = dfinline(x); end

% Mtodo de la secante, para aproximar races de funciones % no lineales. clc; clear all; fprintf('Mtodo de la Secante'); fprintf('para dar solucin a una ecuacin no lineal.\n'); fprintf('Escriba las dos aproximacines iniciales.\n'); x0 = input('x0 = '); x1 = input('x1 = '); fprintf('Escrba el error sugerido.\n'); Es = input('Es = '); fprintf('Escrba el No. mximo de iteraciones.\n'); ni = input('ni = '); Ea = 100; i = 0; while Ea > Es && i < ni fx0 = f(x0); fx1 = f(x1); x2 = x0 - fx0*(x1-x0)/(fx1-fx0); Ea = abs((x1 - x0) / x1)* 100; i = i + 1; x0 = x1; x1 = x2;

end if Ea <= Es fprintf('La raz aproximada es: %0.8f\n', x0); fprintf('Despus de %i iteraciones.\n', i); else fprintf('Despus de %i iteraciones no hay convergencia.\n', ni); end

% Funcin que es llamada por los programa para aproximar races de ec. % no lineales, Biseccin, Falsa Posicin y Secante. function y = f(x) y = 40*tan(x)-9.81/(2*20^2*cos(x)^2)*40^2+0.8; end

Das könnte Ihnen auch gefallen