9
I. Nghim ca phương trình phi tuyến (phương pháp chia đôi) 1. Code: program Bisection implicit none real::a,b,c,eps,F 1 print*,'Nhap khoang phan ly nghiem (a,b),sai so eps' read*,a,b,eps if (b<a) then go to 1 end if if (abs(a-b)<0.00001) then if (abs(F(a))<0.00001) then print*,'Nghiem x=',a stop else print*,'Khong co nghiem trong khoang nay' stop end if end if if (F(a)*F(b)>0.00001) then print*,'Khong co nghiem trong khoang nay' stop end if if (abs(F(a))<0.00001)then print*,'nghiem x=',a else if (abs(F(b))<0.00001)then print*,'nghiem x=',b else do while (abs(b-a)>eps) c=(a+b)/2 if(abs(F(c))<0.00001)then print*,'nghiem x=',c else if(F(a)*F(c)>0.00001)then a=c else b=c end if end do print*,'Nghiem x=',a,'hoac nghiem x=',b end if end program Bisection function F(x) real::F,x F=x-2 end function F

Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

  • Upload
    lee-ein

  • View
    1.327

  • Download
    10

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

I. Nghiệm của phương trình phi tuyến (phương pháp chia đôi)

1. Code:

program Bisection implicit none real::a,b,c,eps,F 1 print*,'Nhap khoang phan ly nghiem (a,b),sai so eps' read*,a,b,eps if (b<a) then go to 1 end if if (abs(a-b)<0.00001) then if (abs(F(a))<0.00001) then print*,'Nghiem x=',a stop else print*,'Khong co nghiem trong khoang nay' stop end if end if if (F(a)*F(b)>0.00001) then print*,'Khong co nghiem trong khoang nay' stop end if if (abs(F(a))<0.00001)then print*,'nghiem x=',a else if (abs(F(b))<0.00001)then print*,'nghiem x=',b else do while (abs(b-a)>eps) c=(a+b)/2 if(abs(F(c))<0.00001)then print*,'nghiem x=',c else if(F(a)*F(c)>0.00001)then a=c else b=c end if end do print*,'Nghiem x=',a,'hoac nghiem x=',b end if end program Bisection function F(x) real::F,x F=x-2 end function F

Page 2: Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

Ôn tập Phương pháp số và lập trình

2

2. Sơ đồ

‘Không có nghiệm trong khoảng này’

a = c

b = c

a > b

a = b

F(a)*F(b) > 0

F(a) = 0

F(b) = 0

abs(b – a) > eps

c = (a + b)/2

abs(F(c)) < 0,00001

F(a)*F(c) < 0

F(b)*F(c) < 0

‘Nghiệm x =’,a

‘Nghiệm x =’,b

‘Nghiệm x =’,c

‘Nghiệm x =’,a,’hoặc x =’,b

END

BEGIN

Input a, b, eps

F(a) = 0

‘Nghiệm x =’,a T

F T

F

T

F T

T

T

T

T

T

F

F

F

T

F

Page 3: Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

Ôn tập Phương pháp số và lập trình

3

II. Tích phân hình thang:

1. Code:

program Integral print*, 'CHUONG TRINH TINH TICH PHAN' call Sum(a,b,eps,S) print*,'Tich phan co gia tri',S end program subroutine Sum(a,b,eps,S) implicit none integer n,i real a,b,eps,x,S1,S,h 1 print*,'Nhap vao 2 can cua tich phan va sai so cho phep' read*,a,b,eps if ( b<a) then print*,'Nhap lai gia tri a va b' go to 1 end if n=int((b-a)/eps) + 1 h=(b-a)/n S1=0 do i=1,n-1 x=a+i*eps S1=S1+F(x) end do S=h*((F(a)+F(b))/2+S1) contains function F(x) real F,x F=x**2 end function F end subroutine

Page 4: Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

Ôn tập Phương pháp số và lập trình

4

2. Sơ đồ:

i = i + 1

BEGIN

Input: F(x), a, b, eps

a < b

n = int((b – a)/eps) + 1 h = (b – a)/n

S1 = 0 i = 1

i <= (n–1)

x=a+i*eps S1=S1+F(x) S=h*((F(a)+F(b))/2+S1)

Output: S

END

T

F

T

F

Page 5: Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

Ôn tập Phương pháp số và lập trình

5

III. Phương pháp Euler hiện:

1. Code

PROGRAM euler_hien REAL::xo,yo,a,h,y,x,F INTEGER::i,n PRINT*,'Nhap xo =?' READ*,xo PRINT*,'Nhap y(xo)=?' READ*,yo PRINT*,'Nhap gia tri a cua ham y(a) can tinh:?' READ*,a PRINT*,'Nhap buoc nhay h=?' READ*,h n=int((a-xo)/h) x=xo y=yo DO i=1,n y=y+h*F(x,y) x=xo+h*i ENDDO PRINT*,'Gia tri cua y(a)=',y ENDPROGRAM !______________________________________________ FUNCTION F(x,y) REAL::F,x,y F=y**2-x**2 END FUNCTION F

Page 6: Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

Ôn tập Phương pháp số và lập trình

6

2. Sơ đồ

i = i + 1

BEGIN

Input: F(x), xo, yo, a, h

i <= n

y = yo + h*F(x,y) x = xo + h*i

Output: y

END

T

F

n = int((a – xo)/h) x = xo y = yo i = 1

Page 7: Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

Ôn tập Phương pháp số và lập trình

7

IV. Phương pháp Euler cải tiến

1. Code

PROGRAM euler_caitien REAL::xo,yo,a,h,y,x,k,g,F INTEGER::i,n PRINT*,'Nhap xo =?' READ*,xo PRINT*,'Nhap y(xo)=?' READ*,yo PRINT*,'Nhap gia tri a cua ham y(a) can tinh:?' READ*,a PRINT*,'Nhap buoc nhay h=?' READ*,h n=int((a-xo)/h) x=xo y=yo DO i=1,n g=y+h*F(x,y) k=F(x,y) x=xo+h*i y=y+h/2*(k+F(x,g)) ENDDO PRINT*,'Gia tri cua y(a)=',y ENDPROGRAM !______________________________________________ FUNCTION F(x,y) REAL::F,x,y F=y**2-x**2 END FUNCTION F

Page 8: Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

Ôn tập Phương pháp số và lập trình

8

2. Sơ đồ

i = i + 1

BEGIN

Input: F(x), xo, yo, a, h

i <= n

g=y+h*F(x,y) k=F(x,y) x=xo+h*i y=y+h/2*(k+F(x,g))

Output: y

END

T

F

n = int((a – xo)/h) x = xo y = yo i = 1

Page 9: Code và sơ đồ khối môn Phương pháp số và lập trình Fortran

Ôn tập Phương pháp số và lập trình

9

V. Đạo hàm tại 1 điểm:

1. Code

2. Sơ đồ

PROGRAM Derivative REAL::x,eps,F,G PRINT*,'Nhap vi tri x can tinh dao ham:' READ*,x PRINT*,'Nhap sai so toi da cua phep toan deltax =' READ*,eps G=(F(x+eps)-F(x))/eps PRINT*,'Gia tri dao ham cua ham F(x) tai diem x=',x,'la',G END PROGRAM Derivative FUNCTION F(x) Real::F,x F=x**2 END FUNCTION F

BEGIN

Input: F(x), x, eps

Output: G

END

G=(F(x+eps)-F(x))/eps