1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo học phần phương pháp tính Đề tài giải gần Đúng phương trình bằng phương pháp lặp Đơn

13 0 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

Tiêu đề Giải gần đúng phương trình bằng phương pháp lặp đơn
Tác giả Nhóm 01
Người hướng dẫn Nguyễn Quỳnh Mai
Trường học Đại học Kinh tế Quốc dân, Viện Công nghệ Thông tin và Kinh tế số
Chuyên ngành Công nghệ thông tin
Thể loại Báo cáo học phần
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 13
Dung lượng 837 KB

Nội dung

Học phần cũng cung cấp các kiến thức về phương pháp số trong việc tính gần đúng đạo hàm và tích phân, giải gần đúng phương trình và hệ phương trình đại số tuyến tính, phương trình vi phâ

Trang 1

ĐẠI HỌC KINH TẾ QUỐC DÂN

VIỆN CÔNG NGHỆ THÔNG TIN VÀ KINH TẾ SỐ

ĐỀ TÀI:

GIẢI GẦN ĐÚNG PHƯƠNG TRÌNH BẰNG PHƯƠNG PHÁP

LẶP ĐƠN

Giảng viên hướng dẫn: Nguyễn Quỳnh Mai Lớp học phần: Phương pháp tính 03

Nhóm thực hiện: 01

HÀ NỘI 2024

LỜI MỞ ĐẦU

Trang 2

Học phần nằm trong khối kiến thức cơ sở ngành của chương trình đào tạo bậc cử nhân ngành CNTT Học phần cung cấp các khái niệm cơ bản về phương pháp tính, sai số; nội suy đa thức ; xấp xỉ hàm số Học phần cũng cung cấp các kiến thức về phương pháp số trong việc tính gần đúng đạo hàm và tích phân, giải gần đúng phương trình và hệ phương trình đại số tuyến tính, phương trình vi phân Sử dụng ngôn ngữ lập trình Matlab để mô phỏng các phương pháp nói trên

Học phần cũng nhằm rèn luyện kỹ năng tư duy, khả năng tự tìm hiểu các kiến thức, và công nghệ liên quan bằng cách làm việc độc lập cũng như theo nhóm Sinh viên sẽ được giao bài tập theo nhóm để tìm hiểu các ngôn ngữ lập trình nhằm giải quyết các bài toán liên quan đến phương pháp tính và các vấn đề trong lĩnh vực Công nghệ thông tin

.

Trang 3

Phần 1: Phương trình là đa thức.

MỤC LỤC:

I CƠ SỞ LÝ THUYẾT.

- Giới thiệu về phương pháp lặp đơn: Giải thích tại sao lại cần sử dụng phương pháp lặp đơn

- Định nghĩa và công thức chính: Trình bày công thức chính của phương pháp lặp đơn và cách áp dụng chúng

- Công thức tính sai số: Chứng minh rằng sai số phương pháp lặp đơn có thể được đánh giá bằng công thức

II CODE GIẢI PHƯƠNG TRÌNH.

- Giải thích từng bước: Trình bày chi tiết từng bước trong quá trình mã hóa phương pháp lặp đơn

- Mã nguồn: Cung cấp mã nguồn và giải thích các hàm và cách thức hoạt động của chương trình để tìm nghiệm gần đúng

III CÁC VÍ DỤ.

- Test case: Cung cấp 3-4 ví dụ cụ thể, trong đó có thể bao gồm các trường hợp đặc biệt nếu có

- Ví dụ minh họa: Cung cấp các ví dụ cụ thể với các giá trị ban đầu và các bước lặp để minh họa phương pháp

PHẦN I : CƠ SỞ LÝ THUYẾT

Trang 4

1 Giới thiệu về phương pháp lặp đơn.

- Giới thiệu chung về phương pháp lặp đơn

Phương pháp lặp đơn là một kỹ thuật toán học được sử dụng để tìm nghiệm gần đúng cho các

hệ phương trình, đặc biệt là khi không thể giải chính xác Phương pháp này bao gồm việc lặp

đi lặp lại một quá trình tính toán cho đến khi đạt được độ chính xác mong muốn hoặc khi sai số giữa các lần lặp đạt mức chấp nhận được

- Cơ sở của phương pháp

Phương pháp lặp đơn bắt đầu từ một giá trị xấp xỉ ban đầu và áp dụng công thức lặp để cập nhật giá trị này qua mỗi bước Một cách điển hình, phương trình cần giải được đưa về dạng 𝐴𝑥=𝐵, và từ đó ta xây dựng dạng tương đương 𝑋=𝐵𝑥+𝑑 với mỗi lần lặp.Với điều kiện 𝑋=𝐵𝑥+𝑑 thỏa mãn điều kiện hội tụ của công thức

- Ưu điểm của phương pháp lặp đơn

1 Phù hợp với các hệ phương trình không tuyến tính: Phương pháp lặp đơn rất hiệu

quả khi áp dụng cho các hệ phương trình không tuyến tính mà các phương pháp đại số thông thường không thể giải quyết

2 Khả năng xấp xỉ chính xác: Phương pháp lặp đơn cho phép tìm kiếm nghiệm gần

đúng với độ chính xác cao thông qua nhiều vòng lặp, từ đó có thể điều chỉnh để tiếp cận nghiệm chính xác hơn qua mỗi bước lặp

3 Đơn giản và dễ hiểu: Các bước thực hiện của phương pháp lặp đơn khá đơn giản và dễ

áp dụng, giúp người dùng dễ dàng hiểu và thực hành mà không yêu cầu nhiều kiến thức sâu về toán học

2.Định nghĩa và công thức

- Công thức

Phương pháp lặp đơn được sử dụng để tìm nghiệm xấp xỉ cho phương trình phi tuyến tính F(x)= 0 Công thức lặp đơn cho phương trình phi tuyến tính được thể hiện như sau:

với:

+ X(n) là giá trị xấp xỉ tại bước lặp n

+ g(x) là hàm g được chọn sao cho g(x) = 0 có nghiệm trùng với nghiệm của phương trình F(x) = 0

Lựa chọn hàm g phù hợp là yếu tố quan trọng để đảm bảo phương pháp lặp đơn hội tụ và cho kết quả chính xác

- Cách áp dụng

X(n + 1) = g(X(n))

Trang 5

1 Cho phương trình 𝑓 (𝑥) = 0

2 Ấn định sai số 𝜀

3 Xác định khoảng phân ly nghiệm

4 Tìm hàm lặp hội tụ 𝝋(𝒙)

5 Chọn giá trị xấp xỉ đầu 𝑥0

6 Tính 𝑥𝑛 =𝜑(𝑥𝑛−1) với n=1, 2, 3 cho tới khi thì dừng

7 Kết quả: 𝛼 ≈ 𝑥𝑛 với sai số:

Trong đó q là số dương nhỏ hơn 1 thỏa mãn tại mọi x thuộc khoảng phân ly nghiệm

VD:

Trang 6

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

Gồm 2 dạng :

Chứng minh:

Giả sử là nghiệm cố định của phương trình , tức là Để phân tích sai số, ta cần xem xét sai số tuyệt đối giữa giá trị thực và giá trị gần đúng tại bước lặp thứ n

Sai số tại bước lặp thứ n được định nghĩa là:

Trang 7

Phương trình lặp cho phương pháp lặp đơn là:.

Sai số tại bước lặp thứ n+1 là:

Sử dụng khai triển Taylor của xung quanh x* , ta có:

với là một điểm nằm giữa và x*

Vì là nghiệm cố định, nên , do đó:

Thay vào biểu thức sai số, ta được:

Giả sử là hằng số, không đổi và nhỏ hơn 1 (để đảm bảo sự hội tụ của phương pháp lặp đơn), sai số tại bước lặp n + 1có thể được xấp xỉ bởi:

Như vậy, sai số tại bước lặp n có thể được đánh giá bằng công thức:

Điều này có nghĩa là sai số sẽ giảm theo cấp số nhân nếu ∣g′(x∗)∣<1, đảm bảo sự hội tụ của phương pháp lặp đơn

Trong thực tế, sai số có thể không giảm đều theo cấp số nhân do sự hiện diện của các hạng tử bậc cao hơn trong khai triển Taylor, nhưng công thức trên cung cấp một ước lượng gần đúng

và hữu ích về sự giảm sai số trong phương pháp lặp đơn

Trang 8

PHẦN II CODE GIẢI PHƯƠNG TRÌNH.

1.Giải thích code

1 Phương trình đa thức:

Chúng ta có một phương trình đa thức có bậc n:

2 Hàm ánh xạ phi:

Để tìm nghiệm của phương trình, chúng ta sử dụng hàm ánh xạ phi:

3 Tìm hệ số i thỏa mãn điều kiện:

Chương trình lặp qua các giá trị của i từ -100 đến 100 để tìm hệ số i sao cho giá trị tuyệt đối của đạo hàm ánh xạ phi tại điểm x có giá trị nhỏ hơn

4 Thuật toán tìm nghiệm:

Sau khi tìm được i, chúng ta lặp qua các giá trị của x bằng ánh xạ phi để tiến gần đến nghiệm với sai số mong muốn:

5 Dừng khi đạt sai số mong muốn:

Tiếp tục lặp cho đến khi:

2.Giải thích nguồn

#include <stdio.h>

#include <math.h>

Trang 9

// Hàm để nhập hệ số phương trình

void nhap_he_so ( double he_so[] , int bac ) {

for ( int i = 0 ; i <= bac; i ++ ) {

printf( "Nhap he so a[ %d ]: " , i) ;

scanf( " %lf " , & he_so[i]) ;

}

}

// Hàm để tính giá trị của đa thức tại x

double gia_tri_da_thuc ( double he_so[] , int bac , double ) {

double gia_tri = 0

int z = 0

for ( int i = bac; i >= 0 ; i ) {

gia_tri += he_so [z] * pow(x, i) ;

z ++ ;

}

return gia_tri;

}

// Hàm để tính giá trị của đạo hàm tại x

double gia_tri_dao_ham ( double he_so[] , int bac , double ) {

double gia_tri = 0

int z = 0

for ( int i = bac; i >= 0 ; i ) {

gia_tri += i * he_so [z] * pow(x, i - 1 )

z ++ ;

}

return gia_tri;

}

// Hàm để tính giá trị tuyệt đối của đạo hàm ánh xạ phi tại x

double gia_tri_dao_ham_phi ( double he_so[] , int bac , double x , double ) { double f_prime_x = gia_tri_dao_ham(he_so, bac, x) ;

return fabs( 1 - i * f_prime_x) ;

}

// Hàm để tìm giá trị tuyệt đối lớn nhất của đạo hàm ánh xạ phi trong khoảng [a, b]

double max_dao_ham_phi ( double he_so[] , int bac , double , double , double ) {

double max_val = 0

for ( double x = a; x <= b; x += 0.001 ) {

double val = gia_tri_dao_ham_phi(he_so, bac, x, i) ;

if (val > max_val) {

max_val = val;

}

Trang 10

}

return max_val;

}

// Hàm phi(x) = x - i * f(x)

double phi ( double he_so[] , int bac , double x , double ) {

return x - i * gia_tri_da_thuc(he_so, bac, x) ;

}

int main () {

int n;

double can_tren, can_duoi, gia_tri_ban_dau, sai_so;

printf( "Nhap vao bac của phuong trinh: " )

scanf( " %d " , & n) ;

double he_so [n + 1 ];

nhap_he_so(he_so, n) ;

printf( "Nhap can duoi: " )

scanf( " %lf " , & can_duoi) ;

printf( "Nhap can tren: " )

scanf( " %lf " , & can_tren) ;

printf( "Nhap gia tri ban dau x0: " ) ;

scanf( " %lf " , & gia_tri_ban_dau) ;

printf( "Nhap sai so: " )

scanf( " %lf " , & sai_so) ;

double i = 100 ;

int found = 0 ;

while (i <= 100 ) { // Giới hạn số vòng lặp để tránh chạy vô tận

double max_abs_derivative_phi = max_dao_ham_phi(he_so, n, can_duoi, can_tren, i) ;

if (max_abs_derivative_phi < 1 ) {

printf( "Tim thay anh xa voi i = %.1f co tri tuyet doi cua gia tri lon nhat cua dao ham bang %.2f be hon 1 \n " , i,max_abs_derivative_phi) ;

found = ;

break ;

}

i += 0.1 ;

}

if ( ! found) {

Trang 11

printf( "Khong tim duoc anh xa nao voi gia tri tuyet đoi cua đao ham nho hon 1 trong khoang i tu -100 đen 100 \n " ;

return ;

}

double x_n = gia_tri_ban_dau;

double x_n1;

int iteration = ;

while ( 1 ) {

x_n1 = phi(he_so, n, x_n, i) ;

printf( "vong lap %d : x(n) = %lf , x(n-1) = %lf , |x(n) - x(n-1)| = %lf \

n " , iteration, x_n1, x_n, fabs(x_n1 - x_n)) ;

if ( fabs(x_n1 - x_n) sai_so) {

printf( "da tim thay nghiem: x = %lf \n " , x_n1) ;

break ;

}

x_n = x_n1;

iteration ++ ;

if (iteration >= 1000 ) { // Giới hạn số vòng lặp để tránh chạy vô tận printf( "khong dat duoc sai so sau 100 vong lap \n " ;

break ;

}

}

return ;

}

1 Hàm nhap_he_so: Hàm này dùng để nhập hệ số của phương trình đa thức Nó lặp qua từng

hệ số và yêu cầu người dùng nhập giá trị cho mỗi hệ số

2 Hàm gia_tri_da_thuc: Hàm này tính giá trị của đa thức tại một giá trị x cho trước Nó sử

dụng hệ số và bậc của đa thức để tính toán giá trị

3 Hàm gia_tri_dao_ham: Hàm này tính giá trị của đạo hàm của đa thức tại một giá trị x cho

trước Nó cũng sử dụng hệ số và bậc của đa thức

4 Hàm gia_tri_dao_ham_phi: Hàm này tính giá trị tuyệt đối của đạo hàm ánh xạ phi tại một

giá trị x và một hệ số i Đạo hàm ánh xạ phi được tính bằng cách trừ i nhân với giá trị đạo hàm của đa thức

5 Hàm max_dao_ham_phi: Hàm này tìm giá trị tuyệt đối lớn nhất của đạo hàm ánh xạ phi

trong khoảng [a, b] với một hệ số i cho trước Nó lặp qua các giá trị x trong khoảng và tính giá trị tuyệt đối của đạo hàm ánh xạ phi

6 Hàm phi: Hàm này tính giá trị của hàm phi(x) = x - i * f(x), trong đó f(x) là giá trị của đa

thức tại x

7 Hàm main: Hàm chính của chương trình Nó yêu cầu người dùng nhập vào các thông số

như bậc của đa thức, hệ số, khoảng [a, b], giá trị ban đầu x0 và sai số Sau đó, nó tìm giá trị tuyệt đối lớn nhất của đạo hàm ánh xạ phi và tìm nghiệm của phương trình

PHẦN III CÁC VÍ DỤ.

Trang 12

1.Các ví dụ minh họa

1 Bộ 1: x^3 + x – 5 = 0

Khoảng phân li nghiệm: [1,2]

Giá trị đầu: 1

EPSILON: 0.0001

Nghiệm gần đúng: 1.515980

2 Bộ 2: x^4 – 3x + 1 = 0

Khoảng phân li nghiệm: [1,2]

Giá trị đầu: 1

EPSILON: 0.001

Nghiệm gần dúng: 1.307486

3 Bộ 3: x^3 + 3x^2 + 5 = 0

Khoảng phân li nghiệm: [-4,-3]

Giá trị đầu: -4

EPSILON: 0.00001

Nghiệm gần đúng: -3.425989

2 Ví dụ cụ thể:

x^3 + x – 5 = 0

Bước 1: Chuyển đổi phương trình về dạng

Chọn hàm g(x) sao cho phương trình trở thành dạng Một cách hợp lý là:

Bước 2: Kiểm tra điều kiện hội tụ

Đạo hàm của g(x) là:

Trong khoảng [1, 2], tính g′(x) và đảm bảo ∣g′(x)∣<1

Bước 3: Áp dụng phương pháp lặp cố định

Chọn giá trị ban đầu x0 = 1và lặp lại quá trình :

Trang 13

Ví dụ cụ thể:

Tiếp tục quá trình lặp đến khi sai số nhỏ hơn 0.0001, ta sẽ tìm được nghiệm gần đúng của phương trình Trong trường hợp này, nghiệm gần đúng là khoảng 1.515980

Ngày đăng: 16/11/2024, 15:27

w