Вы находитесь на странице: 1из 51

TECNOLÓGICO NACIONAL DE MÉXICO

INSTITUTO TECNOLÓGICO DE CHIHUAHUA

Métodos Numéricos
Tarea 9
Problemas de cálculo de raíces de funciones.
Catedrático: M.C. Amado Lara Rodríguez

Equipo 104

Yudith Idalia Grado Palacios #17061395

Flor Jacobo Cruz #17060742

Marianne Guadalupe Carmona Márquez #17061008

FECHA DE ENTREGA: 10 de octubre del 2019


Ejercicio 5.5

Localice la primera raíz no trivial de sen(x) = x2 , donde x está en radianes. Use


una técnica gráfica y bisección con un intervalo inicial de 0.5 a 1. Haga el cálculo
hasta que ea sea menor que es = 2%. Realice también una prueba de error
sustituyendo la respuesta final en la ecuación original

Donde la función es sen(x)-x2

Grafica

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define f(x) (sin(x)-pow(x,2))/*Limite superior =1 Limite inferior=0.5 Valor
verdadero=0.87*/
int main(){
float Xs, Xi,es,vv,xr=0,xr2=0,p,ea=1,er,ev,i;
int resp,termino=1,N;
printf("Ingrese valor del limite superior:\n");
scanf("%f",&Xs);
printf("Ingrese valor del limite inferior:\n");
scanf("%f",&Xi);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.5*pow(10,2-N));
printf("La tolerancia es: %f\n",es);
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("Termino Xi Xs xr er ea\n");
}
else
printf("Termino Xi Xs xr ea\n");
for (i=1;fabs(ea)>=es;i++){
xr=(Xi+Xs)/2;
if(resp==1){
ev=vv-xr;
er=(ev/vv)*100;
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf(" %5d %5.5f %5.5f %5.5f %5.5f %5.5f
\n",termino,Xi,Xs,xr,fabs(er),fabs(ea));
}
if (i<=1) {
printf(" %5d %5.5f %5.5f %5.5f
%5.5f\n",termino,Xi,Xs,xr,fabs(er));
}
}
else{
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf("%5d %5.5f %5.5f %5.5f %5.5f \n",termino,Xi,Xs,xr,fabs(ea));
}
if (i<=1) {
printf("%5d %5.5f %5.5f %5.5f\n",termino,Xi,Xs,xr);
}

p=f(xr)*f(Xi);
if(p<0)
{
Xs=xr;
}
if(p>0)
{
Xi=xr;
}
if(p==0){
printf("La raíz es: %f",xr);
break;
}
xr2=xr;
termino ++;

return 0;
}
Ejercicio 5.6

Determine la raíz real de ln x2 = 0.7: a) Gráficamente b) Empleando tres


iteraciones en el método de bisección con los valores iniciales xl = 0.5 y xu = 2. c)
Usando tres iteraciones del método de la falsa posición, con los mismos valores
iniciales de b).

a) Gráficamente

Despejando x de la función nos da que la raíz +/- 1.4190

b) Utilizando el método de bisección


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define f(x) (log(pow(x,2))-0.7)/*Limite superior =2 Limite inferior=0.5 Valor
verdadero=1.4190*/
int main(){
float Xs, Xi,es,vv,xr=0,xr2=0,p,ea=1,er,ev,i;
int resp,termino=1,N;
printf("Ingrese valor del limite superior:\n");
scanf("%f",&Xs);
printf("Ingrese valor del limite inferior:\n");
scanf("%f",&Xi);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.5*pow(10,2-N));
printf("La tolerancia es: %f\n",es);
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("Termino Xi Xs xr er ea\n");
}
else
printf("Termino Xi Xs xr ea\n");
for (i=1;fabs(ea)>=es;i++){
xr=(Xi+Xs)/2;
if(resp==1){
ev=vv-xr;
er=(ev/vv)*100;
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf(" %5d %5.5f %5.5f %5.5f %5.5f %5.5f
\n",termino,Xi,Xs,xr,fabs(er),fabs(ea));
}
if (i<=1) {
printf(" %5d %5.5f %5.5f %5.5f
%5.5f\n",termino,Xi,Xs,xr,fabs(er));
}
}
else{
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf("%5d %5.5f %5.5f %5.5f %5.5f
\n",termino,Xi,Xs,xr,fabs(ea));
}
if (i<=1) {
printf("%5d %5.5f %5.5f %5.5f\n",termino,Xi,Xs,xr);
}

p=f(xr)*f(Xi);
if(p<0)
{
Xs=xr;
}
if(p>0)
{
Xi=xr;
}
if(p==0){
printf("La raíz es: %f",xr);
break;
}
xr2=xr;
termino ++;

return 0;
}
c) Utilizando el método de falsa posición
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define f(x) (log(pow(x,2))-0.7)//Limite superior =2 Limite inferior=0.5 Valor
verdadero=1.4190
int main(){
float Xs, Xi,es,vv,xr=0,xr2=0,p,ea=1,er,ev,i,Ls=1,is=1,fi,fs,iu,fr;
int resp,termino=1,N;
printf("Ingrese valor del limite superior:\n");
scanf("%f",&Xs);
printf("Ingrese valor del limite inferior:\n");
scanf("%f",&Xi);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.5*pow(10,2-N));
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi Xs xr er ea f(Xi)
f(Xr) \n");
}
else
printf("Termino Xi Xs xr ea f(Xi) f(Xr)\n");
fs=f(Xs);
fi=f(Xi);
for (i=1;fabs(ea)>=es;i++){
xr=Xs-((fs*(Xi-Xs))/(fi-fs));
fr=f(xr);
if(resp==1){
ev=vv-xr;
er=(ev/vv)*100;
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf(" %5d %5.5f %5.5f %5.5f %5.5f %5.5f %10.5f %
10.5f\n",termino,Xi,Xs,xr,fabs(er),fabs(ea),fi,fr);
}
if (i<=1) {
printf(" %5d %5.5f %5.5f %5.5f %5.5f %10.5f
%10.5f\n",termino,Xi,Xs,xr,fabs(er),fi,fr);
}
}
else{
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf("%5d %5.5f %5.5f %5.5f %5.5f %5.5f %5.5f
\n",termino,Xi,Xs,xr,fabs(ea),fi,fr);
}
if (i<=1) {
printf("%5d %5.5f %5.5f %5.5f %5.5f
%5.5f\n",termino,Xi,Xs,xr,fi,fr);
}

}
p=fr*fi;
if(p<0)
{
Xs=xr;
fs=f(Xs);
Ls=Ls+1;
if(Ls>=3){
fi=fi/2;
}
}
if(p>0)
{
Xi=xr;
fi=f(Xi);
is=is+1;
if(is>=3){
fs=fs/2;
}
}
if(p==0){
printf("La raíz es: %f",xr);
break;
}
xr2=xr;
termino ++;
}
return 0;
}
Ejercicio 5.7

Determine la raíz real de f(x) = (0.8 – 0.3x)/x: a) Analíticamente b)


Gráficamente c) Empleando tres iteraciones en el método de la falsa posición,
con valores iniciales de 1 a 3. Calcule el error aproximado ea y el error
verdadero et en cada iteración.

a) Analíticamente

0.8−0.3 x 0.8
=0 =x x=2.66
x 0.3

b) Gráficamente

c) Utilizando el método de falsa posición


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define f(x) ((0.8-0.3*x)/x)//Limite superior =3 Limite inferior=1 Valor
verdadero=2.6666
//Metodo de falsa posicion
int main(){
float Xs, Xi,es,vv,xr=0,xr2=0,p,ea=1,er,ev,i,Ls=1,is=1,fi,fs,iu,fr;
int resp,termino=1,N;
printf("Ingrese valor del limite superior:\n");
scanf("%f",&Xs);
printf("Ingrese valor del limite inferior:\n");
scanf("%f",&Xi);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.5*pow(10,2-N));
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi Xs xr er ea f(Xi)
f(Xr) \n");
}
else
printf("Termino Xi Xs xr ea f(Xi) f(Xr)\n");
fs=f(Xs);
fi=f(Xi);
for (i=1;fabs(ea)>=es;i++){
xr=Xs-((fs*(Xi-Xs))/(fi-fs));
fr=f(xr);
if(resp==1){
ev=vv-xr;
er=(ev/vv)*100;
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf(" %5d %5.5f %5.5f %5.5f %5.5f %5.5f %10.5f %
10.5f\n",termino,Xi,Xs,xr,fabs(er),fabs(ea),fi,fr);
}
if (i<=1) {
printf(" %5d %5.5f %5.5f %5.5f %5.5f %10.5f
%10.5f\n",termino,Xi,Xs,xr,fabs(er),fi,fr);
}
}
else{
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf("%5d %5.5f %5.5f %5.5f %5.5f %5.5f %5.5f
\n",termino,Xi,Xs,xr,fabs(ea),fi,fr);
}
if (i<=1) {
printf("%5d %5.5f %5.5f %5.5f %5.5f
%5.5f\n",termino,Xi,Xs,xr,fi,fr);
}

}
p=fr*fi;
if(p<0)
{
Xs=xr;
fs=f(Xs);
Ls=Ls+1;
if(Ls>=3){
fi=fi/2;
}
}
if(p>0)
{
Xi=xr;
fi=f(Xi);
is=is+1;
if(is>=3){
fs=fs/2;
}
}
if(p==0){
printf("La raíz es: %f",xr);
break;
}
xr2=xr;
termino ++;
}
return 0;
}
Ejercicio 5.9
Encuentre la raíz positiva más pequeña de la función (x está en radianes) x 2|cos√ x
|=5 usando el método de la falsa posición. Para localizar el intervalo en donde se
encuentra la raíz, grafique primero esta función para valores de x entre 0 y 5.
Realice el cálculo hasta que ea sea menor que es = 1%. Compruebe su respuesta
final sustituyéndola en la función original.
Función es x2|cos√ x|-5

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define f(x) (pow(x,2)*fabs(cos(sqrt(x)))-5)/*Limite superior =4 Limite inferior=2
Valor verdadero=3.7452*/
//Ejercicio 5.9
int main(){
float Xs, Xi,es,vv,xr=0,xr2=0,p,ea=1,er,ev,i;
int resp,termino=1,N;
printf("Ingrese valor del limite superior:\n");
scanf("%f",&Xs);
printf("Ingrese valor del limite inferior:\n");
scanf("%f",&Xi);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.1*pow(10,2-N));
printf("La tolerancia es: %f\n",es);
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("Termino Xi Xs xr er ea\n");
}
else
printf("Termino Xi Xs xr ea\n");
for (i=1;fabs(ea)>=es;i++){
xr=(Xi+Xs)/2;
if(resp==1){
ev=vv-xr;
er=(ev/vv)*100;
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf(" %5d %5.5f %5.5f %5.5f %5.5f %5.5f
\n",termino,Xi,Xs,xr,fabs(er),fabs(ea));
}
if (i<=1) {
printf(" %5d %5.5f %5.5f %5.5f
%5.5f\n",termino,Xi,Xs,xr,fabs(er));
}
}
else{
ea=((xr-xr2)/xr)*100;
if (i > 1) {
printf("%5d %5.5f %5.5f %5.5f %5.5f \n",termino,Xi,Xs,xr,fabs(ea));
}
if (i<=1) {
printf("%5d %5.5f %5.5f %5.5f\n",termino,Xi,Xs,xr);
}

p=f(xr)*f(Xi);
if(p<0)
{
Xs=xr;
}
if(p>0)
{
Xi=xr;
}
if(p==0){
printf("La raíz es: %f",xr);
break;
}
xr2=xr;
termino ++;

return 0;
}

Ejercicio 5.13
La velocidad v de un paracaidista que cae está dada
c
gm −( )t
v= ( 1−e m )
c
Donde g = 9.8 m/s2. Para un paracaidista con coeficiente de arrastre de c = 15
kg/s, calcule la masa m de modo que la velocidad sea v = 35 m/s en t = 9s. Utilice
el método de la falsa posición para determinar m a un nivel de es = 0.1%.

#include<stdio.h>

#include<math.h>

#define f(m) (((g*m)/c)*(1-(exp(-(c/m)*t)))-v)

int main(){

float Xs,
Xi,g=9.8,v=35,c=15,t=9,m,es,vv,xr=0,xr2=0,p,ea=1,er,ev,i,Ls=1,is=1,fi,fs,iu,fr;

int resp,termino=1,N;

printf("Ingrese valor del limite superior:\n");

scanf("%f",&Xs);

printf("Ingrese valor del limite inferior:\n");

scanf("%f",&Xi);
/*printf("Ingrese el numero de cifras significativas \n");

scanf("%d",&N);*/

printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");

scanf("%d",&resp);

/*es=(0.5*pow(10,2-N));*/

es=0.1;

if(resp==1){

printf("ingresa el valor verdadero\n");

scanf("%f",&vv);

printf ("El valor verdadero es: %f\n",vv);

printf("La tolerancia es: %f\n",es);

printf("Termino Xi Xs xr er ea f(Xi)
f(Xr) \n");

else

printf("Termino Xi Xs xr ea f(Xi) f(Xr)\n");

fs=f(Xs);

fi=f(Xi);

for (i=1;fabs(ea)>=es;i++){

xr=Xs-((fs*(Xi-Xs))/(fi-fs));

fr=f(xr);

if(resp==1){

ev=vv-xr;

er=(ev/vv)*100;

ea=((xr-xr2)/xr)*100;

if (i > 1) {
printf(" %5d %5.5f %5.5f %5.5f %5.5f %5.5f %10.5f %
10.5f\n",termino,Xi,Xs,xr,fabs(er),fabs(ea),fi,fr);

if (i<=1) {

printf(" %5d %5.5f %5.5f %5.5f %5.5f %10.5f


%10.5f\n",termino,Xi,Xs,xr,fabs(er),fi,fr);

else{

ea=((xr-xr2)/xr)*100;

if (i > 1) {

printf("%5d %5.5f %5.5f %5.5f %5.5f %5.5f %5.5f


\n",termino,Xi,Xs,xr,fabs(ea),fi,fr);

if (i<=1) {

printf("%5d %5.5f %5.5f %5.5f %5.5f


%5.5f\n",termino,Xi,Xs,xr,fi,fr);

p=fr*fi;

if(p<0)

Xs=xr;

fs=f(Xs);

Ls=Ls+1;

if(Ls>=3){
fi=fi/2;

if(p>0)

Xi=xr;

fi=f(Xi);

is=is+1;

if(is>=3){

fs=fs/2;

if(p==0){

printf("La raíz es: %f",xr);

break;

xr2=xr;

termino++;

return 0;

}
Ejercicio 6.3

Utilice los métodos de a) iteración de punto fijo, y b) Newton Raphson, para


determinar una raíz de f(x) = –x2 + 1.8x + 2.5 con el uso de x0 = 5. Haga el cálculo
hasta que ea sea menor que es = 0.05%. Asimismo, realice una comprobación del
error de su respuesta final.

a) Iteración de punto fijo


#include<stdio.h>
#include<math.h>
#define g(x) (((pow((1.8*x+2.5),0.5))))
int main(){
float X0,Xi=0,Xi1=0,es,vv,p,ea=1,er,ev,i,max=100;
int resp,termino=0,N;
printf("Ingrese el primer valor:\n");
scanf("%f",&X0);
/*printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);*/
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
/*es=(0.5*pow(10,2-N));*/
es=0.05;
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi1 er ea \n");
}
else
printf("Termino Xi1 ea \n");
for (i=1;fabs(ea)>=es&&termino<max;i++){
Xi1=g(Xi);
if(resp==1){
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.5f %5.5f %5.5f
\n",termino,Xi1,fabs(er),fabs(ea));
}
if (termino<=0) {
Xi1=X0;
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5f %5f \n",termino,Xi1,fabs(er));
}
}
else{
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {

printf("%5d %5.5f %5.5f \n",termino,Xi1,fabs(ea));


}
if (termino<=0) {
Xi1=X0;
printf("%5d %5f \n",termino,Xi1);
}
}
Xi=Xi1;
termino++;
}
return 0;
}

b) Newton Raphson
#include<stdio.h>
#include<math.h>
#define f(x) (-(pow(x,2))+(1.8*x)+2.5)
#define g(x) (-2*x+1.8)
int main(){
float X0,Xi=0,Xi1=0,es,vv,p,ea=1,er,ev,i,max=100;
int resp,termino=0,N;
printf("Ingrese el primer valor:\n");
scanf("%f",&X0);
/*printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);*/
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
/*es=(0.5*pow(10,2-N));*/
es=0.05;
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi1 er ea \n");
}
else
printf("Termino Xi1 ea \n");
for (i=1;fabs(ea)>=es&&termino<max;i++){
Xi1=Xi-(f(Xi)/g(Xi));
if(resp==1){
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.5f %5.5f %5.5f
\n",termino,Xi1,fabs(er),fabs(ea));
}
if (termino<=0) {
Xi1=X0;
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5f %5f \n",termino,Xi1,fabs(er));
}
}
else{
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {

printf("%5d %5.5f %5.5f \n",termino,Xi1,fabs(ea));


}
if (termino<=0) {
Xi1=X0;
printf("%5d %5f \n",termino,Xi1);
}
}
Xi=Xi1;
termino++;
}
return 0;
}

Ejercicio 6.6

Determine la raíz real más pequeña de f(x) = –12 – 21x + 18x 2 – 2.4x3 : a) en
forma gráfica, y b) con el empleo del método de la secante para un valor de es que
corresponda a tres cifras significativas.

a) Gráficamente
b) Método de la secante

#include <stdio.h>
#include <math.h>
#define f(x) (-12-21*x+18*pow(x,2)-2.4*pow(x,3))
/*Programa de metodo de la secante*/
//Ejercicio 6.6
int main (){
int in,contado,intermax=100,n,resp,i,termino=1;
float xi,es,vv,ea=1,er,xi1=0,ev,xi2;
printf ("Ingresa el valor de superior\n");
scanf("%f",&xi);
printf("Ingresa el valor de inferior\n");
scanf("%f",&xi2);
printf("Cifra significativa\n");
scanf("%d",&n);
es=0.5*pow(10,2-n);
printf("Tolerancia %f\n",es);
printf("Conoces el valor verdadero? Si=1 No=2\n");
scanf("%d",&resp);
if(resp==1){
printf ("El valor verdadero es\n");
scanf("%f",&vv);
printf ("Interracion xi-1 xi xi+1 er ea \n");
}
else
printf ("Interacion xi-1 xi ea \n");
for(i=1;fabs(ea)>=es && termino<=intermax;i++){
xi1=xi-(f(xi)*(xi2-xi)/(f(xi2)-f(xi)));
if(resp==1){
ea=((xi1-xi)/xi1)*100;
if(termino>1){
ev=vv-xi1;
er=(ev/vv)*100;
printf ("%5d %8.5f %5.5f %5.5f %5.5f
%5.5f\n",termino,xi2,xi,xi1,fabs(er),fabs(ea));
}
if(termino<=1){
ev=vv-xi1;
er=(ev/vv)*100;
printf ("%5d %8.5f %5.5f %5.5f %5.5f\n",termino,xi2,xi,xi1,fabs(er));
}
}
else {
ea=((xi1-xi)/xi1) *100;
if(termino>1){
printf ("%5d %8.5f %5.5f %5.5f %5.5f
%5.5f\n",termino,xi2,xi,xi1,fabs(er),fabs(ea));
}
if(termino<=1){
printf ("%5d %8.5f %5.5f %5.5f %5.5f\n",termino,xi2,xi,xi1,fabs(er));
}
}
xi2=xi;
xi=xi1;
termino++;
}
return 0;

}
Ejercicio 6.9
Determine la raíz real más grande de f(x) = 0.95x 3 – 5.9x2 + 10.9x – 6: a) En forma
gráfica. b) Con el uso del método de Newton-Raphson (tres iteraciones, xi = 3.5).
c) Con el método de la secante (tres iteraciones, xi–1 = 2.5 y xi = 3.5). d) Por
medio del método de la secante modificado (tres iteraciones, xi = 3.5, d = 0.01)

a) En forma gráfica
.

b) Con el método de Newton Raphson


#include<stdio.h>
#include<math.h>
#define f(x) (0.95*pow(x,3)-5.9*pow(x,2)+10.9*x-6)
#define g(x) (2.85*pow(x,2)-11.8*x+10.9)
//Metodo de newton
//Ejercicio 6.9
int main(){
float X0,Xi=0,Xi1=0,es,vv,p,ea=1,er,ev,i,max=3;
int resp,termino=0,N;
printf("Ingrese el primer valor:\n");
scanf("%f",&X0);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.5*pow(10,2-N));
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi1 er ea \n");
}
else
printf("Termino Xi1 ea \n");
for (i=1;fabs(ea)>=es&&termino<max;i++){
Xi1=Xi-(f(Xi)/g(Xi));
if(resp==1){
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.5f %5.5f %5.5f \n",termino,Xi1,fabs(er),fabs(ea));
}
if (termino<=0) {
Xi1=X0;
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5f %5f \n",termino,Xi1,fabs(er));
}
}
else{
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {

printf("%5d %5.5f %5.5f \n",termino,Xi1,fabs(ea));


}
if (termino<=0) {
Xi1=X0;
printf("%5d %5f \n",termino,Xi1);
}
}
Xi=Xi1;
termino++;
}
return 0;

}
c) Método del secante
#include <stdio.h>
#include <math.h>
#define f(x) (0.95*pow(x,3)-5.9*pow(x,2)+10.9*x-6)
/*Programa de metodo de la secante*/
//Ejercicio 6.9
int main (){
int in,contado,intermax=3,n,resp,i,termino=1;
float xi,es,vv,ea=1,er,xi1=0,ev,xi2;
printf ("Ingresa el valor de superior\n");
scanf("%f",&xi);
printf("Ingresa el valor de inferior\n");
scanf("%f",&xi2);
printf("Cifra significativa\n");
scanf("%d",&n);
es=0.5*pow(10,2-n);
printf("Tolerancia %f\n",es);
printf("Conoces el valor verdadero? Si=1 No=2\n");
scanf("%d",&resp);
if(resp==1){
printf ("El valor verdadero es\n");
scanf("%f",&vv);
printf ("Interracion xi-1 xi xi+1 er ea \n");
}
else
printf ("Interacion xi-1 xi ea \n");
for(i=1;fabs(ea)>=es && termino<=intermax;i++){
xi1=xi-(f(xi)*(xi2-xi)/(f(xi2)-f(xi)));
if(resp==1){
ea=((xi1-xi)/xi1)*100;
if(termino>1){
ev=vv-xi1;
er=(ev/vv)*100;
printf ("%5d %8.5f %5.5f %5.5f %5.5f
%5.5f\n",termino,xi2,xi,xi1,fabs(er),fabs(ea));
}
if(termino<=1){
ev=vv-xi1;
er=(ev/vv)*100;
printf ("%5d %8.5f %5.5f %5.5f %5.5f\n",termino,xi2,xi,xi1,fabs(er));
}
}
else {
ea=((xi1-xi)/xi1) *100;
if(termino>1){
printf ("%5d %8.5f %5.5f %5.5f %5.5f
%5.5f\n",termino,xi2,xi,xi1,fabs(er),fabs(ea));
}
if(termino<=1){
printf ("%5d %8.5f %5.5f %5.5f %5.5f\n",termino,xi2,xi,xi1,fabs(er));
}
}
xi2=xi;
xi=xi1;
termino++;
}
return 0;

}
d) Método de secante modificado

#include <stdio.h>
#include <math.h>
#define f(x) (0.95*pow(x,3)-(5.9*pow(x,2))+(10.9*x)-6)
#define g(x) (2.85*pow(x,2)-(11.8*x)+10.9)
#define u(x) (f(x)/g(x))
/*Programa de metodo de la secante modificado*/
int main (){
int in,contado,intermax=3,n,resp,i,termino=1;
float xi,es,vv,ea=1,er,xi1=0,ev,xi2;
printf ("Ingresa el valor de superior\n");
scanf("%f",&xi);
printf("Ingresa el valor de inferior\n");
scanf("%f",&xi2);
/*printf("Cifra significativa\n");
scanf("%d",&n);
es=0.5*pow(10,2-n);*/
es=0.01;
/*printf("Tolerancia %f\n",es);*/
printf("Conoces el valor verdadero? Si=1 No=2\n");
scanf("%d",&resp);
if(resp==1){
printf ("El valor verdadero es\n");
scanf("%f",&vv);
printf ("Interracion xi-1 xi xi+1 er ea \n");
}
else
printf ("Interacion xi-1 xi xi+1 ea \n");
for(i=1;fabs(ea)>=es && termino<=intermax;i++){
xi1=xi-(u(xi)*(xi2-xi)/(u(xi2)-u(xi)));
if(resp==1){
ea=((xi1-xi)/xi1)*100;
if(termino>1){
ev=vv-xi1;
er=(ev/vv)*100;
printf ("%5d %8.5f %5.5f %5.5f %5.5f
%5.5f\n",termino,xi2,xi,xi1,fabs(er),fabs(ea));
}
if(termino<=1){
ev=vv-xi1;
er=(ev/vv)*100;
printf ("%5d %8.5f %5.5f %5.5f %5.5f\n",termino,xi2,xi,xi1,fabs(er));
}
}
else {
ea=((xi1-xi)/xi1) *100;
if(termino>1){
printf ("%5d %8.5f %5.5f %5.5f %5.5f \n",termino,xi2,xi,xi1,fabs(ea));
}
if(termino<=1){
printf ("%5d %8.5f %5.5f %5.5f\n",termino,xi2,xi,xi1);
}
}
xi2=xi;
xi=xi1;
termino++;
}
return 0;

}
Ejercicio 6.11
La función x3 + 2x2 – 4x + 8 tiene una raíz doble en x = 2. Emplee a) el método
estándar de Newton-Raphson [ec. (6.6)], b) el método de Newton-Raphson
modificado [ec. (6.9a)], y c) el método de Newton-Raphson modificado [ec. (6.13)]
para resolver para la raíz en x = 2. Compare y analice la tasa de convergencia con
un valor inicial x0 = 1.2.
Gráfica

a) Método estándar de Newton Raphson


/*Ejercicio 6.11 inciso a*/
#include<stdio.h>
#include<math.h>
#define f(x) ((pow(x,3))+(2*(pow(x,2)))-(4*x)+8)
#define g(x) ((3*(pow(x,2)))+(4*x)-4)
int main(){
float X0,Xi=0,Xi1=0,es,vv,p,ea=1,er,ev,i,max=3;
int resp,termino=0,N;
printf("Ingrese el primer valor:\n");
scanf("%f",&X0);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.5*pow(10,2-N));
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi1 er ea \n");
}
else
printf("Termino Xi1 ea \n");
for (i=1;fabs(ea)>=es&&termino<max;i++){
Xi1=Xi-(f(Xi)/g(Xi));
if(resp==1){
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.5f %5.5f %5.5f \n",termino,Xi1,fabs(er),fabs(ea));
}
if (termino<=0) {
Xi1=X0;
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5f %5f \n",termino,Xi1,fabs(er));
}
}
else{
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {

printf("%5d %5.5f %5.5f \n",termino,Xi1,fabs(ea));


}
if (termino<=0) {
Xi1=X0;
printf("%5d %5f \n",termino,Xi1);
}
}
Xi=Xi1;
termino++;
}
return 0;
}
b) Método Newton Raphson modificado (ec.6. 9a)
#include<stdio.h>
#include<math.h>
#define PI 3.14159
#define f(x) ((pow(x,3))+(2*(pow(x,2)))-(4*x)+8)
#define g(x) ((3*(pow(x,2)))+(4*x)-4)
#define p(x) ((6*x)+4)
int main(){
float X0,Xi=0,Xi1=0,es,vv,p,ea=1,er,ev,i,max=4,m=2,fi,gi,pi;
int resp,termino=0,N;
printf("Ingrese el primer valor:\n");
scanf("%f",&X0);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.5*pow(10,2-N));
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi1 er ea \n");
}
else
printf("Termino Xi1 ea \n");
for (i=1;fabs(ea)>=es&&termino<max;i++){
fi=f(Xi);
gi=g(Xi);
pi=p(Xi);
Xi1=Xi-(m*(fi/gi));
if(resp==1){
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.9f %5.9f %5.9f \n",termino,Xi1,fabs(er),fabs(ea));
}
if (termino<=0) {
Xi1=X0;
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.9f %5.9f \n",termino,Xi1,fabs(er));
}
}
else{
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {

printf("%5d %5.9f %5.9f \n",termino,Xi1,fabs(ea));


}
if (termino<=0) {
Xi1=X0;
printf("%5d %5.9f \n",termino,Xi1);
}
}

Xi=Xi1;
termino++;
}
return 0;
}
c) Método Newton Raphson modificado (ec.6.13)
#include<stdio.h>
#include<math.h>
#define f(x) ((pow(x,3))+(2*(pow(x,2)))-(4*x)+8)
#define g(x) ((3*(pow(x,2)))+(4*x)-4)
#define p(x) ((6*x)+4)
int main(){
float X0,Xi=0,Xi1=0,es,vv,p,ea=1,er,ev,i,max=3,m=2,fi,gi,pi;
int resp,termino=0,N;
printf("Ingrese el primer valor:\n");
scanf("%f",&X0);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.5*pow(10,2-N));
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi1 er ea \n");
}
else
printf("Termino Xi1 ea \n");
for (i=1;fabs(ea)>=es&&termino<max;i++){
fi=f(Xi);
gi=g(Xi);
pi=p(Xi);
Xi1=Xi-((fi*gi)/((pow(gi,2))-(fi*pi)));
if(resp==1){
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.9f %5.9f %5.9f
\n",termino,Xi1,fabs(er),fabs(ea));
}
if (termino<=0) {
Xi1=X0;
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.9f %5.9f \n",termino,Xi1,fabs(er));
}
}
else{
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {

printf("%5d %5.9f %5.9f \n",termino,Xi1,fabs(ea));


}
if (termino<=0) {
Xi1=X0;
printf("%5d %5.9f \n",termino,Xi1);
}
}

Xi=Xi1;
termino++;
}
return 0;
}
Ejercicio 6.26
Suponga el lector que está diseñando un tanque esférico (véase la figura P6.26)
de almacenamiento de agua para un poblado pequeño de un país en desarrollo. El
volumen del líquido que puede contener se calcula con
V =πh2 [(3R-h) /3]
donde V = volumen [pie3], h = profundidad del agua en el tanque [pies], y R =
radio del tanque [pies]. Si R = 3 m, ¿a qué profundidad debe llenarse el tanque de
modo que contenga 30 m3? Haga tres iteraciones del método de Newton Raphson
para determinar la respuesta. Encuentre el error relativo aproximado después de
cada iteración. Observe que el valor inicial de R convergerá siempre.

#include<stdio.h>
#include<math.h>
#define PI 3.14159
#define f(h) ((PI*(pow(h,3)))-(9*PI*(pow(h,2)))+(90))
#define g(h) ((3*PI*(pow(h,2)))-(18*PI*h))
int main(){
float X0,Xi,Xi1=0,es,vv,p,ea=1,er,ev,i,A,r=3,v=30,max=3,h;
int resp,termino=0,N;
A=(PI/4)*(pow(2*r,2)); /*sacamos el área para poder sacar el valor de h1 ya que si
no se saca se indetermina la funcion*/
Xi=(v/A)*3.2808;/*Se multiplica por 3.2808 para pasar de metros a pies*/
printf("Ingrese el primer valor:\n");
scanf("%f",&X0);
/*printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);*/
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
/*es=(0.5*pow(10,2-N));*/
es=0.05;
printf("area es: %f\n ",A);
printf("El valor inicial de h es: %f\n ",Xi);
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi1 er ea \n");
}
else
printf("Termino Xi1 ea \n");
for (i=1;fabs(ea)>=es&&termino<max;i++){
Xi1=Xi-(f(Xi)/g(Xi));
if(resp==1){
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.5f %5.5f %5.5f \n",termino,Xi1,fabs(er),fabs(ea));
}
if (termino<=0) {
Xi1=X0;
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5f %5f \n",termino,Xi1,fabs(er));
}
}
else{
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {

printf("%5d %5.5f %5.5f \n",termino,Xi1,fabs(ea));


}
if (termino<=0) {
Xi1=X0;
printf("%5d %5f \n",termino,Xi1);
}
}
Xi=Xi1;
termino++;
}
return 0;
}
Problema 8.3

En un proceso de ingeniería química el vapor de agua (H2O) se calienta a


temperaturas lo suficientemente altas para que una porción significativa del agua
se disocie, o se rompa, para formar oxígeno (O2) e hidrógeno (H2)

H2O → H2 + 1/ 2 O2

Si se asume que ésta es la única reacción que se lleva a cabo, la fracción molar x
de H2o que se disocia se representa por

x 2 pt
K=
1−x √ 2+ x

Donde K=la constante de equilibrio de la reacción y pt= la presión total de la


mezcla. Si pt= 3.5 atm y K= 0.04, determine el valor de x que satisfaga la
ecuación.

/*Newton raphson------Problmema 8.3*/

#include<stdio.h>

#include<math.h>

#define f(x) ((0.0016*pow(x,3))-(7.0016*pow(x,2))+(0.0016*x)+0.0032)


#define g(x) ((0.0048*pow(x,2))-(14.0032*x)+0.0016)

int main(){

float X0,Xi=0,Xi1=0,es,vv,p,ea=1,er,ev,i,max=100;

int resp,termino=0,N;

printf("Ingrese el primer valor:\n");

scanf("%f",&X0);

printf("Ingrese el numero de cifras significativas \n");

scanf("%d",&N);

printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");

scanf("%d",&resp);

es=(0.5*pow(10,2-N));

if(resp==1){

printf("ingresa el valor verdadero\n");

scanf("%f",&vv);

printf ("El valor verdadero es: %f\n",vv);

printf("La tolerancia es: %f\n",es);

printf("Termino Xi1 er ea \n");

else

printf("Termino Xi1 ea \n");

for (i=1;fabs(ea)>=es&&termino<max;i++){

Xi1=Xi-(f(Xi)/g(Xi));

if(resp==1){

ea=((Xi1-Xi)/Xi1)*100;

if (termino > 0) {
ev=vv-Xi1;

er=(ev/vv)*100;

printf("%5d %5.5f %5.5f %5.5f \n",termino,Xi1,fabs(er),fabs(ea));

if (termino<=0) {

Xi1=X0;

ev=vv-Xi1;

er=(ev/vv)*100;

printf("%5d %5f %5f \n",termino,Xi1,fabs(er));

else{

ea=((Xi1-Xi)/Xi1)*100;

if (termino > 0) {

printf("%5d %5.5f %5.5f \n",termino,Xi1,fabs(ea));

if (termino<=0) {

Xi1=X0;

printf("%5d %5f \n",termino,Xi1);

Xi=Xi1;

termino++;

}
return 0;

}
Problema 8.5

Una reacción química reversible

2A+B→C

Se caracteriza por la reacción de equilibrio

cc
k=
c 2a cb

Donde la nomenclatura c nrepresenta la concentración del componente N. Suponga


que se define una variable x que representa el número de moles de C producido.
La conservación de la masa se utiliza para reformular la relación de equilibrio
como

(c c ,0 + x )
k=
(c a , 0−2 x)2 (c b ,0 + x )

Donde el subíndice 0 indica la concentración inicial de daca componente. Si k=


0.016,c a , 0=42, c b , 0=28 y c c ,0 =4, calcule x.

/*Newton raphson------Problmema 8.5*/


#include<stdio.h>
#include<math.h>
#define f(x) ((-0.064*pow(x,3))+(4.48*pow(x,2))-(104.488*x)+786.272)
#define g(x) ((-0.192*pow(x,2))+(8.96*x)-104.488)
int main(){
float X0,Xi=0,Xi1=0,es,vv,p,ea=1,er,ev,i,max=100;
int resp,termino=0,N;
printf("Ingrese el primer valor:\n");
scanf("%f",&X0);
printf("Ingrese el numero de cifras significativas \n");
scanf("%d",&N);
printf("¿Se conoce el valor verdadero?\n si=1\n no=2\n");
scanf("%d",&resp);
es=(0.5*pow(10,2-N));
if(resp==1){
printf("ingresa el valor verdadero\n");
scanf("%f",&vv);
printf ("El valor verdadero es: %f\n",vv);
printf("La tolerancia es: %f\n",es);
printf("Termino Xi1 er ea \n");
}
else
printf("Termino Xi1 ea \n");
for (i=1;fabs(ea)>=es&&termino<max;i++){
Xi1=Xi-(f(Xi)/g(Xi));
if(resp==1){
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5.5f %5.5f %5.5f \n",termino,Xi1,fabs(er),fabs(ea));
}
if (termino<=0) {
Xi1=X0;
ev=vv-Xi1;
er=(ev/vv)*100;
printf("%5d %5f %5f \n",termino,Xi1,fabs(er));
}
}
else{
ea=((Xi1-Xi)/Xi1)*100;
if (termino > 0) {

printf("%5d %5.5f %5.5f \n",termino,Xi1,fabs(ea));


}
if (termino<=0) {
Xi1=X0;
printf("%5d %5f \n",termino,Xi1);
}
}
Xi=Xi1;
termino++;
}
return 0;
}

Вам также может понравиться