1. Trang chủ
  2. » Công Nghệ Thông Tin

đồ án java - giải gần đúng phương trình , tìm hệ số hồi quy bằng phương pháp bình phương cực tiểu

21 2,7K 12

Đ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 21
Dung lượng 313,64 KB

Nội dung

giải gần đúng phương trình giải tích số, tìm hệ số hồi quy bằng pp bình phương cực tiểu

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN TOÁN ỨNG DỤNG & TIN HỌC

——————— * ———————

LẬP TRÌNH TÍNH TOÁN

ĐỒ ÁN I

Chuyên ngành: TOÁN TIN ỨNG DỤNG

Giảng viên hướng dẫn: Th.S NGUYỄN THÁI BÌNH Sinh viên thực hiện: NGUYỄN TUẤN ANH

Lớp: Toán Tin 2 - K55

HÀ NỘI 4 - 2014

Trang 2

NHẬN XÉT CỦA THẦY HƯỚNG DẪN

1 Mục đích và nội dung của đồ án:

2 Kết quả đạt được:

3 Ý thức làm việc của sinh viên:

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

Thầy hướng dẫn (Kí và ghi rõ họ tên)

NGUYỄN THÁI BÌNH

Trang 3

Mục lục

LỜI MỞ ĐẦU 4

1 Phần Mở Đầu 5 1.1 Đối tượng nghiên cứu 5

1.2 Mục đích nghiên cứu 5

1.3 Phương pháp nghiên cứu 5

1.4 Ý nghĩa 6

2 Ước lượng hệ số hồi quy dạng: Y = aX + b, sử dụng phương pháp bình phương cực tiểu 7 2.1 Bài toán 7

2.2 Giải thuật giải bài toán 7

2.3 Source code Java giải bài toán 8

2.4 Màn hình kết quả chạy chương trình 10

3 Tính nghiệm gần đúng 11 3.1 Bài toán: Viết chương trình tìm nghiệm gần đúng của chương trình 11

3.2 Giải thuật giải bài toán 12

3.3 Điều kiện hội tụ và sai số 13

3.4 Source code Java giải bài toán ( áp dụng cho hàm f(x) = x 5 − x − 1) 13

3.5 Màn hình kết quả chạy chương trình 18

3.5.1 So sánh kết quả 2 phương pháp và rút ra nhận xét 19

Trang 4

LỜI NÓI ĐẦUNgày này cùng với sự phát triển vượt bậc của khoa học kỹ thuật thì công nghệthông tin là một trong những lĩnh vực có nhiều đóng góp thiết thực nhất, côngnghệ thông tin có mặt trong hầu hết các lĩnh vực của cuộc sống đặc biệt công nghệthông tin là một công cụ hỗ trợ rất đắc lực trong việc giải các bài toán Chúng ta

dễ dàng thấy được việc đưa tin học vào trong các bài toàn giúp ta có thể giải bàitoán một cách nhanh chóng và chính xác

Java là một nền tảng phát triển các ứng dụng phần mềm có vị trí rất lớn trongnhững năm cuối thế kỉ 20, đầu thế kỉ 21 Đánh dấu sự trưởng thành của mô hìnhlập trình hướng đối tượng, nó được coi là một nền tảng mang tính cách mạng trongngành phần mềm Mô hình máy ảo Virtual Machine đã cho phép các ứng dụngviết bằng Java có thể chạy trên nhiều hệ điều hành khác nhau

Trong đồ án này,em dùng ngôn ngữ lập trình Java trên công cụ hỗ trợ Eclipse

để ứng dụng vào môn học giải tích số,cụ thể là áp dụng vào những bài toán sau:

“1.Ước lượng hệ số hồi quy dạng Y =aX + b, sử dụng phương pháp bình phương

cực tiểu ” và “Viết chương trình tính nghiệm gần đúng của phương trình bằng

phương pháp chia đôi và phương pháp tiếp tuyến

Do thời gian gấp rút, chưa có nhiều kinh nghiệm nên bài báo cáo khộng thểtránh những sai sót Mong thầy cô, bạn đọc góp ý để bài báo cáo được trọn vẹnhơn

Và cuối cùng em xin chân thành cảm ơn các thầy cô giáo trong viện đã chỉ dạy

em trong thời gian qua, đặc biệt thầy Nguyễn Thái Bình đã trực tiếp chỉ dẫn tậntình giúp đỡ em hoàn thành báo cáo này

Hà Nội, Ngày 25 tháng 4 năm 2014

Nguyễn Tuấn Anh

Trang 5

Chương 1

Phần Mở Đầu

1.1 Đối tượng nghiên cứu

Đề tài này em tập trung vào các nội dung:

• Tìm hiểu, nghiên cứu ngôn ngữ lập trình Java

• Tìm hiểu các dạng bài toán của môn giải tích số

• Tìm hiểu công cụ xây dựng chương trình

1.2 Mục đích nghiên cứu

Hiểu được cách xây dựng chương trình trong Java, các cấu trúc lớp, đối tượng,các hàm , các bước xây dựng chương trình giải bài toán thực tế trên máy tính.Biết cách sử dụng phần mềm Eclipse để ứng dụng giải các bài toán giải tích số

1.3 Phương pháp nghiên cứu

Dựa vào giáo trình giải tích số của thầy Lê Trọng Vinh kết hợp với sự mạnh mẽcủa ngôn ngữ Java, e đã xây dựng được chương trình giải bài toán trên công cụEclipse

Trang 6

1.4 Ý nghĩa

Chương trình sẽ giải được hầu hết các bài toán thông dụng, đồng thời cũng làtài liệu quý giá cho sinh viên rong việc học tập và nghiên cứu chuyên sâu sau này

Trang 7

Chương 2

Ước lượng hệ số hồi quy dạng: Y = aX + b,

sử dụng phương pháp bình phương cực tiểu

• Input: File data.txt với nội dung:

– Hàng 1: số phần tử n của X(hay của Y)

– Hàng 2: thông tin các giá trị của X

– Hàng 2: thông tin các giá trị của Y

• Output: màn hình Console hiển thị kết quả chương trình

2.2 Giải thuật giải bài toán

Trang 8

2.3 Source code Java giải bài toán

public class bai11_doan {

private static Scanner scan;

private static int n;

private static float [] x;

private static float [] y;

public static void main(String[] args) throws IOException {

scan = new Scanner( new FileInputStream( "D:\\data.txt" ));

y[i] = scan.nextFloat();

} for ( int i = 0;i<n;i++){

tongx = tongx +x[i];

tongy = tongy +y[i];

//tichxy = x[i]*y[i];

tongtichxy = tongtichxy + x[i]*y[i];

Trang 9

tongxbinhphuong = tongxbinhphuong + x[i]*x[i]; }

float tby = tongy/n;

float a = (tongtichxy - n*tbx*tby)/(tongxbinhphuong

- n*tbx*tbx);

float b = tby - a*tbx;

System.out.println( "trung binh cua x[i] = " +tbx); System.out.println( "trungbinh cua y[i] = " +tby); System.out.println( "tong cua cac tich x[i]*y[i] =

Trang 10

2.4 Màn hình kết quả chạy chương trình

Trang 11

Chương 3

Tính nghiệm gần đúng

3.1 Bài toán: Viết chương trình tìm nghiệm gần đúng

của chương trình.

Bài toán 1: phương pháp chia đôi

Đề bài: Viết chương trình tìm nghiệm gần đúng bằng phương pháp chia đôi

• Input: hàm F(x), đạo hàm F’(x), khoảng phân li nghiệm [a b]

• Output: nghiệm của chương trình

Bài toán 2: phương pháp tiếp tuyến

Đề bài: Viết chương trình tìm nghiệm gần đúng bằng phương pháp tiếp tuyến

• Input: hàm F(x), đạo hàm F’(x),đạo hàm F”(x), khoảng phân li nghiệm [a b]

• Output: nghiệm của chương trình

Trang 12

3.2 Giải thuật giải bài toán

Ý tưởng

Dựa vào sự hội tụ của khoảng phân li nghiệm [a b] để tìm nghiệm gần đúng.Giải sơ bộ: Đi tìm một khoảng đủ bé để chứa nghiệm

• Vây nghiệm: Tìm đoạn bé chưa các nghiệm

• Tách nghiệm: Tách các đoạn bé, mỗi đoạn chỉ chứa một nghiệm

Giải kiện toàn: Giải nghiệm với độ chính xác epsilon cần thiết

Giải thuật

Giải thuật phương pháp chia đôi

Giả sử hàm số f(x) liên tục trên đoạn [a, b] và f(a).f(b) < 0 Chia [a b] thành haiphần bởi điểm giữa c = (a + b)/2

• Nếu f(c) = 0 thì nghiệm là x = c

• Nếu f(c) 0 thì chọn [a c] hoặc [c b] mà giá trị hàm tại hai đâu trái dấu và kí

hiệu [a1 b1] Đối với [a1 b1] lại tiến hành như [a b]

Giải thuật phương pháp tiếp tuyến

Chọn x0 ∈ khoảng nghiệm [a b]

Tiếp tuyến tại A0(x0,f(x0)) cắt trục x tại hoành độ x1

Tiếp tuyến tại A1(x1,f(x1)) cắt trục x tại hoành độ x2 ,

Tiếp tuyến tại Ak(xk,f(xk)) cắt trục x tại hoành độ xk, ,

Trang 13

Cứ tiếp tục quá trình trên ta có thểtiến dần đến nghiệm µ của phương trình.Phương trình tiếp tuyến tại Ak(xk,f(xk)): y - f(xk) = f’(xk)*(x - xk)

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

Do vậy: 0 - f(xk) = f’(xk)*(xk + 1 - xk) => xk+ 1 = xk - f (xk )

f 0 (x k )

3.3 Điều kiện hội tụ và sai số

Phương pháp chia đôi

Giả sử [ak bk] là khoảng phân li nghiệm sau k lần lặp Nếu |ak - bk| < epsiloncho trước thì nghiệm gần đúng của phương trình là c = (ak + bk)/2

Phương pháp tiếp tuyến

Giả sử [a,b] là khoảng nghiệm của phương trình f(x) = 0 Đạo hàm f’(x), f”(x)liên tục, không đổi dấu, không tiêu diệt trên [a,b] Khi đó ta chọn xấp xỉ nghiệmban đầu x0 ∈ [a,b] sao cho f(x0))*f”(x0) > 0 thì quá trình lặp sẽ hội tụ đến nghiệm

3.4 Source code Java giải bài toán

( áp dụng cho hàm f(x) = x5 − x − 1)

Code tìm nghiêm gần đúng bằng phương pháp chia đôi

package doan;

import java.util.*;

public class bai1 {

static float ex=( float ) 0.001;

private static float ham( float x){

return x*x*x*x*x - x -1;

Trang 14

Scanner input = new Scanner(System.in);

System.out.println( "moi nhap a va b :" );

if (kiemtra(a,b)==0){

b=c;

c=(a+b)/2;

Trang 15

} else stop=1;

} else {

if (kiemtra(a,b)==0){

a=c;

c=(a+b)/2;

} else stop=1;

} }

}

Code tìm nghiêm gần đúng bằng phương pháp tiếp tuyến

package doan;

import java.util.*;

public class bai1_b {

static float ex=( float ) 0.001;

private static float ham( float x){

Trang 16

Scanner input = new Scanner(System.in);

System.out.println( "moi nhap a va b :" );

tg =b;

}

if (Math.abs(DaoHam1(a)) <

Math.abs(DaoHam1(b))) {

m1=Math.abs(DaoHam1(a));

Trang 17

} else {

m2 = Math.abs(DaoHam2(b));

} int i = 0;

}

}

else {

Trang 18

System.out.println( " \n a va b khong phai la khoang phan li nghiem,moi nhap lai" ); }

}

}

3.5 Màn hình kết quả chạy chương trình

Kết quả phương pháp chia đôi

Trang 19

Kết quả phương pháp tiếp tuyến

Phương pháp chia đôi

Ưu điểm của phương pháp chia đôi là thuật toán đơn giản do đó dễ lập trình.Tuy nhiên do phương pháp chia đôi sử dụng rất ít thông tin về hàm f(x) nên tốc độhội tụ khá chậm và chỉ sử dụng để giải sơ bộ phương trình

Phương pháp tiếp tuyến

Tuy thuật toán phương pháp tiếp tuyến phức tạp hơn so với thuật toán phươngpháp chia đôi, đòi hỏi phải tính đạo hàm f’(x), nhưng lại tỏ ra hiệu quả hơn, vònglặp ít hơn do tốc độ hội tụ nghiệm nhanh, hiệu quả trong việc giải các phương trìnhphức tạp

Trang 20

3.6 Kết luận

Trang 21

Tài liệu tham khảo

[1] Họ và tên tác giả, năm, Tên sách NXB [2] Họ và tên tác giả, năm, Tên sách NXB [3] Họ và tên tác giả, năm, Tên sách NXB [4] Họ và tên tác giả, năm, Tên sách NXB [5] Họ và tên tác giả, năm, Tên sách NXB.

Ngày đăng: 07/05/2014, 15:01

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Họ và tên tác giả, năm, Tên sách NXB Sách, tạp chí
Tiêu đề: Tên sách
[2] Họ và tên tác giả, năm, Tên sách NXB Sách, tạp chí
Tiêu đề: Tên sách
[3] Họ và tên tác giả, năm, Tên sách NXB Sách, tạp chí
Tiêu đề: Tên sách
[4] Họ và tên tác giả, năm, Tên sách NXB Sách, tạp chí
Tiêu đề: Tên sách
[5] Họ và tên tác giả, năm, Tên sách NXB Sách, tạp chí
Tiêu đề: Tên sách

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w