Пример программы (лабораторная работа 6).

Вычисление корня функции с заданной точностью на отрезке.

Варианты задания.

,

где

, , ,

, ,

– номер группы; – номер студента по журналу.

 

Текст программы на F90

function f(x) common a0,a1,a2 f=((x+a2)*x+a1)*x+a0 end   function df(x) common a0,a1,a2 df=3*x**2+2*a2*x+a1 end   parameter(s=17,g=3,eps=0.00001,kmax=99,a=0,b=3) common a0,a1,a2 a0=-s*(g*g+s*s)/1000; a1=(s+g)**2/100; a2=-(2*g+s)/10; print '(4(2x,a,f10.4))','a0=',a0,'a1=',a1,'a2=',a2 ak=a;bk=b do k=0,kmax c=(ak+bk)/2;y=f(c) if(abs(y)<eps.or.bk-ak<eps) goto 1 if(f(ak)*y<0) then bk=c else ak=c endif enddo 1 print 100,'BISECT',k,y,c   xk=b; if(s<10) xk=(a+b)/2 do k=0,kmax y=f(xk); dy=df(xk); h=y/dy; if(abs(h)<eps) goto 2 xk=xk-h enddo 2 print 100,'NEWTON',k,y,xk   100 format(//10x,a/2x,"k=",i2,3x,"f(x)=",f10.7/2x,"x=",f6.3)   end

 

Результаты счета

 

 

a0= -5.0660 a1= 4.0000 a2= -2.3000

 

BISECT

k=19 f(x)=-0.0000008

x= 1.700

 

NEWTON

k= 5 f(x)=-0.0000002

x= 1.700

Press any key to continue