NGÔN NGỮ LẬP TRÌNH FORTRAN VÀ ỨNG DỤNG TRONG KHÍ TƯỢNG THỦY VĂN

112 15 0
NGÔN NGỮ LẬP TRÌNH FORTRAN VÀ ỨNG DỤNG TRONG KHÍ TƯỢNG THỦY VĂN

Đ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

Tham khảo sách ''ngôn ngữ lập trình fortran và ứng dụng trong khí tượng thủy văn'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

NGƠN NGỮ LẬP TRÌNH FORTRAN VÀ ỨNG DỤNG TRONG KHÍ TƯỢNG THỦY VĂN Phạm Văn Huấn NXB Nông nghiệp Hà Nội - 2005 Từ khóa: Ngơn ngữ, lập trình, Fortran, thuật giải, giả trình, lưu đồ, khai báo, hằng, biến, file, lệnh, tuần tự, rẽ nhánh, lặp, chương trình con, thủ tục, hàm Tài liệu Thư viện điện tử Trường Đại học Khoa học Tự nhiên sử dụng cho mục đích học tập nghiên cứu cá nhân Nghiêm cấm hình thức chép, in ấn phục vụ mục đích khác khơng chấp thuận nhà xuất tác giả ĐẠI HỌC QUỐC GIA HÀ NỘI PHẠM VĂN HUẤN NGƠN NGỮ LẬP TRÌNH FORTRAN VÀ ỨNG DỤNG TRONG KHÍ TƯỢNG THỦY VĂN NHÀ XUẤT BẢN NÔNG NGHIỆP – 2005 MỤC LỤC Giới thiệu Chương - Khái niệm lập trình máy tính để giải tốn ứng dụng 1.1 Phần cứng phần mềm máy tính 1.2 Thực chương trình máy tính 1.3 Quy trình giải tốn máy tính 1.4 Những chương trình Fortran hoàn chỉnh 10 1.5 Quy cách soạn thảo chương trình Fortran 11 Chương - Những yếu tố Fortran 12 2.1 Dữ liệu cách biểu diễn liệu Fortran 12 2.2 Hằng biến 13 2.2.1 Tên biến tên 13 2.2.2 Mô tả (khai báo) kiểu biến kiểu 14 2.3 Biến có số (mảng) 16 2.3.1 Khái niệm mảng 16 2.3.2 Mô tả mảng 17 2.4 Các hàm chuẩn 17 2.5 Lệnh gán toán tử số học 18 2.5.1 Lệnh gán 18 2.5.2 Các phép tính số học đơn giản 19 2.5.3 Ước lượng biểu thức số học 19 2.5.4 Khái niệm cắt phép tính hỗn hợp 20 2.5.5 Khái niệm số bé số lớn (underflow overflow) 20 Chương - Nhập xuất liệu đơn giản 22 3.1 Các lệnh xuất nhập liệu 22 3.2 Các đặc tả lệnh FORMAT 24 Chương - Các cấu trúc điều khiển 27 4.1 Khái niệm cấu trúc thuật toán 27 4.1.1 Các thao tác Giả trình lưu đồ 27 4.1.2 Các cấu trúc tổng quát thuật giải 28 4.1.3 Thí dụ ứng dụng thuật tốn cấu trúc 28 4.2 Cấu trúc IF lệnh tương ứng 29 4.2.1 Biểu thức lôgic 29 4.2.2 Lệnh IF lôgic 30 4.2.3 Lệnh IF số học 32 Chương - Cấu trúc lặp với lệnh DO 44 5.1 Vòng lặp DO 44 5.1.1 Cú pháp lệnh DO vòng lặp DO 44 5.1.2 Những quy tắc cấu trúc thực vòng lặp DO 45 5.1.3 Thí dụ ứng dụng vòng lặp DO 46 5.2 Vòng DO lồng 47 Chương - File liệu tổ chức file liệu Fortran 51 6.1 Khái niệm file liệu tổ chức lưu trữ liệu 51 6.2 Các lệnh nhập, xuất liệu với file 52 6.3 Kỹ thuật đọc file liệu 54 6.3.1 Số dòng ghi định 54 6.3.2 Dòng ký hiệu kết thúc liệu 55 6.3.3 Sử dụng tuỳ chọn END 56 6.4 Tạo lập file liệu 58 6.5 Kỹ thuật trợ giúp tìm lỗi chương trình 58 Chương - Sử dụng biến có số Fortran 60 7.1 Mảng chiều 61 7.2 Lệnh DATA 62 7.3 Mảng hai chiều 62 7.3 Mảng nhiều chiều 64 7.4 Những điều cần ý sử dụng mảng 67 Chương - Chương trình loại hàm 70 8.1 Các hàm chuẩn 70 8.2 Các hàm chương trình 71 8.2.1 Hàm lệnh 71 8.2.2 Hàm chương trình 72 8.3 Chỉ dẫn gỡ rối phong cách viết chương trình có hàm 76 Chương - Chương trình loại thủ tục 78 9.1 Khai báo gọi chương trình thủ tục 78 9.2 Những thí dụ ứng dụng chương trình thủ tục 79 9.3 Những dẫn gỡ rối sử dụng thủ tục 83 Chương 10 - Kiểu liệu văn 85 10.1 Tập ký tự Fortran 85 10.2 Các dạng khai báo biến ký tự 85 10.3 Nhập, xuất liệu ký tự 86 10.4 Những thao tác với liệu ký tự 86 10.4.1 Gán giá trị ký tự 86 10.4.2 So sánh giá trị ký tự 87 10.4.3 Trích xâu 88 10.4.4 Kết hợp xâu ký tự 88 10.4.5 Những hàm chuẩn xử lý xâu ký tự 89 Chương 11 - Những đặc điểm bổ sung file 94 11.1 Các file nội (Internal Files) 94 11.2 Các file truy nhập (Sequential Files) 95 11.3 Các file truy cập trực tiếp (Direct-Access Files) 97 11.4 Lệnh truy vấn INQUIRE 98 Tài liệu tham khảo 101 Phụ lục 1: Bảng hàm chuẩn FORTRAN 102 Phụ lục 2: Phương pháp Gauss giải hệ phương trình đại số tuyến tính 104 Phụ lục 3: Phương pháp bình phương nhỏ phân tích hồi quy 108 Phụ lục 4: Sơ đồ ứng dụng phương pháp hồi quy nhiều biến 110 Giới thiệu Giáo trình “Ngơn ngữ lập trình Fortran ứng dụng khí tượng thủy văn” tập hợp học sở lập trình mà tác giả dạy số năm gần cho sinh viên ngành khí tượng học, thủy văn hải dương học Trường đại học Khoa học Tự nhiên, Đại học Quốc gia Hà Nội Sách nhằm giới thiệu cho sinh viên lần học lập trình khái niệm lập trình máy tính, tóm tắt yếu tố lệnh thông dụng, đặc điểm sử dụng chúng ngơn ngữ lập trình Fortran Mục tiêu cuối giúp sinh viên làm quen với phương pháp xây dựng thuật giải toán thơng dụng tốn học tính tốn, thống kê tốn học xử lý số liệu, rèn luyện kỹ lập trình để giải tốn xử lý phân tích số liệu, tính tốn ứng dụng mức độ ban đầu thời gian học tập nghiên cứu trường đại học Những thí dụ hệ thống tập tự luyện sách có ý nghĩa minh họa, hướng sinh viên tới vận dụng lệnh Fortran để viết chương trình ứng dụng nho nhỏ có tính cụ thể, bước đầu làm quen với đặc thù xử lý liệu quan trắc chun mơn khí tượng thủy văn Những đặc điểm khác nội dung ứng dụng lập trình chuyên ngành quản lý sở liệu, phương pháp thống kê đại, phương pháp giải số trị tốn động lực khí quyển, đại dương chưa đề cập khuôn khổ kiến thức chuyên môn người học, đối tượng mơn học chun đề khác chương trình học tập, từ đến thực khơng xa Vì tài liệu học tập lập trình sở, nội dung ngơn ngữ sách không bao quát hết yếu tố giới to lớn Fortran Nên bắt đầu đơn giản việc Một người học bắt đầu biết lập trình, thấy ứng dụng máy tính có ích học tập nghiên cứu nảy sinh nhu cầu tìm hiểu khai thác Fortran nhiều tài liệu tra cứu sách chuyên khảo khác hệ thống trợ giúp sẵn có Fortran Như vậy, sách không tài liệu học tập cho sinh viên chun mơn khí tượng thủy văn, mà có ích cho sinh viên, học viên cao học nhiều chuyên ngành khác muốn tự học lập trình máy tính cách nhẹ nhàng Trong sách này, chương cấu tạo học Mỗi chuyên từ, khái niệm xuất lần đầu in nghiêng, câu lệnh in chữ hoa đậm bao hộp để giúp người đọc thuận tiện tra cứu chưa thuộc tả câu lệnh Những thí dụ minh họa chọn lọc cho đơn giản, có tính điển hình, giúp người đọc liên tưởng đến lớp tốn khác sử dụng cách giải Chương trình thí dụ quán áp dụng ý tưởng chia để trị, tức phân nhiệm vụ lớn thành việc nhỏ để thực việc dẫn tới kết cuối Với cách trình bày này, bạn đọc thấy lập trình khơng cịn rắc rối, khó hiểu, mà tự nhiên ta giải tốn khơng máy tính Những tóm tắt kinh nghiệm gỡ rối lời khuyên rèn luyện phong cách lập trình học có ích cho người học Và lời khuyên cho người học lập trình: Hãy ln tưởng tượng xem phải giải toán “bằng tay” trước bắt đầu nghĩ cách viết chương trình máy tính Hãy nhớ lấy tả, cú pháp câu lệnh việc khơng khó, lệnh Fortran giống câu tiếng Anh đơn giản Nhưng ý tới điều đơn giản, thí dụ nhìn dịng lệnh sau PRINT * , danh sách mục cần in cố gắng đọc kĩ hay hỏi lại xem danh sách, mục in, mục in Tác giả Chương - Khái niệm lập trình máy tính để giải tốn ứng dụng 1.1 Phần cứng phần mềm máy tính đích Những chương trình thực thao tác chung, thường nhiều người sử dụng gọi phần mềm công cụ Hệ điều hành tập hợp chương trình giúp người dùng giao tiếp với máy tính Hệ điều hành tạo môi trường thuận tiện cho người dùng “giao tiếp” với máy tính, thực chương trình ứng dụng biên dịch ngôn ngữ lập trình, phần mềm cơng cụ Hệ điều hành gồm số chương trình cho phép thao tác với file in, chép, hiển thị danh sách file Những hệ điều hành đại Windows giúp máy tính nhận biết quản lý cơng việc nhiều thiết bị ngoại vi nối kèm với máy tính thiết bị nhập, xuất liệu, hình, máy in, máy quét ảnh, loa, máy quan trắc chuyên dụng Máy tính thiết kế để thực thao tác tuân theo tập câu lệnh người dùng viết ra, gọi chương trình Các máy tính có cấu tạo chung bên hình 1.1 Người dùng sử dụng bàn phím, chuột thiết bị nhập liệu khác để đưa thơng tin vào máy tính Bộ xử lý (processor) phần máy tính kiểm sốt tất phần khác Bộ xử lý nhận liệu vào lưu chúng nhớ (memory) Nó nhận biết lệnh chương trình Nếu ta muốn cộng hai giá trị, xử lý lấy hai giá trị từ nhớ gửi đến khối xử lý số học lôgic (ALU) Khối thực phép cộng xử lý lưu kết vào nhớ Trong xử lý, xử lý khối số học lôgic sử dụng lượng nhớ nhỏ gọi nhớ (internal memory) Phần lớn liệu lưu nhớ (external memory) đĩa cứng, đĩa mềm, chúng nối với xử lý Bộ xử lý, nhớ ALU gọi chung khối xử lý trung tâm hay CPU Trong chương trình, ta thường lệnh cho máy tính in kết tính tốn lên hình hay máy in nối với máy tính thiết bị xuất liệu Phần mềm chứa dẫn lệnh mà ta muốn máy tính thực Phần mềm viết nhiều ngôn ngữ cho nhiều mục External memory Internal memory Input Processor Output ALU CPU Hình 1.1 Sơ đồ khối máy tính Thơng thường chuyên gia lập chương trình viết nhiều chương trình để máy tính thực hiện, từ chương trình đơn giản để giải tốn nhỏ, tính tốn vài giá trị, đến chương trình đồ sộ xử lý thơng tin phức tạp, thơng minh, giải tốn khoa học kĩ thuật lớn, chế văn bản, thiết kế đồ họa, chương trình nghe nhạc, xem phim, trị chơi, truy cập Internet Những chương trình tương đối lớn phức tạp thường gọi phần mềm Người dùng máy tính sử dụng chương trình Ngày có cảm giác máy tính làm tất việc Tuy nhiên, phải nhớ tất máy tính làm làm việc theo chương trình người tạo 1.2 Thực chương trình máy tính Thực chương trình máy tính thường cịn gọi tắt chạy chương trình Khi người dùng máy tính muốn làm việc đó, thí dụ giải tốn, người dùng phải viết chương trình máy thực Người lập trình thường viết chương trình máy tính ngơn ngữ bậc cao với câu lệnh giống câu tiếng Anh, dễ học sử dụng Ngôn ngữ Fortran thuộc loại Mỗi bước ta muốn máy tính thực phải mơ tả theo cú pháp ngôn ngũ đặc thù (language syntax) Tuy nhiên, chương trình ta viết phải chương trình chuyên (bộ biên dịch - compiler) dịch thành ngơn ngữ máy máy tính hiểu thực Khi compiler dịch dòng lệnh ta viết, tự động tìm lỗi dịch, hay lỗi cú pháp (syntax error), tức lỗi tả, dấu phân cách Nếu chương trình viết có lỗi dịch, biên dịch thơng báo để người viết chương trình sửa Sau sửa hết lỗi, ta chạy lại chương trình bước dịch Một dịch xong, chương trình soạn thảo liên kết (linkage editor program) thực việc hoàn tất sẵn sàng cho bước thực Chính bước lệnh ta viết thực máy tính Lỗi chương trình xuất bước này, gọi lỗi chạy chương trình (runtime error) hay lỗi lơgic Những lỗi khơng liên quan tới cú pháp lệnh, mà liên quan tới lôgic lệnh, lộ máy tính thực thi câu lệnh Thí dụ, lệnh X = A/ B câu lệnh đúng, bảo máy tính lấy A chia cho B gọi kết X Tuy nhiên, giả sử B không, phép tính chia cho số khơng phép tính sai, khơng có nghĩa ta thơng báo lỗi chạy chương trình Các lỗi lơgic khơng phải thơng báo Thí dụ, chương trình thay chia số cho 0.10 ta viết thành nhân với 0.10, chạy chương trình chẳng có lỗi thơng báo, đáp số tốn, tức kết mà ta mong đợi, sai 1.3 Quy trình giải tốn máy tính Nhìn chung cơng việc giải tốn máy tính gồm năm bước sau: 1) Phát biểu toán cách rõ ràng 2) Mô tả thông tin nhập vào xuất 3) Giải toán tay tập liệu đơn giản 4) Phát triển cách giải toán thành dạng tổng quát 5) Kiểm tra đáp số với nhiều tập liệu khác Bây ta minh họa năm bước qua thí dụ tốn tính giá trị trung bình tập số liệu thực nghiệm Bước 1: Ta phát biểu toán cách rõ ràng sau: “Tính trị số trung bình tập giá trị số liệu thực nghiệm” Bước 2: Chỉ cụ thể số liệu vào gì, hình thức Nếu có tờ ghi số giá trị số liệu, đòi hỏi nhập vào máy qua bàn phím, hết số liệu gõ giá trị 0.0 để báo hết, sau tính trị số trung bình in kết trị số trung bình Vậy phải mơ tả bước sau: “Đầu vào chuỗi giá trị số thực khác không Đầu giá trị trung bình, số thực in hình” Giả sử đầu vào số số liệu ghi vào tệp (file) ổ cứng, quy cách ghi có đặc điểm định, bước mơ tả vào hồn tồn khác cách giải khác Khi ta phải mô tả rõ cách thức số liệu ghi file Thí dụ, ta mơ tả liệu đầu vào đầu sau: Dữ liệu đầu vào chuỗi số thực ghi file văn có tên SOLIEU.DAT với quy cách ghi sau: dòng ghi số nguyên số phần tử chuỗi, dòng tiếp sau ghi số thực, số dòng Bước 3: Dùng máy tính tay tính thử với tập đơn giản gồm năm số liệu: thí dụ: Thứ tự Giá trị Trung bình = 23.43 37.43 34.91 28.37 30.62 30.95 Tập số liệu kết dùng để kiểm tra bước Bước 4: Trong bước ta khái quát lại thao tác cần làm bước Tuần tự thao tác để dẫn đến giải tốn thuật giải hay thuật tốn (algorithm) Ta mô tả từ đầu đến cuối trình giải Chia trình thành số khối liệt kê khối Sau chương trình máy tính thực khối chia Trong khối ta lại chi tiết hóa thêm đến mức chuyển thành lệnh máy tính Vậy áp dụng hai phương pháp: phân khối chi tiết hoá khối Với toán xét, trường hợp liệu đầu vào cần nhập từ bàn phím, ta chia thành ba khối: - Nhập giá trị số lấy tổng chúng - Chia tổng cho số giá trị - In trị số trung bình Cụ thể hố khối dẫn tới giả trình chương trình sau: Cho tổng giá trị không Cho số số liệu vào không Nhập vào giá trị kiểm tra chừng giá trị nhập vào cịn khác số 0.0 thì: - Cộng thêm giá trị vào tổng - Cộng thêm vào số số liệu Chia tổng cho số số liệu để giá trị trung bình In giá trị trung bình Vì thuật giải mơ tả chi tiết, ta chuyển thuật giải thành chương trình sau: PROGRAM TGTTB INTEGER DEM REAL X, TONG, TB TONG = 0.0 DEM = READ*, X IF (X NE 0.0) THEN TONG = TONG + X DEM = DEM + GOTO END IF TB = TONG / REAL(DEM) PRINT 6, TB FORMAT (1X, 'TRUNG BINH BANG ' , F6.2) STOP END Bước 5: Trong bước ta thử chạy chương trình viết với tập số liệu thử cách tính tay mục Đầu hình máy tính phải sau: TRUNG BINH BANG 30.95 Ngồi ra, ta chạy thử với số tập số liệu khác để tin vào tính đắn lơgic hồn hảo chương trình xây dựng Những khái niệm thuật giải giả trình có ý nghĩa quan trọng Cách giải, phương pháp giải tốn thuật giải Các tốn khoa học kĩ thuật thực máy tính thường có thuật giải phương pháp tốn học khoa học chuyên ngành mà người lập trình biết Một số nhiệm vụ, tốn khác có cách giải xuất phát từ kinh nghiệm thực tế, từ cách suy nghĩ lôgic thường ngày Thí dụ, giải phương trình bậc hai a x + bx + c = máy tính, ta tính giá trị biệt thức Δ Sau tùy giá trị Δ là: Δ < phương trình vơ nghiệm, Δ = phương trình có nghiệm kép Δ > phương trình có hai nghiệm riêng biệt mà đưa thơng báo kết Trong thí dụ này, thuật toán phương pháp quen thuộc mà học đại số Một thí dụ khác: Có danh sách sinh viên với điểm mơn thi Sắp xếp lại danh sách cho người có điểm thi cao dịng Ta làm sau: Tạm thời xem người thứ người đứng đầu danh sách Dùng ngón tay trỏ dõi theo người cịn lại, kể từ người thứ hai hết danh sách, có điểm thi cao chuyển người lên đầu danh sách người đầu danh sách chuyển xuống chỗ người vừa thay Kết ta danh sách với người có điểm thi cao dòng đầu Nhưng từ dòng thứ hai đến dịng cuối danh sách thứ tự lộn xộn Bây ta việc xếp lại từ dòng thứ hai trở Ta theo dõi từ người thứ ba người cuối cùng, có điểm thi cao đưa lên dịng thứ hai người dòng thứ hai bị đưa xuống dòng người vừa thay Kết người dòng thứ hai danh sách người có điểm thi cao thứ nhì Nhưng từ dịng thứ ba đến cuối danh sách lộn xộn Tiếp tục, ta phải xếp lại danh sách kể từ dòng thứ ba theo cách Lặp lại công việc dòng trước dòng cuối cùng, ta danh sách hoàn chỉnh xếp theo thứ tự giảm dần điểm thi Ta thấy, trường hợp thuật giải tốn cách mà thường làm thực tế đời sống phải xếp lại danh sách theo thứ tự khơng dùng máy tính Và cách làm “bằng tay” áp dụng làm thuật toán cho loại toán xếp máy tính Chúng tơi giới thiệu chi tiết hai thí dụ vừa cốt để sinh viên ý thức tư thuật giải, suy nghĩ cách giải bước quan trọng bắt tay vào xây dựng chương trình máy tính Có xác định thuật giải nói đến việc lập chương trình để giải tốn máy tính Cịn giả trình giống lời dẫn phương pháp, cách giải cho thực bước thuật giải toán để dẫn tới kết Chỉ định ERR tuỳ chọn có giá trị để xử lý lỗi Nếu lỗi xảy thực lệnh OPEN hay lệnh có chứa định chương trình chuyển điều khiển tới lệnh có nhãn ghi định ERR thay tạo lỗi thực chương trình Chỉ định ERR dùng với lệnh READ WRITE • Lệnh CLOSE lệnh thực hiện, ngắt file ngoại khỏi chương trình Dạng tổng quát sau: chuyển vị trí đọc ngược lại phía trước ghi file • Lệnh ENDFILE ENDFILE (UNIT = Biểu thức nguyên, * IOSTAT = Biến nguyên, * ERR = Nhãn lệnh điều khiển) ghi vào file ghi kết thúc file file tạo CLOSE (UNIT = Biểu thức nguyên, * STATUS = Biểu thức ký tự, 11.3 Các file truy cập trực tiếp (Direct-Access Files) * IOSTAT = Biến nguyên, * ERR = Nhãn lệnh chuyển điều khiển) Các ghi file truy cập trực tiếp truy cập không theo cách tuần tự, mà theo thứ tự định chương trình Khi file trực tiếp mở, định ACCESS lệnh OPEN phải đặt ‘DIRECT’ độ dài ghi phải cho với định RECL Các lệnh READ WRITE phải chứa định REC để cung cấp số hiệu ghi cần truy cập Lệnh CLOSE định tuỳ chọn Chỉ định STATUS lệnh CLOSE có giá trị ‘KEEP’ có nghĩa file giữ lại, ‘DELETE’ có nghĩa file khơng cần nên xóa • Lệnh REWIND REWIND (UNIT = Biểu thức nguyên, * IOSTAT = Biến nguyên, * ERR = Nhãn lệnh điều khiển) Dạng tổng quát lệnh READ WRITE với file truy cập trực tiếp sau: READ (Số hiệu file, nhãn lệnh FORMAT, * dùng để chuyển vị trí ghi thứ file • Lệnh BACKSPACE BACKSPACE (UNIT = Biểu thức nguyên, * IOSTAT = Biến nguyên, * ERR = Nhãn lệnh điều khiển) REC = Biểu thứ nguyên) Danh sách biến WRITE (Số hiệu file, nhãn lệnh FORMAT, * REC = Biểu thức nguyên) Danh sách biến Biểu thức nguyên định REC dùng để số hiệu ghi cần xử lý Các định ERR IOSTAT sử dụng với lệnh READ WRITE trực tiếp Tuỳ chọn END dùng với lệnh READ Khi tổ chức file truy cập trực tiếp, người ta thường sử dụng số thứ 97 tự số hiệu phân biệt - phần ghi làm số hiệu ghi Thí dụ số hiệu phân biệt sinh viên trường đại học thường bắt đầu 00001 đến 00002 Do thơng tin sinh viên số 00210 lưu ghi 210 Đơi thực số tính tốn với trường ghi để nhận số hiệu Bảng 11.1 Các định truy vấn lệnh INQUIRE Kiểu biến Giá trị truy vấn file FILE Giá trị truy vấn đơn vị file UNIT ACCESS = CHARACTER 'SEQUENTIAL' 'DIRECT' 'SEQUENTIAL' 'DIRECT' BLANK = CHARACTER 'NULL' 'ZERO' DIRECT = CHARACTER 'YES' 'NO' 'NULL' 'ZERO' _ ERR = INTEGER Số hiệu lệnh xử lý lỗi Số hiệu lệnh xử lý lỗi EXIST = LOGICAL TRUE .FALSE .TRUE .FALSE FORM = CHARACTER FORMATTED = CHARACTER IOSTAT = INTEGER NAME = CHARACTER − NAMED + = LOGICAL _ INQUIRE (FILE = biểu thức ký tự, danh sách định truy vấn) NEXTREC = INTEGER INQUIRE (UNIT = biểu thức nguyên, danh sách định truy vấn) NUMBER + = INTEGER File truy cập trực tiếp thường tạo cách ghi thông tin vào cách tuần tự, với ghi bắt đầu tăng lên lần có ghi viết vào File xử lý theo thứ tự cách thay đổi số hiệu ghi từ đến tổng số tất ghi Tuy nhiên, ưu điểm file trực tiếp thể rõ muốn cập nhật thông tin số ghi file Thay đọc ghi cách tuần tự, tìm ghi mà ta muốn cập nhật, ta cần định số hiệu ghi ghi tự động xử lý Khi cập nhật thơng tin xong, ta ghi thơng tin vào ghi Nếu lệnh READ ta định số hiệu ghi mà ghi khơng tồn xảy lỗi Để khơi phục lỗi, định ERR cần phải có mặt lệnh READ Chỉ định truy vấn 'FORMATTED' 'FORMATTED' 'UNFORMATTED' 'UNFORMATTED' 'YES' 'NO' 'UNKNOWN' − Mã lỗi Mã lỗi 11.4 Lệnh truy vấn INQUIRE Lệnh INQUIRE có hai dạng: Lệnh lệnh thực hiện, truy vấn thơng tin file hay số hiệu file Bảng 9.1 liệt kê định truy vấn Thí dụ: INQUIRE (FILE = 'TSDATA', SEQUENTIAL = TRALOI) INQUIRE (UNIT = 12, SEQUENTIAL = TRALOI) Số hiệu ghi file truy cập trực tiếp Đơn vị file Số hiệu ghi file truy cập trực tiếp TRUE .FALSE OPEND = LOGICAL TRUE .FALSE RECL = INTEGER Độ dài ghi SEQUENTIAL = CHARACTER UNFORMATTED = CHARACTER Tên file file khơng phải file loại scratch TRUE .FALSE 'YES' 'NO' 'UNKNOWN' 'YES' 'NO' 'UNKNOWN' − Độ dài ghi − − 98 Thí dụ 36: Sự tương tác người dùng chương trình Giả sử chương trình yêu cầu người dùng gõ tên file liệu để mở làm việc chương trình Trường hợp file khơng tồn tại, chương trình kết thúc lỗi thực Nếu ta dùng lệnh INQUIRE, chương trình xác định file có tồn khơng khơng tồn tại, chương trình nhắc người dùng gõ tên file khác Các lệnh sau thực tương tác này: CHARACTER *70 TENFIL, TIT LOGICAL XONG, OK, CO XONG = FALSE OK = FALSE PRINT *, 'NHAP TEN FILE' READ *, TENFIL IF (.NOT XONG) THEN INQUIRE (FILE = TENFIL, EXIST = CO) IF (.NOT CO) THEN PRINT *, 'FILE KHONG TON TAI' PRINT *, 'NHAP TEN KHAC HOAC GO THOI' READ *, TENFIL IF (TENFIL EQ 'THOI') XONG = TRUE ELSE XONG = TRUE OK = TRUE ENDIF GOTO ENDIF IF (OK) THEN OPEN (UNIT = 10, FILE = TENFIL, STATUS = 'OLD') END IF END Bài tập Viết chương trình đếm in số ghi file DATA1 DATA2 Giả sử file file ghi chứa hai giá trị thực với format sau: FORMAT (F6.2, 1X, F6.2) Nếu lỗi xảy mở file, in thơng báo lỗi thay in số ghi File TEM60.JAN lưu trường ba chiều nhiệt độ nước biển Đông tháng Giêng độ phân giải 1o kinh vĩ có quy cách ghi sau: Dịng gồm số nguyên cách kinh độ mép trái, kinh độ mép phải, vĩ độ mép trên, vĩ độ mép miền không gian số tầng sâu Dòng thứ hai ghi độ sâu (số nguyên) tầng Sau bảng giá trị nhiệt độ (số thực cách nhau) với số cột số điểm nút theo kinh tuyến, số dòng số điểm nút theo vĩ tuyến Các tầng ghi hoàn toàn tương tự Giá trị nhiệt độ khuyết rơi vào vùng đất liền ghi số 99.99 Viết chương trình tính giá trị nhiệt độ nước trung bình tồn biển Đơng Với file số liệu tập 2, viết chương trình đọc thơng tin file tạo cho điểm nút thuộc miền tính file đặt tên theo quy tắc sau: bắt đầu chữ K, sau đến chữ số kinh độ điểm, sau chữ V chữ số vĩ độ điểm, đuôi file ‘.BLN’ Trong file có 99 quy cách ghi sau, dịng có số ngun số tầng quan trắc thực tế điểm, dấu cách chữ số Sau liệt kê liên tiếp giá trị nhiệt độ tầng sâu ứng với nhiệt độ với dấu ngược lại dạng phương trình hồi quy với tên yếu tố ghi file Giả sử có file liệu lưu giá trị quan trắc số yếu tố khí tượng thủy văn trạm hải văn, có quy cách ghi sau: File HESOA.MAT lưu giá trị hệ số hệ phương trình đại số tuyến tính theo quy cách sau: Dịng thứ có số ngun số phương trình Các dịng tiếp sau ghi giá trị hệ số, kể hệ số tự ứng với phương trình, phương trình dòng, hệ số ghi với định dạng F8.4, thí dụ: - Dịng thứ có hai số nguyên cách dấu trống - Dịng thứ hai ghi tên trạm (khơng q 100 ký tự) - Dòng thứ ba ghi hai số nguyên số dịng liệu (khơng q 5000) số yếu tố quan trắc (khơng q 12) cách dấu trống Gợi ý: Xem phương pháp thiết lập phương trình hồi quy tuyến tính nhiều biến phụ lục 4 1.1161 0.1254 0.1397 0.1490 1.5471 - Dòng thứ tư ghi tên yếu tố quan trắc, tên với định dạng A8 0.1582 1.1675 0.1768 0.1871 1.6471 - Dòng thứ ghi đơn vị đo yếu tố quan trắc, với định dạng A8 0.2368 0.2471 0.2568 1.2671 1.8471 - Mỗi dòng dòng tiếp sau ghi giá trị quan trắc yếu tố, giá trị ghi với định dạng F8.2 Viết chương trình cho phép nhập tên file từ bàn phím, đọc liệu lập phương trình hồi quy biến thứ (biến phụ thuộc) biến thứ hai (biến độc lập) In kết hình theo quy cách sau: giả sử tên biến thứ Tw, biến thứ hai Ta, phương trình phải viết có dạng: Tw = 0.915 Ta + 1.237 (Ghi chú: xem công thức phụ lục 3) 0.1968 0.2071 1.2168 0.2271 1.7471 Viết chương trình đọc file giải hệ phương trình phương pháp loại biến Gauss Kết in hình gồm: viết lại hệ phương trình, sau cách dòng ghi nghiệm dòng cuối cùng, thí dụ, ứng với ma trận hệ số phải có kết sau: 1.1161X1 + 0.1254X2 + 0.1397X3 + 0.1490X4 = 1.5471 0.1582X1 + 1.1675X2 + 0.1768X3 + 0.1871X4 = 1.6471 0.1968X1 + 0.2071X2 + 1.2168X3 + 0.2271X4 = 1.7471 0.2368X1 + 0.2471X2 + 0.2568X3 + 1.2671X4 = 1.8471 Cải tiến chương trình tập phép người dùng tuỳ ý định biến phụ thuộc biến độc lập từ bàn phím 1.04059 0.98697 0.93505 0.88130 Gợi ý: Xem phương pháp giải hệ phương trình đại số tuyến tính theo sơ đồ loại biến Gauss phụ lục Với file liệu mô tả tập 4, lập chương trình tính phương trình hồi quy nhiều biến yếu tố quan trắc thứ (biến phụ thuộc) yếu tố quan trắc 2, 3, 6, 8, In kết lên hình File HESOAB.MAT lưu giá trị hệ số hệ phương trình đại số tuyến tính theo quy cách mơ tả tập Giả sử 100 ma trận a ij = a ji hệ số A = [ j ] ma trận đối xứng, tức (i, j = 1, 2, , n) Hãy viết chương trình đọc file hệ số giải hệ phương trình In kết theo quy cách tập Gợi ý: Trường hợp ma trận hệ số A ma trận đối xứng, nên dùng phương pháp bậc hai để giải hệ phương trình đại số tuyến tính (phụ lục 2) Tài liệu tham khảo Etter D M Structured Fortran 77 for engineers and scientists Fourth edition The Benjamin/Cummings Publishing Co., Inc California, 1993, 616 p Koffman Elliot B., Friedman Frank L Fortran with engineering applications Fifth Edition Addison-Wesley Publishing Co Massachusetts- , 1993, 664 p N V Kopchenova and I.A Maron Computational Mathematics Worked examples and problems with elements of theory Mir Publishers, Moscow, 1975 Васильевич О Б Современный Фортран “Диалог-Мифи” Москва, 1998, 397 c Васильевич О Б Фортран для профессионалов: Математическая библиотека IMSL “Диалог -Мифи”, Москва, 2000, 448 c Тюрин Ю Н., Макаров А А Статистический анализ данных на компьютере “ИНФРА” - Москва, 1998, 528 с 101 Tên hàm Phụ lục 1: Bảng hàm chuẩn FORTRAN Trong bảng hàm chuẩn đây, tên đối số kiểu liệu theo quy ước sau: Đối số X CHX DX CX LX IX GX → → → → → → → Tên hàm Kiểu liệu thực xâu ký tự độ xác đơi phức lơgic nguyên tự sinh (in đậm, nghiêng) Kiểu hàm Định nghĩa Kiểu hàm Định nghĩa X EXP (X) Thực e DEXP (DX) Độ xác đơi e DX CEXP (CX) Phức e CX LOG (GX) Kiểu theo GX log e GX ALOG (X) Thực log e X DOG (GX) Độ xác đôi log e DX CLOG (CX) Phức log e CX LOG10 (GX) Kiểu theo GX log10 GX ALOG10 (X) Thực log10 X DLOG10 (DX) Độ xác đơi log10 DX REA L(GX) FLOAT (IX) SNGL (DX) Thực Thực Thực Chuyển GX thành giá trị thực Chuyển IX thành giá trị thực Chuyển DX thành độ xác đơn ANINT(X) Thực Làm tròn tới số thực gần DNINT(DX) Độ xác đơi Làm trịn tới số thực gần NINT(X) Nguyên Làm tròn tới số nguyên gần IDNINT (DX) Nguyên Làm tròn tới số nguyên gần AINT (X) Thực Cắt phần thập phân X DINT (DX) Độ xác đơi Cắt phần thập phân DX SQRT(X) Thực X DSQRT (DX) Độ xác đơi DX INT (GX) Nguyên Cắt GX thành số nguyên CSQRT (CX) Phức CX IFIX (X) Nguyên Cắt X thành số nguyên IDINT (DX) Nguyên Cắt DX thành số nguyên ABS (X) Thực X IABS (IX) Nguyên IX SIGN (X, Y) Thực Gán dấu Y cho X DABS (DX) Độ xác đôi DX ISIGN (IX, IY) Nguyên Gán dấu IY cho IX CABS (CX) Phức CX DSIGN (DX, DY) Độ xác đơi Gán dấu DY cho DX 102 Tên hàm Kiểu hàm Định nghĩa MOD (IX,IY) Nguyên Lấy số dư phép chia IX / IY AMOD (X,Y) Thực Lấy số dư phép chia X / Y DMOD (DX,DY) Độ xác đơi Lấy số dư phép chia DX / DY DIM (X,Y) Thực X − (cực tiểu X Y) IDIM (IX,IY) Nguyên DDIM (DX,DY) Tên hàm Kiểu hàm Định nghĩa ASIN (X) Thực arcsin X DASIN (X) Độ xác đơi arcsin DX IX − (cực tiểu IX IY) ACOS (X) Thực arccos X Độ xác đơi DX − (cực tiểu DX DY) DACOS (DX) Độ xác đôi arccos DX MAX (GX,GY, ) Kiểu theo GX, GY, Cực đại (GX, GY, ) ATAN (X) Thực arctgX MAX0 (IX,IY, ) Nguyên Cực đại (IX, IY, ) DATAN (DX) Độ xác đơi arctgDX AMAX1 (X,Y, ) Thực Cực đại (X, Y, ) DMAX1 (DX,DY, ) Độ xác đơi Cực đại (DX, DY, ) ATAN2 (X,Y) Thực arctg ( X / Y ) AMAX0 (IX,IY, ) Thực Thực, cực đại (IX, IY, ) DATAN2 (DX,DY) Độ xác đơi arctg ( DX / DY ) MAX1 (X,Y, ) Nguyên Cực đại (X, Y, ) SINH (X) Thực shX MIN (GX,GY, ) Kiểu theo GX,GY, Cực tiểu (GX, GY, ) DSINH (DX) Độ xác đơi shDX MIN0 (IX,IY, ) Nguyên Cực tiểu (IX, IY, ) COSH (X) Thực AMIN1 (X,Y, ) Thực Cực tiểu (X, Y, ) chX DMIN1 (DX,DY, ) Độ xác đơi Cực tiểu (DX, DY, ) DCOSH (DX) Độ xác đôi chDX AMIN0 (IX,IY, ) Thực Cực tiểu (IX, IY, ) TANH (X) Thực th X MIN1 (X,Y, ) Nguyên Cực tiểu (X, Y, ) DTANH (DX) Độ xác đơi thDX SIN (X) Thực sin X (X - rađian) DPROD (X, Y) Độ xác đơi Tích X Y DBLE (X) Độ xác đơi Chuyển X thành độ xác đơi CMPLX (X) Phức CMPLX (X, Y) Phức AIMAG (CX) Thực Phần ảo CX DSIN (DX) Độ xác đơi sin DX (DX - rađian) CSIN (CX) Phức sin CX COS (X) Thực cos X (X - rađian) DCOS (DX) Độ xác đôi cos DX (DX - rađian) REAL (CX) Thực Phần thực CX CCOS (CX) Phức cos CX CONJG (CX) Phức Liên hợp CX, a − bi TAN (X) Thực tgX (X - rađian) LEN (CHX) Nguyên Độ dài xâu ký tự CHX tgDX (DX - rađian) INDEX (CHX, CHY) Nguyên Vị trí xâu CHY xâu CHX DTAN (DX) Độ xác đơi X + 0i X + Yi 103 Tên hàm Kiểu hàm Định nghĩa CHAR (IX) Ký tự Ký tự ứng với vị trị thứ IX chuỗi so sánh ICHAR (CHX) Nguyên Vị trí ký tự CHX chuỗi so sánh LGE (CHX, CHY) Lôgic Giá trị biểu thức (CHX lớn CHY từ vựng) LGT (CHX, CHY) Lôgic Giá trị biểu thức (CHX lớn CHY từ vựng) LLE (CHX, CHY) Lôgic Giá trị biểu thức (CHX nhỏ CHY từ vựng) LLT (CHX, CHY) Lôgic Giá trị biểu thức (CHX nhỏ CHY từ vựng) Phụ lục 2: Phương pháp Gauss giải hệ phương trình đại số tuyến tính a11x1 + a12 x2 + + a1n xn = b1 a21x1 an1x1 + a22 x2 an2 x2 + + a2n xn ann xn = b2 bn + + hay Ax=b ⎛ ⎜ ⎜ A = aij = ⎜ ⎜ ⎜ ⎝ ( ) a11 a21 a12 a22 an1 an2 + = ⎫ ⎪ ⎪ ⎬ ⎪ ⎪⎭ (*) ⎛ a1n ⎞ ⎛ b1 ⎞ ⎜ ⎟ ⎜ ⎟ a2 n ⎟ ⎜ b2 ⎟ x = ⎜ b=⎜ ⎜ ⎟ ; ⎟ ; ⎜ ⎟ ⎜ ⎟ ⎜ ⎜ b ⎟ ann ⎟⎠ ⎝ ⎝ n ⎠ x1 ⎞ ⎟ x2 ⎟ ⎟ ⎟ xn ⎟⎠ Nếu ma trận A không suy biến, tức det A = a1n a2 n a11 a21 a12 a22 an1 an ann ≠ 104 hệ (*) có nghiệm Có thể tính nghiệm theo cơng thức Cramer xi = det Ai , det A Ai − ma trận A với cột i bị thay cột số hạng tự b Phương pháp loại biến Gauss giải hệ phương trình đại số tuyến tính: (3) aij(1) = aij − ai1b1 j (i = 2, 3, 4; j = 2, 3, 4, 5) (4) (1) Bây chia phương trình thứ hệ (3) cho phần tử a22 ta có: Thí dụ cho hệ a11 x1 + a12 x2 + a13 x3 + a14 x4 = a15 ⎫ ⎪ a21 x1 + a22 x2 + a23 x3 + a24 x4 = a25 ⎪ ⎬ a31 x1 + a32 x2 + a33 x3 + a34 x4 = a35 ⎪ a41 x1 + a42 x2 + a43 x3 + a44 x4 = a45 ⎪⎭ (1) (1) (1) x2 + b23 x3 + b24 x4 = b25 , (5) (1) b2(1j) Giả sử phần tử a11 ≠ Chia phương trình thứ cho a11 , ta có = a2(1j) (1) a22 ( j = 3, , 5) Bằng cách tương tự loại x1 , ta loại x2 khỏi phương trình thứ ba thứ tư, ta có: x1 + b12 x2 + b13 x3 + b14 x4 = b15 , với (1) (1) (1) (1) ⎫ a22 x2 + a23 x3 + a24 x4 = a25 ⎪ (1) (1) (1) (1) a32 x2 + a33 x3 + a34 x4 = a35 ⎬ ⎪ (1) (1) (1) (1) a42 x2 + a43 x3 + a44 x4 = a45 ⎭ b1 j = a1 j a11 ( 2) ( 2) ( 2) ⎫ a33 x3 + a34 x4 = a35 ⎪ ⎬ ( 2) ( 2) ( 2) ⎪⎭ a43 x3 + a44 x4 = a45 (2) ( j = 2, 3, 4, 5) Dùng phương trình (2) để loại ẩn x1 khỏi phương trình số 2, 3, hệ (1): Muốn vậy, nhân phương trình (2) với a 21 , a31 , a 41 lấy phương trình số 2, 3, trừ tích tương ứng vừa nhận được, ta có ba phương trình: (6) aij( 2) = aij(1) − ai(12) b2(1j) (i = 3, 4; j = 3, 4, 5) (7) Chia phương trình thứ hệ (6) cho phần tử a33( ) , ta có: ( 2) ( 2) x3 + b34 x4 = b35 , (8) 105 b3( 2j) = a3( 2j) ( j = 4, 5) ( 2) a33 Sau nhờ (8) ta loại x khỏi phương trình thứ hai hệ (6), nhận được: ( 3) ( 3) a44 x4 = a45 Nếu phần tử hệ khơng cần thay đổi chỗ phương trình hệ tương ứng để làm cho phần tử khác khơng Số phép tính số học N cần thực phương pháp Gauss 2n (n + 1) (n + 2) N= + n (n − 1) Vậy số phép tính số học xấp xỉ tỷ lệ với luỹ thừa bậc ba số ẩn ( 2) ( 2) a4(3j) = a4( 2j) − a43 b3 j ( j = 4, 5) (9) Như ta đưa hệ (1) hệ tương đương có ma trận hệ số ma trận tam giác x1 + b12 x + b13 x3 + b14 x = b15 ⎫ ⎪ x + b23(1) x3 + b24(1) x = b25(1) ⎪ ⎬ x3 + b34( ) x = b35( ) ⎪ ( 3) (3) ⎪ a 44 x = a 45 ⎭ Phương pháp bậc giải hệ phương trình đại số tuyến tính trường hợp ma trận A ma trận đối xứng Phương pháp thuận lợi trường hợp hệ phương trình (12) Ax=b (10) có ma trận A ma trận đối xứng, điều thường gặp toán kỹ thuật Theo phương pháp ma trận A biểu diễn thành tích hai ma trận tam giác chuyển vị A = T′T (13) Từ (10) xác định ẩn x4 = a x3 = b x2 = b (1) 25 (2) 35 − x4b (1) 24 (3) 45 a − x4b (3) 44 (2) 34 − x3b (1) 23 x1 = b15 − x b14 − x b13 − x b12 ⎫ ⎪ ⎪ ⎬ ⎪ ⎪ ⎭ (11) Vậy thủ tục giải hệ phương trình đại số tuyến tính bậc quy hai q trình: ⎛ t11 ⎜ ⎜0 T =⎜ ⎜ ⎜0 ⎝ t12 t22 t1n ⎞ ⎟ t2 n ⎟ , ⎟ ⎟ tnn ⎟⎠ ⎛ t11 ⎜ ⎜t T ′ = ⎜ 12 ⎜ ⎜t ⎝ 1n t22 t2 n ⎞ ⎟ ⎟ ⎟ ⎟ tnn ⎟⎠ Nhân hai ma trận T ′ T cho tích ma trận A , ta suy cá cơng thức tính phần tử tij : a) Quá trình thuận: đưa hệ (1) dạng tam giác (10); b) Quá trình nghịch: tìm ẩn theo công thức (11) 106 t11 = a11 , t ii = a ii − t ij = a ij − a1 j t1 j = t11 i −1 ∑ t ki2 (1 < i ≤ n ) (14) k =1 Vậy q trình thuận gồm tính phần tử ma trận T theo cơng thức (14) Q trình nghịch tính ma trận cột y x theo công thức (18), (19) i −1 ∑ t ki t kj k =1 (i < j ) t ii t ij = ( j > 1) i> j Như ta thay hệ (12) hai hệ tương đương T' y = b, 15) Tx=y hay t11 y1 = b1 ⎫ ⎪ ⎪ ⎬ ⎪ ⎪⎭ (16) t11 x1 + t12 x2 + + t1n xn = y1 ⎫ ⎪ t22 x2 + + t2 n xn = y2 ⎪ ⎬ ⎪ tnn xn = yn ⎪⎭ (17) t12 y1 + t22 y2 = b2 t1n y1 + t2 n y2 + + tnn yn = bn Từ suy cơng thức tính: i−1 y1 = b1 , t11 y xn = n , tnn yi = xi = bi − ∑ tki yk k=1 tii yi − (i > 1) (18) (i < n) (19) n ∑ tik xk k=i+1 tii 107 n a= n ∑x ∑y k k =1 k =1 n n k − n ∑ xk y k k =1 n k =1 Phụ lục 3: Phương pháp bình phương nhỏ phân tích hồi quy k =1 ∑x ∑x k =1 n n n b= (20) (∑ x k ) − n ∑ x k2 k k =1 n k y k − ∑ x k2 k =1 n n ∑y k =1 (∑ x k ) − n ∑ x k2 k =1 k , (21) k =1 hay hệ số b cịn tính theo cơng thức: n Mơ hình tuyến tính b= Mơ hình hồi quy tuyến tính có dạng: ∑1 y k= k −a n ∑1 x k= k n (22) Mơ hình đa thức y = f ( x) = ax + b Theo phương pháp bình phương nhỏ nhất, hệ số hồi quy a b phương trình tìm cho tổng bình phương sai số n Phương pháp bình phương nhỏ áp dụng để tính hệ số hồi quy đa thức dạng f ( x) = a + a1 x + a x + + a n x m E = ∑ ( y k − axk − b) k =1 cực tiểu Lần lượt lấy đạo hàm biểu thức theo a , b cho không, ta hệ phương trình sau để xác định a b : n n n n n k =1 k =1 k =1 k =1 k =1 a ∑ xk2 + b∑ xk = ∑ xk y k , a ∑ xk + b n = ∑ y k thí dụ mơ hình bậc hai f ( x) = a + a1 x + a x Lấy đạo hàm tổng sai số theo hệ số cho không ta có hệ sau để xác định hệ số hồi quy bậc hai: Vậy hệ số hồi quy tính theo cơng thức sau: 108 ⎧ ⎪ a2 ⎪ ⎪⎪ ⎨ a2 ⎪ ⎪ ⎪ a2 ⎪⎩ (29) n n n k=1 k=1 n n n n k=1 k=1 k=1 k=1 n n n n k=1 k=1 k=1 k=1 ∑ xk2 + a1 ∑ xk + a0 n = ∑ yk ta có k=1 ∑ xk3 + a1 ∑ xk2 + a0 ∑ xk = ∑ xk yk (23) ∑ xk4 + a1 ∑ xk3 + a0 ∑ xk2 = ∑ xk2 yk ~ g ( x ) = a~ x +b (30) ~ Với phương trình (30) hệ số hồi quy a b tính theo cơng thức Về ngun tắc ta sử dụng phương pháp để tìm phương trình đa thức bậc Tuy nhiên thực tế phương pháp trở thành không ổn định bậc đa thức lớn sai số làm trịn số máy tính n a= n n n k =1 k =1 Phương pháp bình phương nhỏ áp dụng cho hàm bất kỳ, hệ phương trình để tìm hệ số phi tuyến, khơng thể giải cách sử dụng phương trình tuyến tính Tuy nhiên, số trường hợp, hàm phi tuyến chuyển thành hàm tuyến tính Thí dụ hàm tuyến tính hố f ( x) = b x a (24) Nếu lấy loga hai vế phương trình này, ta có ln f ( x) = a ln x + ln b ~ b= (31) xk ) − n ∑ ~ xk2 (∑ ~ n n n Mơ hình phi tuyến n ~ xk ∑ ~ yk − n ∑ ~ xk ~ yk ∑ k =1 k =1 k =1 n ∑ ~x ∑ ~x ~y − ∑ ~x ∑ ~y k =1 k k =1 n k k k =1 n k k =1 xk ) − n ∑ ~ xk2 (∑ ~ k =1 k (32) k =1 Vậy cơng việc tính tốn gồm: chuyển đổi giá trị số liệu x k y k theo công thức (28), (29), tính tổng, kết vào phương ~ trình (31), (32) để tìm a b Giải phương trình (27) b đặt vào phương trình (24) (25) Nếu ký hiệu g ( x) = ln f ( x) (26) ~ b = ln b (27) ~ x = ln x y = ln y (28) ~ 109 Phụ lục 4: Sơ đồ ứng dụng phương pháp hồi quy nhiều biến ⎛ n ⎜ ⎜ [x1 ] ⎜ [x ] ⎜ ⎜ ⎜ ⎝ [x m ] [x1 ] [x2 ] [x1 x1 ] [x2 x1 ] [x1 x2 ] [x2 x2 ] [x1 xm ] [x2 xm ] [xm ] ⎞ ⎟ [xm x1 ] ⎟ [xm x2 ] ⎟⎟ ⎟ [xm xm ]⎟⎠ ⎛ a0 ⎞ ⎛ b0 ⎞ ⎜ ⎟ ⎜ ⎟ ⎜ a1 ⎟ ⎜ b1 ⎟ ⎜ a ⎟ = ⎜ b2 ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎝ a m ⎠ ⎝ bm ⎠ (34) n với dấu [ ] ký hiệu phép lấy tổng ∑ Giả sử có n quan trắc biến phụ thuộc y biến độc lập x1 , x , , x m Phương trình hồi quy thiết lập sau: y = a + a1 x1 + a x + + a m x m Các hệ số hồi quy (i = 1, , m) chọn cho thoả mãn n δ = ∑ ( y − a − a1 x1 − a x − − a m x m )2 = i =1 Lần lượt lấy đạo hàm biểu thức theo a0 , a1 , a , , a m cho đạo hàm khơng, ta có hệ m + phương trình để xác định hệ số a na [x1 ]a [x ]a [x m ]a + + + [x1 ]a1 [x1 x1 ]a1 [x1 x ]a1 + [x1 x m ]a1 + + + [x ]a [x x1 ]a [x x ]a + [x x m ]a + + + + + + + + [x m ]a m [x m x1 ]a m [x m x ]a m = = [x m x m ]a m = [ yx m ] = [y ] [yx1 ] [yx ] (33) Hệ phương trình gọi hệ phương trình tắc để xác định hệ số hồi quy Dưới dạng ma trận ta viết hệ sau: Để tìm hệ số hồi quy a0 , a1 , a2 , , am ta phải giải hệ phương trình tắc theo phương pháp loại biến Gauss phương pháp bậc hai mơ tả phụ lục ma trận hệ số phương trình tắc ma trận đối xứng Dưới dẫn hai thủ tục hỗ trợ cho việc lập hệ phương trình đại số tuyến tính chuẩn tắc (34) − SUBROUTINE LHPTCT giải hệ phương trình phương pháp loại biến Gauss − SUBROUTINE GAUSS SUBROUTINE LHPTCT (Y, X, A, N, M) INTEGER N, M, I, J, K REAL Y (10000), X (10000, 50), A (0 : 50, : 51) A (0, 0) = N DO J = 1, M A (0, J) = 0.0 DO K = 1, N A (0, J) = A (0, J) + X (K, J) END DO END DO A (0, M + 1) = 0.0 DO K = 1, N A (0, M + 1) = A (0, M + 1) + Y (K) END DO 110 DO I = 1, M A (I, M + 1) = 0.0 DO K = 1, N A (I, M + 1) = A (I, M + 1) + Y (K) * X(K, I) END DO END DO DO I = 1, M DO J = I, M A (I, J) = 0.0 DO K = 1, N A (I, J) = A (I, J) + X (K, I) * X (K, J) END DO ENDDO ENDDO DO I = 1, M DO J = 0, I - A (I, J) = A (J, I) END DO END DO RETURN END SUBROUTINE GAUSS (M, A, X) INTEGER M REAL A (0 : 50, : 51), X (0 : 50) DO I = 0, M - K=I AMAX = ABS (A (K, K)) DO J = I + 1, M R = ABS (A (J, I)) IF (AMAX LT R) THEN AMAX = R K=J END IF END DO IF (K NE I) THEN DO J = I, M + AMAX = A (I, J) A (I, J) =A (K, J) A (K, J) = AMAX END DO END IF DO J = I + 1, M + A (I, J) = A (I, J) / A (I, I) END DO DO J = I + 1, M DO K = I + 1, M + A (J, K) = A (J, K) - A (J, I) * A (I, K) END DO END DO END DO X (M) = A (M, M + 1) / A (M, M) DO I = M - 1, 0, -1 X (I) = A (I, M + 1) DO J = I + 1, M X (I) = X (I) - A (I, J) * X (J) END DO END DO RETURN END 111 ... NỘI PHẠM VĂN HUẤN NGÔN NGỮ LẬP TRÌNH FORTRAN VÀ ỨNG DỤNG TRONG KHÍ TƯỢNG THỦY VĂN NHÀ XUẤT BẢN NÔNG NGHIỆP – 2005 MỤC LỤC Giới thiệu Chương - Khái niệm lập trình máy... Phụ lục 4: Sơ đồ ứng dụng phương pháp hồi quy nhiều biến 110 Giới thiệu Giáo trình “Ngơn ngữ lập trình Fortran ứng dụng khí tượng thủy văn? ?? tập hợp học sở lập trình mà tác giả... chất giả trình chương trình, có điều viết ngắn gọn vài câu, vài kí hiệu quen dùng, chưa viết ngôn ngữ lập trình cụ thể mà thơi Một chương trình máy tính viết ngôn ngữ Fortran hay ngôn ngữ khác

Ngày đăng: 11/05/2021, 04:09

Tài liệu cùng người dùng

Tài liệu liên quan