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

Báo cáo thực hành với maple

19 380 0

Đ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 19
Dung lượng 1 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Báo cáo thực hành với maple

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

KHOA TOÁN TIN ỨNG DỤNG

- -

TIỂU LUẬN

Đề tài: BÁO CÁO THỰC THÀNH VỚI MAPLE

Giáo viên hướng dẫn: Nguyễn Hữu Điển Sinh viên thực hiện : 1 NGUYỄN PHƯỢNG HOÀNG

2 NGỤY ĐÌNH HẬU

Lớp: TOÁN TIN 1-K51toán 2-K51

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

Trang 2

PHẦN 1: CƠ SỞ THỰC HÀNH

I/ Giới thiệu

1 Các tính năng cơ bản của Maple

Có thể nêu vắn tắt các chức năng cơ bản của Maple như sau:

• là một hệ thống các toán trên các biểu thức đại số;

• có thể thực hiệc được hầu hết các phép toán cơ bản trong chương trình toán

đại học và sau đại học;

• cung cấp các công cụ minh họa hình học thuận tiện gồm: vẽ đồ thị

tĩnh và động của các đường và mặt được cho bởi các hàm tùy ý

trong nhiều hệ tọa độ khác nhau;

• một ngôn ngữ lập trình đơn giản và mạnh mẽ, có khả năng tương

tác với các ngôn ngữ lập trình khác;

• cho phép trích xuất ra các định dạng khác nhau như LaTex, Word,

HTML,

• Một công cụ biên soạn giáo án và bài giảng điện tử, thích hợp với các lớp

học tương tác trực tiếp;

• một trợ giáo hữu ích cho học sinh và sinh viên trong việc tự học

2 Hệ đại số tuyến tính và phép biến đổi ma trận

Việc giải những hệ phương trình là hết sức cần thiết trong các bài toán

thực tế Thường khi giải ta đưa hệ về dạng ma trận AX=B và thiết lập lập ma

trận mở rộng Ã=[A:B] Bằng các phép biến đổi về ma trận ta có thể biến đổi

ma trận à về dạng tương ứng:Crame, Gauss, Gass-Jordan,…

Việc cài đặt được những chương trình thực hiện như vậy là rất hữu

ích.Có rất nhiều cách thực hiện cài đặt với những ngôn ngữ lập trình như

pascal, C, C++, Maple, Maplab…Trong tính toán thực hành với Maple có

rất nhiều thao tác đã được cung cấp trong gói lênh linalg như : Thực hiện

khử Gause trên A với lệnh gausselim(A); Khử hàng theo dạng Gause-Jordan

ở A với câu lệnh rref(A) hoặc gausjord(A); Tìm dạng Jordan của A với câu

lệnh jordan(A)…

Trang 3

Tuy vậy ta hoàn toàn cũng có thể thực hiện được những thao tác như vậy

mà không cần dùng đến các câu lệnh có sẵn Để làm quen với cách sử dụng

Maple, sau đây chúng ta thử thực hiện cái đặt thuật toán Gauss-Jordan giải

hệ đại tuyến m phương trình n ẩn

II/ Tổng quan về Maplets Package - Gói lệnh linalg – Thủ tục – Ngôn

ngữ lập trình Maple

1.Tổng quan về Maples Package

Cấu trúc của một maplet

>with(Maplets[<Subpakage name>]): # khai báo subpakage

MyMaplet:=Maplet( [

[<Command 1>],

[<Command 2>],

[<Command n>]

]): #Ứng dụng có tên là MyMaplet bao gồm tập hợp

> #các lệnh (tổ hợp lệnh) <Command 1>,<Command 2>,…,

<Command n> trong gói subpagake đã khai báo

>Maplets[Display](MyMaplet); # Chạy chương trình có tên là

MyMaplet có nội dung như trên

1.1 Button: Cấu trúc thường dùng

- Button(opts)

- Button[refID](opts)

Trong đó : opts bao gồm: background (màu button), caption (text hiển thị

trên button) , enabled( =true hoặc false : cho phép hay không cho phép

click), font(font của caption), foreground (màu của caption), valign,

halign(vị trí của caption so với button), height, image, onclick (sự kiện khi

click chuột), reference(đặt tên, chú ý: nếu dùng khai báo 1 thì sử dụng

Trang 4

reference, ở khai báo 2: refID cũng chính là reference), tooltip(hiển thị dòng

chữ chú thích khi đưa chuột vào), visible, or width

Ví dụ:

-Button(“OK”,Shutdown()) : tắt maplet, không đặt tên

-Button ['out'](“Quit”,CloseWindow(‘w1′)) : button có tên ‘out’,

caption=”Quit”, chức năng là tắt cửa sổ ‘w1′

2> TextField: cấu trúc

-TextField(opts)

- TextField[refID](opts)

trong đó opts bao gồm:

background, cursor ( vị trí đặt con trỏ), editable, enabled, focus( chọn =true

nếu muốn con trỏ nằm trong TextField), font, foreground, halign, onchange,

popupmenu, reference, tooltip, value, visible, or width

Chú ý: Đối với TextField việc truy cập sửa đổi dữ liệu đều thông qua tên

(reference)

3> Evaluate: cấu trúc

- Evaluate(opts, args)

trong đó : option=value với option là một function, `option`, target, hay

waitforresult( chờ đợi kết quả thực hiện khi nhấn button)

- chức năng chính của Evaluate là thực hiện các hàm và thủ tục, có thể trả lại

giá trị cho một đối tượng khác

Ví dụ:

-Evaluate(‘textfieldresult’='int(textfieldinput,x)’) : tính tích phân của biểu

thức ở textfieldinput theo biến x và trả lại kết quả cho textfieldresult

-Evaluate((‘function’='myfunction”): thực hiện một myfunction do mình

định nghĩa

Trang 5

Cụ thể, ta xét các bài tập nhỏ sau:

Bài 1: Tạo giao diện như hình vẽ đê tính đạo hàm

Code:

> restart;

> with(Maplets[Elements]);

> viphan := Maplet([

["Nhap ham theo x", TextField['TF1'](‘width’ = 30)],

[

"Dao ham theo bien x :",

Button("Diff", Evaluate('TF1' = 'diff(TF1, x)')),

Button("OK", Shutdown(['TF1']))

]

]):

Maplets[Display](viphan);

Ở đây, sau khi nhập biểu thức vào TF1, click nút “Diff” và giá trị được trả

về ngay cho TF1

Bài 2: Tạo giao diện như hình vẽ đê tính nguyên hàm

Trang 6

Code

> restart;

> with(Maplets[Elements]);

> nguyenham := Maplet([

["Nhap ham theo x", TextField['TF1'](‘width’ = 30)],

["Ket qua ", TextField['TF2'](‘width’ = 30)],

[

"Nguyen ham theo bien x :",

Button("Integrate", Evaluate('TF2' = 'int(TF1, x)')),

Button("OK", Shutdown(['TF2']))

]

]):

Maplets[Display](nguyenham);

2 Gói lệnh linalg

Gói thủ tục này chứa đựng các hàm thực hiện trên mảng (chính là những

vector và ma trận trong Maple) Câu lệnh with(linalg) cho phép bạn gọi trực

tiếp các hàm trong gói thủ tục linalg Ví dụ như sau khi bạn thực hiện câu

lệnh with(linalg) bạn có thể gọi hilbert thay vì linalg(hilbert)

Nạp gói thủ tục đại số tuyến tính Khi bạn nạp bằng with, bạn sẽ thấy tất

cả các hàm trong bộ chương trình đó

>with(linalg);

Warning : new definition for norm

Warning : new definition for trace

[BlockDiagonal, GramSchmidt, JordanBlock, add, addcol, addrow, adj,

adjoint, angle, augument, backsub, band, basis, bezout, charmat,

chharpoly, col, coldim, colspace, colspan, companion, concat, cond,

copyinto, crossprod, curl, definite, delcols, delrows, det, diag, diverge,

dotprod, eigenvals, eigenvects, equal, exponential, extent, ffgausselim,

fibonacci, frobenius,gausselim, gaussjord, genmatrix, grad,

hadamard,hermite,hessian, hilbert, htranspose, ihermite,

indexfunc,innerprod,inbassis, inverse, ismith, iszero, jacobian, jordan,

kernel, laplacian, leastsqrs, linsolve, matrix, minor, minpoly, mulcol,

mulrow, multiply, norm, mullspace, orthog, rowdim, rowspace, rowspan,

rref, scalarmul, singularvals, smith, stack, submatrix, subvector,

Trang 7

sumbasis, swapcol, swprow, sylvester, toeplitz, trace, transpose,

vandermonde, vecpotent, vectdim, vector]

2.1 Lập ma trận từ phương trình và ngược lại

Mô tả: Hàm geneqns sinh ra một họ các phương trình từ hệ số của ma

trận Nếu có biến thứ ba biểu thị véc tơ vế phải b thì nó sẽ được đưa vào

phương trình Ngược lại thì vế phải được coi bằng 0

Hàm genematrix sinh ma trận từ các hệ số của hệ phương trình tuyến

tính Nếu có biến thứ ba"flag" thì véc tơ"vế phải" được đưa vào cột cuối

cùng của ma trận

Thí dụ

> eqns := {x+2*y=0,3*x-5*y=0};

> A := genmatrix(eqns, [x,y]);

> geneqns(A,[x,y]);

> geneqns(A,x);

> eqns := {x+2*z=a,3*x-5*y=6-z};

> A := genmatrix(eqns, [x,y,z], flag);

> A := genmatrix(eqns, [x,y,z], 'b');

> print(b);

> geneqns(A,[x,y,z],b);

Giải phương trình đại số tuyến tính

Giải phương trình đại số tuyến tính Ax=u, trong đó ,

Nhập A

> A:=array([[3,-2,-5,1],[2,-3,1,5],[1,2,0,-4],[1,-1,-4,9]]);

Nhập u

> u:=vector([3,-3,-3,22]);

2.2 Giải phương trình Ax=u

> linsolve(A,u);

Trang 8

3 Thủ tục

Tạo lập thủ tục đơn giản trong Maple

<Tên thủ tục>:=proc(<Dãy thông số

hình thức>) <Biểu thức có chứa dãy

thông số>

end;

Sau khi định nghĩa thủ tục chúng ta

có thể gọi như các hàm của Maple:

<Tên thủ tục>(biểu thức1, biểu thức 2)

A.Định nghĩa hàm f với hai tham số x, y

> f := proc(x, y)

>x + y;

> end;

f := proc(x, y) x + y end

B Sử dụng hàm f để tính tổng của hai số 27 (cho x) và 46 (cho y)

> f(27, 46);

73

C.Kết quả của hàm với x = w và y = z + 1

> f(w, z+1);

w + z + 1

D Xây dựng thủ tục tìm số lớn nhất trong ba số bất kỳ

> max3 := proc(a, b, c)

> print(So lon nhat trong ba so , a, b, c);

> if a < b then

> if b < c then c else b fi

> elif a < c then c else a

> fi; end;

E Sử dụng thủ tục max3

> max3(3, 2, 1);

3

> max3(13, 24, 18);

24

4 Ngôn ngữ lập trình Maple

4.1 Câu lệnh điều kiện if - then - else – fi

Mẫu 1: Lựa chọn câu lệnh

Trang 9

if <điều kiện> then

<Dãy câu lệnh 1>

else

<Dãy câu lệnh 2>

fi;

Maple xác định giá trị biểu thức <điều kiện>:

1 Nếu giá trị của <điều kiện> bằng TRUE Maple thực hiện:

<Dãy câu lệnh 1>

Sau đó kết thúc câu lệnh điều kiện

2 Nếu giá trị của <điều kiện> bằng FALSE Maple thực hiện :

<Dãy câu lệnh 2>

Sau đó kết thúc câu lệnh điều kiện

Sử dụng câu lệnh if mẫu 1

A Gán giá trị cho hai biến a và b Sử dụng câu lệnh if mẫu 1 để xác địnhsố

lớn nhất trong hai số a và b

> a:= 12: b:= 37:

> if a>= b then

> print(`so lon nhat co gia tri :`, a);

> else

> print(`so lon nhat co gia tri :`, b);

> fi;

so lon nhat co gia tri :37

Mẫu 2: Một trong nhiều lựa chọn

if <điều kiện(1)> then

<Dẫy câu lệnh 1>

elif <điều kiện (2)> then

<Dẫy câu lệnh 2>

elif <điều kiện (n)> then

<Dẫy câu lệnh n>

else

<Dẫy câu lệnh mặc

định>

fi;

Maple xác định giá trị của <điều kiện (i)> (i = 1 n)

theo thứ tự lần lượt

1 Nếu giá trị của <điều kiện (i)> bằng TRUE, Maple thực hiện :

<Dãy câu lệnh i>

Sau đó kết thúc câu lệnh điều kiện

2 Nếu giá trị của <điều kiện (i)> đều FALSE Maple thực hiện :

<Dẫy câu lệnh mặc định>

Sau đó kết thúc câu lệnh điều kiện

Sử dụng câu lệnh if mẫu 2

Gán giá trị cho hai biến c và d Sử dụng câu lệnh if mẫu 2 để xác định số lớn

nhất trong hai số c và d

Trang 10

> c:= 2: d:= 137:

> if c> d then print(' c lon hon d');

> elif c = d then print('c bang d');

> else print(' c nho hon d');

> fi;

c nho hon d

4.2 Câu lệnh lặp FOR:

Dùng để xây dựng một chu trình lặp có số lần lặp xác định:

Mẫu 1:

for i from <giá trị đầu> by<thay

đổi i> to <giá trị cuối>

do

<Dãy dòng lệnh>

od;

Bước 1:Biến điều khiển i nhận giá trị của biểu thức <Giá trị đầu>

Bước 2: Maple kiểm tra điều kiện:

+ i <= <giá trị cuối> trường hợp <thay đổi i> >= 0

+ i >= <giá trị cuối>trường hợp <thay đổi i> <= 0

Bước 3:- Nếu điều kiện trên là sai thì Maple ra khỏi chu trình

- Nếu điều kiện trên là đúng thì:

a Thực hiện <Dẫy dòng lệnh>

b Biến điều kiện i nhận giá trị mới:

i := i + <thay đổi i>

c Trở lại bước 2

Sử dụng for và if mẫu 2 để khởi tạo một ma trận

A Khai báo một ma trận.Thiết lập giá trị cho các phần tử ma trận A

> A := array(1 4, 1 4):

> for i to 4 do

> for j to 4 do

> if i > j then A[i, j] := j

>elif i < j then A[i, j] := i

>else A[i, j] := 1

>fi

> od;

> od:

> print (A); Kết quả đưa ra màn hình

Trang 11

[1 1 1 1]

[1 1 2 2]

[1 2 1 3]

[1 2 3 1]

B Sử dụng for tính đồng thời các tổng , và

> for i from 2 by 2 to 6 do

> printf(“Tong j^%d, j = 1 n la:”,i);

> print(expand(sum(j^i,j = 1 n)));

> od;

Tong j**2 j=1 n la:

1/3 n3+1/2 n2+1/6 n

Tong j**4 j = 1 n la :

1/5 n5+1/2 n4+1/3 n3-1/30 n

Tong j**6 j = 1 n la :

1/42 n-1/6 n3+1/2 n5+1/2 n6 + 1/7 n7

Trong mẫu 2 của câu lệnh FOR có sử dụng hai hàm rất quan trọng:

+ op(i, <biểu thức toán học>) cho thành phần thứ i giữa các thành phần toán

tử Ví dụ; op(1,2*x*y) là 2 Còn op(2,2*x*y) là x

+ nops(<biểu thức toán học>) số lượng các thành phần giữa các toán tử

trong <biểu thức toán học> Ví dụ: nops(2*x*y) là 3, nops([3,4]) là 2

Mẫu 2 của For : Sử dụng giá trị của biến đếm vào biểu thức

for i to nops(<biểu thức>)

do

câu lệnh có (i,<biểu thức>)

od;

Bước 1: Biến điều khiển i nhận giá trị đầu trong <biểu thức>qua hàm nops()

Bước 2: Maple thực hiện câu lệnh có (i,

<biểu thức>) Bước 3: Kiểm tra điều kiện biến i:

a Nếu i là phần tử cuối cùng của <biểu thức> thì Maple ra khỏi chu trình

b Nếu điều kiện trên sai, i nhận giá trị mới,

là giá trị tiếp theo trong <biểu thức>

c Trở lại bước 2

Trang 12

Sử dụng for mẫu 2

Ví dụ này sử dụng câu lệnh for dạng 2 để tính tổng bình phương các số chẵn

trong danh sách aList

> aList := [1,2,3,4,5];

> s := 0;

> for i to nops (aList) do

> if irem(op(i, aList), 2) = 0 then

> s := s + op(i, aList)^2

>fi

> od:

> s;

20

Mẫu 3- For: Lặp lại lệnh theo giá trị của một biến trong biểu thức

for x in <biểu thức> do

<Câu lệnh dùng x>

od;

Lặp lại theo dẫy giá trị x lấy trong

<biểu thức>

Sử dụng for mẫu 3

Ví dụ này sử dụng câu lệnh for mẫu 3 để tính tổng bình phương các số lẻ

trong danh sách aList

> aList := [1,2,3,4,5]: s := 0:

> for n in aList do

> if irem(n, 2) = 1 then

> s := s + n^2

> fi

> od:

> s;

35

PHẦN 2: CƠ SỞ LÝ THUYẾT CỦA THUẬT TOÁN VÀ CÀI

ĐẶT

I/ Cơ sở lý thuyết của phương pháp Gauss-Jordan

Trang 13

Nôi dung phương pháp là loại trừ ẩn,song loại trừ ẩn nảo trước là tùy thuộc

cách chọn phần tử trội của hệ số aij Quá trình thực hiện được mô tả như sau:

Bước 1: xét ma trận mở rộng A(0)=[A:B]

Ta nói phần apq là phần tử trội của ma trận A nếu │apq│= max│aij│ ;

1≤i,j≤n và khi đó apq được gọi là hàng giải,cột q gọi là cột giải

Để loại trừ ẩn xq khỏi các phương trình thứ i ≠ p ta biến đổi :

Đặt mi= aiq/apq; (i=1 n,i≠p) Lấy hàng p nhân tất cả với mi rồi lần lượt

lấy hàng i=1,2 tương ứng trừ đi nó (trừ đi hàng p) ta được: A(1)

Đặt

aij(1)= aij – apj×mi=aij- apj ×aiq/apq (٭) trong đó i,j=1 n+1;

i≠p; j≠q

Khi i=p thì apj(1)=apj j=1 n+1

Khi j=q thì từ (٭) ta có aiq(1)=0 (i≠p)

Tóm lại: qua bước này ta thu được ma trận A(1) có các phần tử là aij(1)

được tính như sau:

Các phần tử thuộc hàng giải thứ p thì apj(1)=apj, j=1 n+1 được giữ

nguyên

Các phần tử thuộc cột giải thứ q thì đều “=0” trừ phần tử giải apq

Các phần tử khác (kể cả cột thứ n+1) đều tính theo công thức:

aij(1)= aij – apj×mi=aij- apj ×aiq/apq (1) i≠p; j≠q

Bước 2: lặp lại quá trình như bước 1 đối với ma trận A(1) để có A(2) Trong

ma trận (7) ta chọn phần tử giải là phần tử ars(1) với điều kiện r≠p, s≠q Các

phần tử của ma trận A(2) tính theo công thức (1); và cứ thế tiếp tục, sau n

bước ta thu được ma trận A(n) mà mỗi hàng chỉ gồm 1 phần tử ứng với ẩn

xk và cột vế phải Từ đó ta suy ra nghiệm của hệ

- Trong công thức (1) có phép cho phần tử apq, phần tử đó không nhất

thiết phải là phần tử trội mà trong ma trận hệ số A có phần tử là số “1”

thì nên chọn nó là phần tử giải sẽ tránh được phép chia (hoặc chọn là số

nguyên nào đó)

- Phương pháp trên áp dụng được đối với hệ phương trình m ≠n, và vô

đinh hay vô nghiệm

Thí dụ Giải hệ phương trình sau:

Ngày đăng: 22/05/2016, 09:02

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w