Bonjour les amis
J'ai un problème simple et j'espère obtenir de l'aide dès que possible.
Le problème est dans l'écriture d'un programme majeur pour exécuter des programmes que vous résoudre les équations
Je fais le programme suivant et demander la correction
Ou d'autres idées
**************************************************************
function fd(x)
real fd
real x
fd=x**3+2*x+1
return
end
subroutine dichotomie
real a,b,eps,xm
integer n,i
write(*,*)'enter a,b and eps'
read(*,*)a,b,eps
n=log(abs(a-b)/eps)/log(2.0)+1
do i=1,n
xm=(a+b)/2
if (fd(a)*fd(xm)<0) then
b=xm
else
a=xm
endif
enddo
write(*,*)'{',a,',',b,',}'
write(*,*)'xm=',xm,'f(xm)=',fd(xm)
endsubroutine
*************************************************************
function fb(x)
real fb
real x
fb=x**3+2*x+1
return
end
subroutine balayage
real a,b,p,xsuite
write(*,*)'entre les valeurs suivant a b p'
read(*,*)a,b,p
10 xsuite=a+p
if(fb(a)*fb(xsuite)<0)then
write(*,*)'la solution est dans [',a,',',xsuite,']'
else
a=a+p
goto 10
endif
endsubroutine
****************************************************************
function fl(x)
real fl
real x
fl=x**3+2*x+1
return
end
subroutine lagr
real x0,x1,x2,eps
write(*,*)'entrer x0: '
read(*,*)x0
write(*,*)'entrer x1: '
read(*,*)x1
write(*,*)'entrer x2: '
read(*,*)x2
write(*,*)'entrer eps: '
read(*,*)eps
do while (abs(fl(x2))>=eps)
x2=x1-(fl(x1)*(x1-x0))/(fl(x1)-fl(x0))
x0=x1
x1=x2
write(*,*)'la valeur de la racine est',x2
enddo
endsubroutine
******************************************************************
function fn(x)
real fn
real x
fn=3*x**3+2*x+1
return
end
function dfn(x)
real dfn
real x
dfn=x**3+2
return
end
subroutine newton
real x0,x1
real eps
write(*,*)'entrer x0: '
read(*,*)x0
write(*,*)'entrer x1: '
read(*,*)x1
write(*,*)'entrer eps: '
read(*,*)eps
do while (abs(fn(x0))>=eps)
x1=x0-fn(x0)/dfn(x0)
write(*,*)'valeur de la racine est',x1
x0=x1
enddo
endsubroutine
*************************************************************
function fp(x)
real fp
real x
fp=-(x**3+1)/2
return
end
subroutine pfd
real x1
real eps
write(*,*)'donner la valeur de x1'
read(*,*)x1
write(*,*)'donner la valeur de epsilon'
read(*,*)eps
x=x1
do while (abs(x-fp(x))>=eps)
write(*,*)'valeur de racine est',x
y=fp(x)
x=y
end do
write(*,*)x,fp(x)
endsubroutine
do while(i.ne.6)
write(*,*)'1.Dichotomie'
write(*,*)'2.Balayage'
write(*,*)'3.Lagrange'
write(*,*)'4.Newton'
write(*,*)'5.Point fixe'
write(*,*)'6.Quiter'
write(*,*)'Votre choix: '
read(*,*)i
if(i.eq.1)then
call dichotomie
else
if(i.eq.2)then
call balayage
else
if(i.eq.3)then
call lagr
else
if(i.eq.4)then
call newton
else
if(i.eq.5)then
call pfd
endif
endif
endif
endif
endif
enddo
end program
Partager