Vous êtes sur la page 1sur 52

INTRODUCCION

El presente proyecto de programacin y computacin tiene implcitos los distintos


mtodos que sirven para la obtencin de la raz o races de una ecuacin, desde el
fundamento terico, la explicacin de su funcionamiento, su implementacin en los
paquetes de Excel, Matlab y Visual Basic, mostrando los diagramas de flujo y el
pseudo cdigo correspondiente a cada mtodo.

Dichos mtodos son:


Cardano
Sustitucin sucesiva
Wegstein
Biseccin
Regula falsi
Newton-Raphson
Secante
Mtodo iterativo de la bsqueda de objetivo (funcin inter-construida de Excel)
Funciones roots, fzero y fsolve (funciones inter-construidas de Matlab).

A travs de los mtodos antes mencionados se resolvieron cinco problemas de


ingeniera que fueron planteados por el profesor titular de la materia, cada problema
esta resuelto por todos los mtodos antes mencionados en los tres paquetes utilizados
como lo son Excel, Matlab y visual Basic, a excepcin de algunos mtodos que en
distintos casos no se podan aplicar a todas las ecuaciones resultantes o a todos los
programas utilizados, ya que por ejemplo el mtodo de cardano solo sirve para
ecuaciones cbicas y las funciones inter-construidas de bsqueda de objetivo solo
sirve en Excel as como las funciones roots, fzero y fsolve solo se pueden aplicar en
Matlab.

Para desarrollar cabalmente este proyecto se integro un equipo de tres integrantes que
con disposicin y entrega se reuni varias veces para trabajar sobre el mismo y
desarrollar los programas para los distintos paquetes ya mencionados y resolver los
problemas que se nos fueron encomendados.

A la conclusin que llegamos los miembros de este equipo fue que el resultado de este
proyecto fue satisfactorio ya que sirvi para el desarrollo de las habilidades de la
programacin de los integrantes del equipo poniendo en prctica los conocimientos
obtenidos en las aulas de clase y laboratorio de la institucin educativa a la cual
pertenecemos, tambin contribuy al cumplimiento del objetivo principal de este
proyecto y del curso en general que es que el alumnos maneje la computadora para la
solucin de problemas dentro de la ingeniera.

OBJETIVOS
Desarrollar las habilidades para manejar los paquetes de Excel, Matlab y Visual
Basic, aprendiendo su uso en general y el modo de operacin de sus funciones
inter-construidas.

Programar los distintos mtodos que sirven para la localizacin de races, en


cada uno de los paquetes mencionados y as poner en prctica los
conocimientos adquiridos en clase.

Dar solucin a los problemas planteados por el profesor con ayuda de los
programas de computadora que ya mencionamos y mediante los algoritmos
apropiados.

Mejorar las relaciones interpersonales, trabajando en equipo, ya que en nuestra


profesin es indispensable el trabajo en equipo para lograr ptimos resultados.

Al trmino de este proyecto cada uno de los integrantes del equipo manejara
satisfactoriamente los paquetes de Excel, Matlab y Visual Basic, los cuales le
aportaran las herramientas necesarias para resolver diversos problemas que se le
presenten a lo largo de su trayectoria como estudiante y en su vida profesional
de una manera mas rpida y correctas, con el menor ndice de error.

Los alumnos integrantes del equipo tendr las habilidades y capacidades para
poder ejecutar cualquier programa que se le proponga o se requiera para
desarrollar su vida laboral idneamente de acuerdo con los estndares de
calidad que nos exige nuestra institucin educativa.

TEORA Y METODOS
METODO DE CARDANO.

Este mtodo para localizacin de races tiene las restricciones de que solo se puede
aplicar a los ecuaciones que sean cbicas, adems el coeficiente de la X3 debe ser
siempre igual a la unidad, y de no ser as, se debe dividir toda la ecuacin entre el
coeficiente de la X3 para cumplir este requisito.

Una vez que se hayan cumplido las condicionantes ya mencionadas se debe tener la
ecuacin en forma polinmica, de tal manera que se parezca al modelo
f{x}= a3x3+a2x2+a1x+a0 = 0

Posteriormente se definen los siguientes trminos:

t =1/3 a1 1/9 a22 u = 1/6(a1a2 3 a0) 1/27 a22

obtendremos el trmino:
d = t 3 + u2

El trmino d se denomina discriminante y es el que nos proporciona informacin


sobre el dominio de las races de la ecuacin, de tal manera que:

Si d < 0, todas las races son reales y diferentes.


Si d = 0, todas las races son reales y al menos dos de ellas son iguales.
Si d > 0, solo una raz es real y dos de ellas son imaginarias y conjugadas.

Para determinar las races de la ecuacin cbica, sea cual sea el caso que se nos presente
de los antes mencionados se utilizan las siguientes formulas:

S1 = (u + d1/2)1/3 S2 = (u d1/2)1/3

X1 = (s1 + s2) a2/3

X2 = -1/2 (s1 + s2) a2/3 + [raiz3/2 i] * (s1 s2)

X3 = -1/2 (s1 + s2) a2/3 - [raiz3/2 i] * (s1 s2)

Donde i = raz (1), el vector unitario imaginario. Cuando se introducen nmeros


complejos es necesario conocer algunas operaciones elementales del lgebra de
nmeros complejos, pero no se considera pertinente mencionarlas en este trabajo.

Cuando no se tiene la facilidad de realizar operaciones de aritmtica compleja, entonces


las races pueden determinarse por operaciones trigonomtricas mediante las siguientes
formulas:

X1 = 2raiz(-t)* cos(teta/3) a2/3

X2 = 2raiz(-t)* cos[teta/3 + 2pi/3] a2/3


X3 = 2raiz(-t)* cos[teta/3 + 4pi/3] a2/3

Donde el angulo teta (en radianes) se obtiene de la siguiente manera:

teta = cos-1 (u/raiz(-t3)

La manera de comprobar las raices que nos resulten de la ecuacin cubica es mediante
las relaciones que se muestran a continuacin.

x1x2x3 = -a0

x1x2 + x1x3 + x2x3 = a1

x1 + x2 + x3 = -a2
MTODO DE SUBSTITUCIONES SUCESIVAS.

El mtodo de substituciones sucesivas es un mtodo de iteraciones para encontrar la


raz de una ecuacin, el cual consiste en hacer un despeje de la variable independiente x
de la ecuacin, y que sta variable independiente quede en funcion de otra para poder
evaluar la funcion. Es decir, de una funcion f{x} nos debe quedar de la forma x =g{x},
(ejemplo: de la funcion f{x}= e-x x, una forma seria x = e-x ), cabe mencionar que
para una misma ecuacin hay diferentes formas de expresarla para que nos quede de la
forma x = g{x}.

Una vez que tengamos nuestra ecuacin de la forma x = g{x} se procede a suponer un
valor inicial para la x, al cual llamamos x supuesta, y este valor lo evaluamos en la
funcion g{x}, el valor resultante es el valor de la xcalculada, si x supuesta y x calculada no
concuerdan dentro de una tolerancia establecida, tal que se cumpla la condicion

X calculada X supuesta
<=
X supuesta

Se repite el mtodo pero ahora se utiliza x calculada como valor supuesto, se repite tantas
veces sea necesario hasta que se cumpla el criterio de convergencia establecido.

En ocasiones la sustitucin sucesiva funciona muy bien y converge en pocos pasos.


Sin embargo, de vez en cuando se observan patrones de convergencia insatisfactorios.
Uno de ellos es cuando las estimaciones sucesivas oscilan en torno a un valor central,
entonces el procedimiento requerir muchas iteraciones para determinar la raz. Para
ello podemos emplear una sustitucin sucesiva modificada que nos ayude a acelerar el
proceso, la formula es

X calculada = X supuesta + P [f(X supuesta X supuesta]

donde P, el parmetro de amortiguacin, es un numero entre 0 y 1. Si P=1, el


procedimiento se reduce a una sustitucin sucesiva pura, y a medida que P se aproxima
a cero, el tamao del paso se hace cada vez mas pequeo.

Otro caso es el de convergencia lenta en la sustitucin sucesiva se refiere a una


progresin lenta, el remedio para este problema es acelerar el procedimiento de
convergencia (saltar muchas de las soluciones intermedias a las cuales conducira la
sustitucin sucesiva continua), uno de los algoritmos de aceleracin que se utiliza con
mayor frecuencia es el mtodo de Wegstein que se describir posteriormente.

Lo que realiza grficamente este mtodo es que cuando se supone un valor de x se


calcula su punto en la funcin g{x} y este punto se traslada a la recta de 45,
posteriormente con este punto se obtiene el nuevo valor de supuesto trasladndolo al
eje de las x, al realizar estos pasos x supuesta y x calculada se acercan cada vez mas
hasta que cumplen con el criterio de convergencia y se converge con el punto donde se
cruzan la funcin g{x} y la recta de 45, es decir se cumple la igualdad x = g{x},
aproximadamente.
MTODO DE WEGSTEIN

Como se comento anteriormente el mtodo de wegstein es un mtodo para acelerar el


procedimiento de sustitucin sucesiva, lo que se realiza grficamente este mtodo es
que utilizando dos puntos dentro de la funcin g {x} se unen generando una lnea
recta y se extrapola dicha lnea hacia la solucin, valor que se encuentra mas cercano a
la raz buscada, esto es, donde se intersectan la lnea de 45 y la lnea recta y=x.

Para encontrar los dos puntos dentro de la funcin g {x} que nos servirn para generar
la lnea recta se utilizan de nuevo valores supuestos y calculados mediante el
siguiente procedimiento.

Se supone un valor inicial (x1) y enseguida se evala su valor en la funcin g{x}


cuyo valor ser (y1). El siguiente valor se determina por medio de sustitucin
sucesiva (x2 = y1) a partir de la recta de 45, con este valor se obtiene (y2) evalundolo
en la funcin g{x} y una vez obtenidos estos dos puntos, cuyas coordenadas son
[(x1,y1), (x2,y2)], se unen para generar una lnea recta donde la pendiente (m) y la
ordenada (b) son:

m = y2 y1
x2 x1

despejando b y sustituyendo m nos resulta b = x1y2 x2y1


x1 x2
Para calcular el nuevo valor x3, debemos encontrar donde se intersectan et alinea recta
con la lnea de 45 (donde x = y = x3), es decir, que se cumpla la igualdad x3 = mx3 +b,
sustituyendo las ecuaciones de (m) y (b) y despejando la x3 nos resulta:

X3 = x1y2 x2y1
x1 x2 y1 + y2

El criterio de convergencia que debemos aplicar para este mtodo es

x3 x2 <=
x2
Si se cumpli el criterio de convergencia , se ha encontrado la raiz, de no ser as se
realiza la siguiente iteracin. Para sta desaparece el punto 1, el punto 2, se convierte
en punto 1; y el punto 3 se convierte en el punto 2:

x1 x2; y1 y2; x2 x3; y2 g{x2}

siguiendo todo el procedimientos desde el principio hasta que se cumpla el criterio de


convergencia.
MTODO DE BISECCIN O MEDIO INTERVALO

Este mtodo de la biseccin consisten ubicar una raz de que est dentro de un rango de
valores [a, b] que le asignamos a la variable independiente. Para que ste mtodo
resulte satisfactorio debemos saber que existe una raz dentro del rango de valores que
estamos asignando. Lo que se realiza grficamente en la aplicacin de este mtodo es
que como tenemos dos extremos, calculamos la media de los dos valores y este nuevo
valor debe estar mas cerca de la raz buscada, de no ser as se va refinando la bsqueda
hasta que encontremos la raz o nos acerquemos a ella con cierta presicin.

A los extremos del intervalo [a, b] se les designa el nombre de limite izquierdo (x izq)
para la a y limite derecho (x der) para la b, tambin denominaremos yizq a la evaluacin
de f {x izq} y yder a la evaluacin de f {x der}. Para saber si dentro de este rango de
valores est una raz lo que debemos hacer es evaluar en la funcin f {x} los valores de
x izq y de x der , si obtenemos que las evaluaciones resultan de signo contrario estamos
seguros de que dentro de este rango esta localizada una raz.

Posteriormente se procede a dividir por la mitad el intervalo de los valores extremos


[x izq, x der] varias veces y en cada caso localizar el segmento que contenga la raz y
recorrer los limites hacia esa mitad.

Para localizar el valor que se encuentra a la mitad del intervalo, al que llamaremos
x med , utilizaremos el simple calculo de sumar los dos valores y dividirlos entre dos:

Xmed = xizq + xder


2

Para este mtodo se tienen los siguientes criterios de convergencia:

Ymed <= x der x izq <=


2

Si al primer clculo de x med no se cumple el criterio de convergencia, se realiza el


segundo calculo, pero para este se comparan los signos de Yizq y Yder con el signo que
resulte de Ymed. Si se observa que Ymed y Yizq tienen el mismo signo y Yder diferente, el
nuevo rango de bsqueda deber recortarse en las absisas a los valores de
[xmed, xder]; es decir el extremo izquierdo toma el valor del punto medio. Si por lo
contrario, los signos de Ymed y Yder son los que coinciden , entonces el extremo derecho
es que deber recorrerse, tomando el valor del extremo derecho el valor del punto
medio.

En sntesis los valores de Xmed y Ymed se van a sustituir por los valores extremos de X y
Y por los cuales coincida el signo de Ymed y Y, para realizar los siguientes clculos hasta
lograr que se cumpla el criterio de convergencia.

MTODO DE LA FALSA POSICIN (REGULA FALSI)


Para la correcta aplicacin de este mtodo y encontrar las races de una ecuacin el
primer paso que se debe de realizar es escribir la ecuacin de la forma f{x}= 0. Una vez
cumplida sta condicionante se procede a elegir dos valores de x (entre los cuales se
encuentra una raz), denominados x1y x2 y evaluar estos valores en la funcion f{x}, as
obtenemos dos puntos con las coordenadas (x1, y1) y (x2,y2). Adems al igual que el
mtodo de la biseccin los signos de Y1 y Y2 deben ser diferentes, para asegurarse que
entre estos dos puntos se encuentra una raz.

Posteriormente los dos puntos se unen mediante una lnea recta que intersecta al eje
de la abscisas, a este punto le llamaremos x3, esta interseccin constituye una
posicin mas cercana a la raz buscada.

Partiendo del criterio de que triangulos semejantes tienen ambos la misma pendiente m,

m = y1 y2 = y1 0 = Pendiente
x1 x2 x1 x3

reacomodando la ecuacin y despejando la x3, que es la que nos interesa, nos queda la
ecuacin de la siguiente manera

X3 = x1 y1 * [x2 x1] = x2 y2 * [x2 x1]


Y2 y1 y2 y1

Enseguida se aplica el criterio de convergencia, que para ste mtodo es el siguiente

F{x} <=E

Si no se cumple el criterio de convergencia entonces se realiza un segundo calculo


siguiendo el mismo procedimiento, pero para este segundo calculo se sigue un
procedimiento similar al que se utiliz en el mtodo de biseccin, es decir, se checa el
signo de Y3 con los signos de Y1 y Y2, y con el que coincida es por el que se va a
sustituir a (x1, y1) o (x2, y2) segn sea el caso, por (x3, y3).

Lo anterior se realiza tantas veces sea necesario hasta que se cumpla el criterio de
convergencia.

MTODO DE NEWTON-RAPHSON
El mtodo de Newton-Raphson es muy til y sencillo de utilizar, solo que se tiene que
tener presente la definicin de la derivada de una funcin, la cual es la pendiente de la
recta tangente a un punto en la curva, tambin se tienen que tener presentes las reglas
de derivacin ya que se van a ocupar, tanto para el desarrollo del mtodo como para
entender el fundamento terico del mismo.

La manera de entender como funciona el mtodo es muy sencilla, solo se tiene que tener
la ecuacin escrita en funcin de la variable independiente como f{x}= 0. Se traza la
grafica de f{x} contra x y se obtiene la curva que cruza por eje de las abscisas, siendo
esta la raz de la ecuacin.

Se elige un valor inicial para x a la cual llamaremos (Xsup) y se calcula fsup =f{xsup},
despus se dibuja una lnea tangente a la curva en el punto (xsup, fsup) y se emplea la
interseccin de esta lnea con el eje de las abscisas como la siguiente estimacin (xcal).
Los valores sucesivos de x generados de este modo (x2, x3, x4) pueden converger
sobre la raz buscada.

La formula para cada estimacin (xcal) en trminos de la estimacin previa (xsup) puede
obtenerse de la siguiente manera. La pendiente de la tangente es f= (df/dx). Sin
embargo, dos puntos conocidos sobre esta lnea son (xcal, 0) y (xsup, fsup), de modo que
la pendiente tambin es igual a (y2 y1)/(x2-x1), que en este caso sera
(0 fsup)/(xcalc xsup). Igualando estas dos expresiones para la pendiente se obtiene

fsup = -fsup
xcal - xsup

Despejando la xcalc nos resulta la expresin

xcalc = xsup fsup


fsup

Una vez obtenida la formula se procede a aplicar el mtodo, primeramente debemos


tener la ecuacin de f{x}= 0, despus se deriva sta ecuacin para obtener la f{x}, ya
teniendo estas dos funciones se inicia como ya se haba comentado, suponiendo un
valor de xsup, posteriormente se calcula f{xsup} as como f{xsup}. Utilizando la formula
obtenida para xcal, se busca dicha xcal y se checa a ver si cumple con el criterio de
convergencia, que para este metodo es el siguiente.

xcal xsup <=


xsup
Si no se cumple dicho criterio se repite el mtodo, solo que para calcular el siguiente
valor de x, la xsup toma el valor de la xcal.
xsup xcal
MTODO DE LA SECANTE
Este mtodo es muy similar al mtodo de la falsa posicin, ya que al final resultan las
mismas formulas, solo que en este mtodo se obtienen de distinta forma, que un poco
mas adelante se describir.

El mtodo de Newton-Raphson es muy eficiente, solo que tiene el inconveniente de que


se complica cuando las funciones no son polinomiales sino que tienen funciones
trascendentales o son funciones ms complejas, por lo que se recurre a utilizar
aproximaciones simples para los valores de la derivada. Es decir, se eligen dos puntos
entre los cuales se encuentre la solucin de la ecuacin (cabe mencionar que al igual
que en mtodos anteriores los signos de estos puntos deben ser opuestos).

A partir del mtodo de Newto-Raphson y de estos puntos mencionados, llamados punto


1 y punto 2, cuyas coordenadas son (x1, y1) y (x2, y2) respectivamente, podemos calcular
la pendiente de la lnea recta que los une, llamada sta secante porque toca dos puntos
de la curva, con la formula ya conocida de (y2 y1)/(x2 x1). Pero como sabemos que la
derivada nos expresa la pendiente de la recta igualamos las dos ecuaciones quedndonos
de la siguiente forma

f{x2} = f{x2} f{x1} = y2 y1


x2 x1 x2 x1

Sustituyendo la derivada en la formula de Newton-Raphson nos resulta de la siguiente


manera

x3 = x2 f{x2) = x2 - f{x2} = x2 - y2
f{x2} f{x2} f{x1} y2 y1
x2 x1 x2 x1

x3 = x2 - y2 (x2-x1)
y2 y1

Observamos que resulta una ecuacin igual a la que utilizamos en el mtodo de la


falsa posicin, por lo tanto podemos usar cualquiera de las ecuaciones siguientes

x3 = x1 y1 (x2 x1) x3 = x 2 - y2 (x2-x1)


(y2 y1) (y2 y1)

El punto x3 es el que nos interesa encontrar ya que es el que representa una posicin ms
cercana a la raz buscada, una vez encontrado este punto a travs de las ecuaciones
plasmadas se verifica si se cumple el criterio de convergencia, en este caso puede ser
cualquiera de los dos que se muestran a continuacin

x3 x2 <=
x2

o bien; f{x3} <=


Si no se cumple el criterio de convergencia se realiza una segunda iteracin en donde el
punto 1 desaparece, el punto numero 2 se hace punto 1 y el punto 3 se hace punto 2;
cada uno con sus respectivas coordenadas

x1 x2 y1 y2

x2 x3 y2 y3

Esta es la parte que difiere del mtodo de la falsa posicin, la forma de recorrer los
limites. Una vez que se tienen los nuevos puntos 1 y 2 se repite el proceso tantas veces
sea necesario hasta que se cumpla el criterio de convergencia.
MTODO DE CARDANO
function z=CARDANO(a)
if length(a)~=4
error('faltan (o sobran) coeficientes de la ecuacion cubica')
z=NaN;
return
end
i=sqrt(-1);
a3=a(1); a2=a(2); a1=a(3); a0=a(4);
if a3~=0
a0=a0/a3; a1=a1/a3; a2=a2/a3; a3=1;
end
t=a1/3-a2^2/9; u=(a1*a2-3*a0)/6-a2^3/27;
d=t^3+u^2; if abs(d)<1e-16, d=0; end
if(u+sqrt(d)<0) & (d>=0)
s1=-abs((u+sqrt(d)))^(1/3);
else
s1=(u+sqrt(d))^(1/3);
end
if(u-sqrt(d)<0)&(d>=0)
s2=-abs((u-sqrt(d)))^(1/3);
else
s2=(u-sqrt(d))^(1/3);
end
if d>0
disp('una raiz real y dos complejas conjugadas')
elseif d<0
disp('todas las raices son reales y diferentes')
else
disp('raices reales y al menos dos son iguales')
end
z(1)=(s1+s2)-a2/3;
z(2)=-(s1+s2)/2-a2/3+i*sqrt(3)/2*(s1-s2);
z(3)=-(s1+s2)/2-a2/3-i*sqrt(3)/2*(s1-s2);
Z=sort(z)';

MTODO DE SUSTITUCIN SUCESIVA


function root=susu(f,xsup)
epsilon=1e-5;
Nmax=50;
x1=xsup;
iter=1; convergio=(1==0);
while (iter<=Nmax)& (~convergio)
x2=feval(f,x1);
convergio=(abs((x2-x1)/x1)<epsilon);
if ~convergio
iter=iter+1;
x1=x2;
end
end
if convergio
root=x2;
fprintf ('\n%svalor de la raiz es =%10.6g en %g iteraciones\n',blanks(7),root,iter)
else
root=NaN;
fprintf ('el metodo no convergio despues de %g iteraciones\n',Nmax)
end

MTODO DE WEGSTEIN
function root=wegstein(f, xsup)
epsilon=1e-5;
Nmax=550;
x1=xsup;
y1 = feval(f, x1);
x2=y1;
iter=1; convergio=(1==0);
while (iter<=Nmax) & (~convergio)
y2 = feval(f, x2);
x3=((x1*y2)-(x2*y1))/(x1-x2-y1+y2);
convergio=(abs((x3-x2)/x2)<epsilon);
if ~convergio
iter=iter+1;
x1=x2;
y1=y2;
x2=x3;
end
end % while
if convergio
root=x3;
fprintf ('\n%svalor de la raiz es =%10.6g en %g iteraciones\n',blanks(7),root,iter)
else
root=NaN;
fprintf ('el metodo no convergio despues de %g iteraciones\n',Nmax)
end

MTODO DE BISECCIN
function root =bisec(f, xizq, xder)
epsilon = 1e-5;
Nmax = 50;
yizq = feval(f, xizq); yder = feval(f,xder);
if xizq >= xder
error('El limite izquierdo es mayor que el derecho "%g > %g". Stop!', xizq, xder)
root = NaN;
return
end
if(yder * yizq > 0)
error('Las funciones en los extermos tienen el mismo signo: f(%g)=%g; f(%g)=%g
Stop!', xizq, yizq, xder, yder)
root =NaN;
return
end
iter = 1; convergio = (1==0)
while (iter <= Nmax)& (~convergio)
xmed = (xizq + xder)/2; ymed = feval (f, xmed);
convergio = (abs(ymed)<epsilon) | ((xder-xizq)/2 < epsilon);
if ~convergio
iter = iter + 1;
if yizq*ymed > 0
xizq = xmed; yizq = ymed;
else
xder = xmed; yder = ymed;
end
end
end
if convergio
root = (xizq + xder)/2;
fprintf('\n%sValor de la raiz = %10.6g en %g iteraciones \n', blanks(7), root, iter)
else
root = NaN;
fprintf('El metodo no convergio despues de %g iteraciones\n', Nmax)
end

MTODO DE LA FALSA POSICIN


function root=falsa(f,xizq,xder)
epsilon=1e-5;
Nmax=150;
x1=xizq;
x2=xder;
y1 = feval(f, x1); y2 = feval(f, x2);
if x1>=x2
error('el limite izquierdo es mayor que el derecho " %g > %g". Stop!',x1,x2)
root=NaN
return
end
if(y1 * y2 > 0)
error('Las funciones en los extermos tienen el mismo signo: f(%g)=%g; f(%g)=%g
Stop!', x1, y1, x2, y2)
root =NaN;
return
end
iter=1; convergio=(1==0);
while (iter<=Nmax) & (~convergio)
x3=x1-y1*((x2-x1)/(y2-y1)); y3=feval(f, x3);
convergio=(abs(y3) < epsilon);
if ~convergio
iter=iter+1;
if y1*y3>0
x1=x3; y1=y3;
else
x2=x3; y2=y3;
end
end
end % while
if convergio
root=x3;
fprintf ('\n%svalor de la raiz es =%10.6g en %g iteraciones\n',blanks(7),root,iter)
else
root=NaN;
fprintf ('el metodo no convergio despues de %g iteraciones\n',Nmax)
end

MTODO DE NEWTON RAPHSON


function root = newton_r(f, xsup)
tolerancia=1e-5;
itr=1;
deltax=1e-6;
convergio=(1==0);
itmax=100;
while (itr<=itmax)&(~convergio)
deriv=(feval(f, xsup+deltax)-feval(f, xsup))/deltax;
xcalc=xsup-feval(f, xsup)/deriv;
convergio= (abs((xcalc-xsup)/xsup)<tolerancia);
if ~convergio
itr=itr+1;
xsup=xcalc;
end
end %while
if convergio
root=xcalc;
else
root=NaN;
fprintf('El metodo no convergio despues de %g iteraciones\n', Nmax )
end

MTODO DE LA SECANTE
function root=secante(f,xizq,xder)
epsilon=1e-5;
Nmax=150;
x1=xizq;
x2=xder;
y1 = feval(f, x1); y2 = feval(f, x2);
if x1>=x2
error('el limite izquierdo es mayor que el derecho " %g > %g". Stop!',x1,x2)
root=NaN
return
end
if(y1 * y2 > 0)
error('Las funciones en los extermos tienen el mismo signo: f(%g)=%g; f(%g)=%g
Stop!', x1, y1, x2, y2)
root =NaN;
return
end
iter=1; convergio=(1==0);
while (iter<=Nmax) & (~convergio)
x3=x1-y1*((x2-x1)/(y2-y1)); y3=feval(f, x3);
convergio=(abs(y3) < epsilon);
if ~convergio
iter=iter+1;
x1=x2; y1=y2;
x2=x3; y2=y3;
end
end % while
if convergio
root=x3;
fprintf ('\n%svalor de la raiz es =%10.6g en %g iteraciones\n',blanks(7),root,iter)
else
root=NaN;
fprintf ('el metodo no convergio despues de %g iteraciones\n',Nmax)
end

PROBLEMA No. 1
2.11
Una caja abierta ser construida de un pedazo rectangular de cartn
de tamao 30" x 50". Si cuatro pedazos cuadrados sern cortados de
las esquinas del cartn para obtener una altura de x", determine el
valor de x que da una caja de volumen 3000 in3.

3000= (30-2x)(50-2x)(x)
4x3-160x2+1500x-3000=0

x3-40x2+375x-750=0

CARDANO

>> a=[1,-40,375,-750];
>> x=cardano(a)
todas las raices son reales y diferentes

x=

27.2474 2.7526 10.0000

>> cubic1(x)

ans =

1.0e-012 *

0 0.6821 0

function ans=cubic1(x)
ans=x.^3-40*x.^2+375*x-750;

function ans=cubic1a(x)
ans=((-x.^3)./375)+(40/375)*x.^2+2;

function ans=cubic1b(x)
ans=sqrt((1/40)*x.^3+(375/40)*x-(750/40));

SUSTITUCIN SUCESIVA
>> x=susu('cubic1a',1)

valor de la raiz es = 2.75253 en 17 iteraciones

x=

2.7525

>> cubic1(x)

ans =

-0.0032

>> x=susu('cubic1a',11)

valor de la raiz es = 27.2474 en 14 iteraciones

x=

27.2474

>> cubic1(x)

ans =

-0.0030

>> x=susu('cubic1b',8)

valor de la raiz es = 9.99952 en 49 iteraciones

x=

9.9995

>> cubic1(x)

ans =

0.0601

WEGSTEIN
>> x=wegstein('cubic1a',1)

valor de la raiz es = 2.75255 en 5 iteraciones

x=

2.7526

>> cubic1(x)

ans =

-1.4554e-008

>> x=wegstein('cubic1a',8)

valor de la raiz es = 10 en 6 iteraciones

x=

10.0000

>> cubic1(x)

ans =

7.9872e-009

>> x=wegstein('cubic1a',23)

valor de la raiz es = 27.2474 en 5 iteraciones

x=

27.2474

>> cubic1(x)

ans =

-4.4311e-005

BISECCIN
>> x=bisec('cubic1',1,3)
convergio =

0
Valor de la raiz = 2.75256 en 18 iteraciones

x=

2.7526

>> cubic1(x)

ans =

8.0971e-004

>> x=bisec('cubic1',8,11)
convergio =

0
Valor de la raiz = 10 en 19 iteraciones

x=

10.0000

>> cubic1(x)

ans =

2.3842e-004

>> x=bisec('cubic1',25,28)
convergio =

0
Valor de la raiz = 27.2475 en 19 iteraciones

x=

27.2475

>> cubic1(x)

ans =

0.0021

REGULA FALSI
>> x=falsa('cubic1',1,3)

valor de la raiz es = 2.75255 en 12 iteraciones

x=

2.7526

>> cubic1(x)

ans =

2.5285e-006

>> x=falsa('cubic1',8,11)

valor de la raiz es = 10 en 7 iteraciones

x=

10.0000

>> cubic1(x)

ans =

2.3407e-006

>> x=falsa('cubic1',25,28)

valor de la raiz es = 27.2474 en 7 iteraciones

x=

27.2474

>> cubic1(x)

ans =

-9.7299e-006

NEWTON-RAPHSON
>> x=newton_r('cubic1',1)

x=

2.7526

>> cubic1(x)

ans =

1.1369e-013

>> x=newton_r('cubic1',8)

x=

10.0000

>> cubic1(x)

ans =

4.5475e-013

>> x=newton_r('cubic1',23)

x=

27.2474

>> cubic1(x)

ans =

2.9104e-011

SECANTE
>> x=secante('cubic1',1,3)

valor de la raiz es = 2.75255 en 4 iteraciones

x=

2.7526

>> cubic1(x)

ans =

3.1121e-006

>> x=secante('cubic1',8,11)

valor de la raiz es = 10 en 5 iteraciones

x=

10.0000

>> cubic1(x)

ans =

5.4570e-010

>> x=secante('cubic1',25,28)

valor de la raiz es = 27.2474 en 5 iteraciones

x=

27.2474

>> cubic1(x)

ans =

-3.4397e-009

ROOTS
>> a=[1,-40,375,-750];
>> raiz=roots(a)

raiz =

27.2474
10.0000
2.7526

>> polyval(a,raiz)

ans =

1.0e-011 *

-0.6366
-0.0341
-0.0114

FZERO
>> raiz=fzero('x.^3-40*x.^2+375*x-750',1)

raiz =

2.7526
>> raiz=fzero('x.^3-40*x.^2+375*x-750',8)

raiz =

10
>> raiz=fzero('x.^3-40*x.^2+375*x-750',23)

raiz =

27.2474

FSOLVE

raiz=fsolve('x.^3-40*x.^2+375*x-750',1)
Optimization terminated: first-order optimality is less than options.TolFun.

raiz =

2.7526

>> raiz=fsolve('x.^3-40*x.^2+375*x-750',8)
Optimization terminated: first-order optimality is less than options.TolFun.
raiz =

10.0000
>> raiz=fsolve('x.^3-40*x.^2+375*x-750',22)
Optimization terminated: first-order optimality is less than options.TolFun.

raiz =

27.2474

PROBLEMA No. 2
2.12
Las frecuencias naturales de 3 grado de libertad del sistema resorte-
masa, se da por la ecuacin

3 - 52 + 6 1 = 0
Donde = m2 , m es la masa, es la frecuencia natural, y k es la
K
rigidez del resorte. Encuentra las races de la ecuacin.

CARDANO

>> a=[1,-5,6,-1];
>> x=cardano(a)

todas las raices son reales y diferentes

x=

3.2470 0.1981 1.5550

>> cubica2(x)

ans =

1.0e-014 *

0 0.1776 -0.1776

function ans=cubica2(x)
ans=x.^3-5*x.^2+6*x-1;

function ans=cubica2a(x)
ans=((-x.^3)./6)+(5/6)*x.^2+(1/6);

function ans=cubica2b(x)
ans=sqrt((1/5)*x.^3+(6/5)*x-(1/5));

SUSTITUCIN SUCESIVA
>> x=susu('cubica2a',1)

valor de la raiz es = 0.198063 en 15 iteraciones

x=

0.1981

>> cubica2(x)

ans =

2.3213e-006

>> x=susu('cubica2a',2)

valor de la raiz es = 3.24698 en 11 iteraciones

x=

3.2470

>> cubica2(x)

ans =

-1.0525e-005

>> x=susu('cubica2b',1.3)

valor de la raiz es = 1.55488 en 50 iteraciones

x=

1.5549

>> cubica2(x)

ans =

1.7632e-004

WEGSTEIN
>> x=wegstein('cubica2a',0.5)

valor de la raiz es = 0.198062 en 6 iteraciones

x=

0.1981

>> cubica2(x)

ans =

7.6028e-013

>> x=wegstein('cubica2a',1)

valor de la raiz es = 1.55496 en 6 iteraciones

x=

1.5550

>> cubica2(x)

ans =

1.8762e-011

>> x=wegstein('cubica2a',4)

valor de la raiz es = 3.24698 en 7 iteraciones

x=

3.2470

>> cubica2(x)

ans =

-2.1111e-010

BISECCIN
>> x=bisec('cubica2',-0.5,0.5)
convergio =

0
Valor de la raiz = 0.198067 en 17 iteraciones

x=

0.1981

>> cubica2(x)

ans =

1.8398e-005

>> x=bisec('cubica2',1,2)
convergio =

0
Valor de la raiz = 1.55496 en 15 iteraciones

x=

1.5550

>> cubica2(x)

ans =

-9.2436e-006

>> x=bisec('cubica2',3,4)
convergio =

0
Valor de la raiz = 3.24698 en 15 iteraciones

x=

3.2470

>> cubica2(x)

ans =

-4.3538e-006

REGULA FALSI
>> x=falsa('cubica2',-0.5,0.5)

valor de la raiz es = 0.198064 en 16 iteraciones

x=

0.1981

>> cubica2(x)

ans =

7.4281e-006

>> x=falsa('cubica2',1,2)

valor de la raiz es = 1.55496 en 4 iteraciones

x=

1.5550

>> cubica2(x)

ans =

1.1235e-009

>> x=falsa('cubica2',3,4)

valor de la raiz es = 3.24698 en 15 iteraciones

x=

3.2470

>> cubica2(x)

ans =

-8.2615e-006

NEWTON-RAPHSON
>> x=newton_r('cubica2',0.5)

x=

0.1981

>> cubica2(x)

ans =

-2.6212e-013

>> x=newton_r('cubica2',1)

x=

1.5550

>> cubica2(x)

ans =

-1.9540e-014

>> x=newton_r('cubica2',4)

x=

3.2470

>> cubica2(x)

ans =

3.9442e-011

SECANTE
>> x=secante('cubica2',-0.5,0.5)

valor de la raiz es = 0.198062 en 6 iteraciones

x=

0.1981

>> cubica2(x)

ans =

1.3462e-007

>> x=secante('cubica2',1,2)

valor de la raiz es = 1.55496 en 4 iteraciones

x=

1.5550

>> cubica2(x)

ans =

1.1235e-009

>> x=secante('cubica2',3,4)

valor de la raiz es = 3.24698 en 6 iteraciones

x=

3.2470

>> cubica2(x)

ans =

5.0530e-009

ROOTS
>> a=[1,-5,6,-1];
>> x= roots(a)

x=

3.2470
1.5550
0.1981

>> polyval(a,x)

ans =

1.0e-014 *

-0.7550
-0.0888
0

FZERO

>> x=fzero('x.^3-5*x.^2+6*x-1',1)

x=

1.5550

>> x=fzero('x.^3-5*x.^2+6*x-1',4)

x=

3.2470

>> x=fzero('x.^3-5*x.^2+6*x-1',0.5)

x=

0.1981

FSOLVE
>> x=fsolve('x.^3-5*x.^2+6*x-1',0.5)
Optimization terminated: first-order optimality is less than options.TolFun.

x=

0.1981

>> x=fsolve('x.^3-5*x.^2+6*x-1',1)
Optimization terminated: first-order optimality is less than options.TolFun.
x=

1.5550

>> x=fsolve('x.^3-5*x.^2+6*x-1',4)
Optimization terminated: first-order optimality is less than options.TolFun.

x=

3.2470

PROBLEMA No. 3
2.15
La velocidad de un fluido no Newtoniano que fluye en un tubo redondo
(u) puede expresarse como
n+1/n
U = 3n + 1 1- r
umean n+1 R

Donde umean es la velocidad media del fluido, r es la distancia radial del


centro del tubo, R es el radio del tubo, y n es una constante cuyo valor
depende del fluido (por ejemplo, n=1 para un fluido Newtoniano, n=3
para un fluido dilatante, y n= 1/3 para un fluido pseudoplastico).
Determine el valor de n de un fluido donde U = 0.9 y r = 0.8.
umean R

function ans=funbu(x)
ans=((3*x+1)/(x+1))*(1-(0.8)^((x+1)/x))-0.9;

function ans=funbua(x)
ans=((3*x+1)/(0.9))*(1-(0.8)^((x+1)/x))-1;

SUSTITUCIN SUCESIVA

>> x=susu('funbua',0.5)

valor de la raiz es = 0.309162 en 7 iteraciones

x=

0.3092

>> funbu(x)

ans =

-3.1519e-008

WEGSTEIN

>> x=wegstein('funbua',0.5)
valor de la raiz es = 0.309162 en 5 iteraciones

x=

0.3092

>> funbu(x)

ans =

-3.9102e-013

BISECCIN

>> x=bisec('funbu',0.1,0.5)

convergio =

Valor de la raiz = 0.309155 en 14 iteraciones

x=

0.3092

>> funbu(x)

ans =

4.3882e-006

REGULA FALSI

>> x=falsa('funbu',0.1,0.5)
valor de la raiz es = 0.309171 en 8 iteraciones

x=

0.3092

>> funbu(x)

ans =

-5.3175e-006

NEWTON-RAPHSON

>> x=newton_r('funbu',0.5)

x=

0.3092

>> funbu(x)

ans =

-4.9738e-014

SECANTE

>> x=secante('funbu',0.1,0.5)
valor de la raiz es = 0.309162 en 5 iteraciones

x=

0.3092

>> funbu(x)

ans =

3.4230e-007

FZERO

>> x=fzero('((3*x+1)/(x+1))*(1-(0.8)^((x+1)/x))-0.9',0.5)

x=

0.3092

>> funbu(x)

ans =

FSOLVE

>> x=fsolve('((3*x+1)/(x+1))*(1-(0.8)^((x+1)/x))-0.9',0.5)
Optimization terminated: first-order optimality is less than options.TolFun.

x=

0.3092

>> funbu(x)

ans =

2.8047e-008

PROBLEMA No. 4

2.17
El coeficiente de descarga (C) de un orificio se define como

C= la proporcin de flujo de masa real


la proporcin de flujo de masa terica

y se da por[2.4]

C=0.5959 + 0.03122.1 - 0.1848 + 91.712.5


Re0.75

Donde denota la proporcin de dimetros

=d
D
Y Re indica el numero de Reynodls. Encuentra el valor de que rinda
un coeficiente de descarga de C= 0.5959 y un numero de reynoldls de
Re=104.

function ans=fun4(x)
ans=-0.184*x.^8+0.09171*x.^2.5+0.0312*x.^2.1;

function ans=fun4a(x)
ans=(2*x.^8-0.3402*x.^2.1)^(1/2.5);

function ans=fun4b(x)
ans=(0.4984*x.^2.5+0.1695*x.^2.1)^(1/8);

SUSTITUCIN SUCESIVA

>> x=susu('fun4b',0.8)

valor de la raiz es = 0.93049 en 9 iteraciones

x=

0.9305

>> fun4(x)

ans =

1.5687e-005

WEGSTEIN

>> x=wegstein('fun4b',1)
valor de la raiz es = 0.930493 en 3 iteraciones

x=

0.9305

>> fun4(x)

ans =

1.3990e-005

BISECCIN

>> x=bisec('fun4',0.5,1)

convergio =

Valor de la raiz = 0.930511 en 14 iteraciones

x=

0.9305

>> fun4(x)

ans =

2.4010e-006

REGULA FALSI

>> x=falsa('fun4',0.5,1)
valor de la raiz es = 0.930501 en 10 iteraciones

x=

0.9305

>> fun4(x)

ans =

8.7241e-006

NEWTON-RAPHSON

>> x=newton_r('fun4',1)

x=

0.9305

>> fun4(x)

ans =

-1.8249e-015

SECANTE

>> x=secante('fun4',0.1,1)

valor de la raiz es = 0.0135677 en 7 iteraciones

x=

0.0136

>> fun4(x)

ans =

5.7026e-006
FZERO

>> x=fzero('-0.184*x.^8+0.09171*x.^2.5+0.0312*x.^2.1',1)
x=

0.9305

>> fun4(x)

ans =

-9.3675e-017

FSOLVE

>> x=fsolve('-0.184*x.^8+0.09171*x.^2.5+0.0312*x.^2.1',1)
Optimization terminated: first-order optimality is less than options.TolFun.

x=

0.9305

>> fun4(x)

ans =

-3.2327e-010

PROBLEMA No. 5

2.35
Cuando los flujos de agua pasan a travs de una seccin de cauce
trapezoidal, el rea de cruce-seccional del fluido (A) y el permetro del
fluido (P) est relacionado como

P = A - Yn cot + 2Yn
Yn sin
Encuentra el valor de para P= 3m, cuando A= 1m2 y Yn = 0.5m con
10 y 60 como aproximaciones iniciales para y =0.001.

function ans=fun5(x)
ans=1/sin(x)-0.5*cot(x)-1;

function ans=fun5a(x)
ans=asin(1/(1+0.5*cot(x)));

SUSTITUCIN SUCESIVA

>> x=susu('fun5a',10)
x=

0.6435

>> fun5(x)

ans =

7.9427e-006

>> x=susu('fun5a',60)

valor de la raiz es = 0.643491 en 23 iteraciones

x=

0.6435

>> fun5(x)

ans =

8.3545e-006

WEGSTEIN

>> x=wegstein('fun5a',10)
valor de la raiz es = 0.643501 en 5 iteraciones

x=

0.6435

>> fun5(x)

ans =

2.7929e-012

>> x=wegstein('fun5a',60)

valor de la raiz es = 0.643501 en 6 iteraciones

x=

0.6435

>> fun5(x)

ans =

9.5555e-012

BISECCIN

>> x=bisec('fun5',12,15)
convergio =

Valor de la raiz = 14.1372 en 16 iteraciones

x=

14.1372

>> fun5(x)

ans =

-2.8431e-006

>> x=bisec('fun5',60,63)

convergio =

Valor de la raiz = 62.8319 en 19 iteraciones

x=

62.8319

>> fun5(x)

ans =

1.0847e+005

REGULA FALSI

>> x=falsa('fun5',12,15)
valor de la raiz es = 14.1372 en 21 iteraciones

x=

14.1372

>> fun5(x)

ans =

-6.3647e-006

NEWTON-RAPHSON

>> x=newton_r('fun5',10)
x=

14.1372

>> fun5(x)

ans =

2.2509e-010

>> x=newton_r('fun5',60)

x=

-37.0556

>> fun5(x)

ans =

2.1574e-008

SECANTE

>> x=secante('fun5',10,15)
valor de la raiz es = 14.1372 en 7 iteraciones

x=

14.1372

>> fun5(x)

ans =

-1.6365e-007

>> x=secante('fun5',60,63)

valor de la raiz es = 63.4754 en 9 iteraciones

x=

63.4754

>> fun5(x)

ans =

-1.4312e-006

FZERO

>> x=fzero('1/sin(x)-0.5*cot(x)-1',10)
x=

9.4248

>> fun5(x)

ans =

-2.2262e+014

>> x=fzero('1/sin(x)-0.5*cot(x)-1',60)

x=

59.6903

>> fun5(x)

ans =

-5.0594e+013

FSOLVE
>> x=fsolve('1/sin(x)-0.5*cot(x)-1',14)
Optimization terminated: first-order optimality is less than options.TolFun.

x=

14.1372

>> x=fsolve('1/sin(x)-0.5*cot(x)-1',65)
Optimization terminated: first-order optimality is less than options.TolFun.

x=

64.4026

Vous aimerez peut-être aussi