1. Trang chủ
  2. » Luận Văn - Báo Cáo

bản báo cáo phương pháp tính đề tài giải phương trình bằng pp newton tính tích phân bằng công thức simpson

18 4 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 583,72 KB

Nội dung

TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂNVIỆN CÔNG NGHỆ THÔNG TIN VÀ KINH TẾ SỐ---BẢN BÁO CÁO PHƯƠNG PHÁP TÍNHĐỀ TÀI: GIẢI PHƯƠNG TRÌNH BẰNG PP NEWTON + TÍNH TÍCH PHÂN BẰNG CÔNG THỨC SIMPSONGiảng

Trang 1

TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN VIỆN CÔNG NGHỆ THÔNG TIN VÀ KINH TẾ SỐ

-▯▯▯

-BẢN BÁO CÁO PHƯƠNG PHÁP TÍNH

ĐỀ TÀI: GIẢI PHƯƠNG TRÌNH BẰNG PP NEWTON +

TÍNH TÍCH PHÂN BẰNG CÔNG THỨC SIMPSON

Giảng viên hướng dẫn :

Hà Nội, ngày tháng năm

Trang 2

MỤC LỤC

A GIẢI PHƯƠNG TRÌNH BẰNG PHƯƠNG PHÁP NEWTON 3

I Mô tả thuật toán 3

1 Xây dựng công thức lặp: 3

2 Điều kiện hội tụ Furie: 3

3 Công thức tính sai số: 3

II Mô hình hóa 4

III Miêu tả thuật toán qua ngôn ngữ lập trình C 4

1 Xác định được phương trình ta cần tính là phương trình bậc mấy và hệ số của từng bậc 4

2 Xét điều kiện hội tụ Furie 5

3 Áp dụng phương pháp Newton bằng hàm sau: 8

4 Cuối cùng tất cả các hàm trên được gọi đến hàm main như sau 9

IV Ví dụ 10

B TÍNH GẦN ĐÚNG TÍCH PHÂN XÁC ĐỊNH BẰNG PHƯƠNG PHÁP SIMPSON 11

I Mô tả thuật toán 11

1 Hiểu bài toán 11

2 Mô tả bài toán chi tiết 11

3 Xây dựng công thức 11

II Mô hình hóa 13

III Giải thích code 14

IV Ví dụ 17

Trang 3

A GIẢI PHƯƠNG TRÌNH BẰNG PHƯƠNG

PHÁP NEWTON

I Mô tả thuật toán

Thuật toán giải phương trình bằng phương pháp Newton là cách sử dụng lặp

lại phương trình tiếp tuyến tại Ak (xk, f(xk)) cắt trục hoành tại 1 điểm xk cho đến khi tìm ra nghiệm gần đúng của phương trình với khoảng nghiệm phân

ly cho trước

1 Xây dựng công thức lặp:

Phương trình tiếp tuyến tại Ak (xk, f(xk)): y - f(xk ) = f’(x k )*(x - x k )

Tiếp tuyến cắt trục x tại điểm có toạ độ (xk+1, 0)

Do vậy: 0 – f(x k ) = f’(x k )*(x k+1 - x k )

Từ đó ta được công thức:

𝑥𝑘+1 = 𝑥𝑘- f (x k)

f '(x k) (5)

2 Điều kiện hội tụ Furie:

Giả sử [a, b] là khoảng phân ly nghiệm của phương trình Giả sử rằng:

 𝑓 có đạo hàm 𝑓′ ;

 𝑓, 𝑓′, 𝑓′′ liên tục trên [a, b]

 𝑓′, 𝑓′′ không đổi dấu trên (a, b)

Xấp xỉ đầu 𝑥0 chọn là a hoặc b sao cho 𝑓 (𝑥0) cùng dấu với 𝑓′′ Khi đó 𝑥𝑛 tính theo công thức (5) hội tụ đến nghiệm khi 𝑛 → ∞

Trang 4

3 Công thức tính sai số:

|𝛼 - 𝑥 𝑛 |≤ f (x n) m (6) Với 0 ≤ 𝑚 ≤| 𝑓′ (𝑥)| , 𝑎 ≤ 𝑥 ≤ 𝑏 (7)

Chú ý: Thực tế ta dừng quá trình tính sai số khi |𝑥 𝑛 - 𝑥𝑛-1| < 𝜀

Ngôn ngữ sử dụng: Thuật toán sử dụng ngôn ngữ C

Bước 1: Xây dựng công thức lặp

Bước 2: Ta xét điều kiện hội tụ Furie với giả sử[a,b] là khoảng phân ly nghiệm : Bước 3: Áp dụng phương pháp lặp thay x0 bằng x1 :

Ta có sơ đồ khối dưới đây với sai số 𝜀 cho trước:

trình C

1 Xác định được phương trình ta cần tính là phương trình bậc mấy và hệ

số của từng bậc

Ta sẽ có hàm nhập như sau:

{

Trang 5

scanf("%d",&n);

for(int i=*n; i>=0;i )

{

",i);

scanf("%f", &number[i]);

}

}

Đầu tiên là câu lệnh nhập bậc của phương trình, tùy theo đề bài

Vòng lặp for sẽ cho phép ta nhập hệ số của xn đến x0

2 Xét điều kiện hội tụ Furie

Ở đây ta sẽ áp dụng phương pháp tính giá trị của đa thức

a Để tính giá trị của đa thức tại 1 điểm X ta có hàm sau:

Để tính được giá trị của đa thức, ta tính giá trị của từng phần tử trong đa thức và cộng dồn các giá trị lại với nhau

Cách tính giá trị 1 phần tử x bậc i trong đa thức: a.x i

Cách tính tổng các các phần tử trong đa thức hay nói cách khác là tính giá trị của đa thức:

S=ax n +bx n-1 +… + dx i +……+gx 0

Ta có biến x kiểu giữ liệu double là giá trị tại đó ta muốn tính giá trị đa thức

Ta gọi biến s kiểu dữ liệu double để tính tổng giá trị của x tại các bậc khác nhau

Cho vòng lặp for cho i chạy từ n đến 0 tương ứng với bậc i của x chạy từ

n đến 0, mỗi lần lặp nó cộng dồn giá trị các phần tử của đa thức tại bậc i vào biến s

 Với các hệ số a,b,c,… là hệ số của x bậc i tương ứng mảng các hệ số đã

nhập từ trước ở đây là mảng number[ i ].

x i được tính bằng hàm pow(x, i).

{

for(int i = n ; i >= 0 ; i )

{

Trang 6

}

}

b Để tính giá trị đạo hàm bậc 1 tại điểm X

Tương tự, để tính được giá trị đạo hàm bậc 1 của đa thức, ta tính giá trị đạo hàm của từng phần tử trong đa thức và cộng dồn các giá trị lại với nhau

Cách tính giá trị 1 phần tử x bậc i trong đa thức: a.x i

 Cách tính giá trị đạo hàm bậc của 1 phần tử x bậc i trong đa thức: a.i.x i-1

Cách tính tổng các các phần tử trong đa thức hay nói cách khác là tính giá trị của đa thức:

S=a.n.x n-1 +b.(n-1).x n-2 +… + d.i.x i-1 +……+ g.x 1 +0.

Ta có biến x kiểu dữ liệu double là giá trị tại đó ta muốn tính đạo hàm bậc n

Ta gọi biến s kiểu dữ liệu double để tính tổng giá trị đạo hàm của x tại các bậc khác nhau

Vòng lặp for cho i chạy từ n đến 1, trong mỗi lần lặp nó sẽ tính đạo hàm của từng phần tử x bậc i trong đa thức và cộng dồn vào biến s

 Với các hệ số a,b,c,… là hệ số của x bậc i tương ứng mảng các hệ số đã

nhập từ trước, ở đây là mảng number[ i ].

x i được tính bằng hàm pow(x, i-1).

{

for(int i = n ; i >= 1 ; i )

{

}

}

c Tương tự như vậy ta có hàm tính giá trị đạo hàm bậc 2 tại điểm X.

{

Trang 7

double s=0.0;

for(int i = n ; i >= 2 ; i )

{

}

}

d Để kiểm tra phương trình có thỏa mãn điều kiện Furie hay không

ta sử dụng hàm sau:

{

int isPositive = FDD(a,n)>=0;

for(double i=a;i<=b;i+=0.01)

{

{

tu Furie (do dao ham cap 1 doi dau)");

}

}

isPositive= SDD(a,n)>0;

for(double i=a;i<=b;i+=0.01)

{

{

tu Furie (do dao ham cap 2 doi dau)");

}

}

}

Đầu tiên ta phải xem dấu của đạo hàm cấp 1 và đạo hàm cấp 2 có cùng

dấu với f không:

Trang 8

Vòng lặp for đầu tiên sẽ duyệt từ khoảng [a,b] để xem đạo hàm cấp 1 có đổi dấu không Nếu có trả về -2, không thì in ra thông báo Lặp lại quá trình tương tự với vòng lặp for thứ 2 áp dụng với đạo hàm cấp 2

Hàm sẽ trả về giá trị 1, -1 hoặc 0 dựa theo dấu của tích giá trị của hàm số

và đạo hàm cấp 2 tại các điểm a và b để chọn điểm x0:

n)>0 ? -1 : 0);

3 Áp dụng phương pháp Newton bằng hàm sau:

{

int iterations = 0;

maxIteration && (x >= a && x <= b))

{

x, saiso);

}

if(saiso>epsilon)

{

khoang phan ly (%lf, %lf)\n",a,b);

}

{

Trang 9

printf(">> Nghiem gan dung: %f\n", x);

}

}

Đầu tiên ta xây dựng công thức lặp:

X k+1 =X k - f(x k )/f’(x k )

Vòng lặp while sẽ tiếp tục chạy khi mà sai số lớn hơn epsilon mà đề bài cho trước hoặc số lần lặp vẫn ít hơn số lần lặp tối đa đề bài cho phép Mỗi lần lặp thì biến iterations(số lần lặp) sẽ tăng lên 1

Câu lệnh if sẽ xét trường hợp nếu quá lần lặp tối đa cho phép mà sai số vẫn lớn hơn epsilon thì:

In ra thông báo “ Khong tim thay nghiem nam trong khoang phan

ly”.

 Nếu không, in ra nghiệm, số lần lặp, sai số vào bảng đã tạo

4 Cuối cùng tất cả các hàm trên được gọi đến hàm main như sau

{

scanf("%lf %lf",&a,&b);

scanf("%lf",&epsilon);

int checkResult = convergenceCondition(n, a, b);

if(checkResult == 1)

Trang 10

x0=a;

else if(checkResult == -1)

else if(checkResult == -2)

{

}

int maxIterations = 100000;

n);

}

Hàm này để nhập vào các dữ liệu mà đề bài cho trước và đồng thời chọn x0 dựa vào kết quả của hàm xét điều kiện Furie

x3−5 x2+7=0

Chọn khoảng phân ly nghiệm (3.5, 4); sai số cho phép là 0.00001

*Kiểm tra điều kiện hội tụ Furie:

f '=3 x2−10 x +3> 0∀ x ∈[3.5, 4]f ''=6 x −10>0∀ x ∈[3.5, 4]Chọn x0=4 vì f ( 4 )>0 và f ''( 4 )>0

10

n x n Sai số

1 3.727273 0.272727

2 3.6597 0.067573

3 3.655459 0.004241

Trang 11

B TÍNH GẦN ĐÚNG TÍCH PHÂN XÁC ĐỊNH BẰNG PHƯƠNG PHÁP SIMPSON

I Mô tả thuật toán

1 Hiểu bài toán

 Cần tính: I = ∫

a

b

f (x )dx

 Nếu hàm f(x) liên tục trên [a,b] và có nguyên hàm F(x), công thức Newton – Lepnit:

I = ∫

a

b

f (x )dx = F(b) – F(a)

 Trường hợp:

- f(x) chỉ được cho ở dạng bảng hoặc f(x)

- Hoặc f(x) đã biết nhưng tính toán phức tạp

 Thay vì tính đúng, tính gần đúng sẽ đơn giản hơn

2 Mô tả bài toán chi tiết

 Phân hoạch [a,b] thành 2n đoạn con bằng nhau: a = x0 < x1 < … < x2n = b

h = x i+1 – x i = (b−a)

2 n

x i = x 0 + ih, i = 0,1,…,2n

I =

a

b

f (x )dx=

x0

x2

f (x )dx+

x2

x4

f (x)dx +…+

x 2n−2

x 2n

f (x)dx

3 Xây dựng công thức

a Công thức Simpson:

 Xét đoạn kép [xi, xi+2] Xấp xỉ f(x) bởi đa thức nội suy bậc 2 P2(x):

f(x)

b = x 2n

x 0 = a x 1 x 2

Trang 12

I i = ∫

x 2 i−2

x 2 i

f (x )dx ≈

x 2i−2

x 2i

P x(x)dx

 Đặt x = xi + t.h, dx = hdt;

x = xi => t = 0

x = xi+2 => t = 2

I i ≈ h

0

2

[y i+t ∆ y i+t (t−1)

2

2y i]dt

=h[y i t+ t

2

2 ∆ y i+ 1

2(

t3

2−

t2

2)

2

y i] |t=2 t=0=

h

3(y i+4 y i+ 1+y i +2)

Sai số:

r i (h)¿ −h5

90f

( 4 )

(c i);c i ∈[x i , x i+ 2]

|f( 4 )

(x )|≤ M , ∀ x ∈[x i , x i +2] thì |r i(h)|≤ M h

5

90

b Công thức simpson toàn phần:

I =

a

b

f (x )dx=

x0

x2

f (x )dx+

x2

x4

f (x)dx +…+

x 2n−2

x 2n

f (x)dx

= h3(y0+4 y1+y2)+h

3(y2 +4 y3+y4)+…+ h

3(y 2 n−2+4 y 2 n−1+y 2 n)

P 2 (x)

f(x)

Trang 13

= h3[(y0++y2)+ 4(y1+y3+…+ y 2n −1)+2(y2++y4+…+ y 2 n)]

c. Sai số toàn phần:

r (h)=

i=1

n

r i (h); |r i(h)|≤ nM h

5

90 Với M thỏa: ¿f(4 )(x)∨≤ M ∀ x ∈[a , b]

II Mô hình hóa

1 Cho tích phân

I = ∫

a

b

f (x )dx

2 Xác định số khoảng

chia 2n

3 Chia đoạn [a, b] thành

2n đoạn bằng nhau

4 Tính

h = b−a 2 n ;

xi = a + ih;

yi = f(xi)

5 Tính

IS = h3 [(y0 + y2n)] + 4(y1

+ y3 + … + y2n-1) + 2(y2

+ y4 + … + y2n-2)]

6 Tích phân I cần tìm

xấp xỉ với I S

for (i = 2; i < n; i += 2): sum3 += 2 * 1 / (1 + (a+i*h)*(a+i*h))

END

Nhập vào số thực

a và b Nhập vào số đoạn chia n (n % 2 = 0)

Tính h = (b – a) / n sum1 = 1 / (1 + a * a) +

1 / (1 + b * b)

Kết quả

START

for (j = 1; j < n; j += 2):

sum2 += 4 * 1 / (1 + (a+j*h)*(a+j*h))

kq = sum1 + sum2 + sum3

Khai báo biến

h, i, j, sum1, sum2, sum3,

kq

Trang 14

III Giải thích code

Nhập giá trị [a,b] và đoạn chia n

Khởi tạo biến khoảng cách h theo công thức

Trang 15

Nhập vào một số thực x giá trị được trả về là y tương ứng

* In ra các giá trị xi và yi

Điều kiện lặp:

hoặc bằng số đoạn chia

theo cộng thêm 1 Trong vòng lặp:

 In ra giá trị xi theo công thức đã xây dựng

 In ra giá trị yi theo hàm

Tính gần đúng tích phân bằng phương pháp simpson

Trang 16

Khai báo các giá trị ban đầu.

giá trị yi

* Đối với số lẻ:

Điều kiện lặp:

đoạn chia

cộng thêm 2 để đảm bảo vẫn là số lẻ

Trong vòng lặp:

công thức đã xây dựng

* Đối với số chẵn:

Điều kiện lặp:

số đoạn chia

cộng thêm 2 để đảm bảo vẫn là số chẵn Trong vòng lặp:

công thức đã xây dựng

Trang 17

IV Ví dụ

Tính ∫

0

1

dx

1+x2 Sử dụng công thức Simpson với 10 điểm chia

Chia đoạn[0,1]thành2 n (n=5) đoạn bằng nhauTatính được I S=0,785398045

Trả về kết quả theo công thức

đã xây dựng

In ra các giá trị xi và

yi

Tính gần đúng tích phân bằng phương pháp Simpson Nhập giá trị [a,b] và đoạn chia n

Trang 18

x i y i

Ngày đăng: 17/06/2024, 14:53

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w