1. Trang chủ
  2. » Giáo án - Bài giảng

vn 2

17 137 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 đề Các loại biến & Việc lượng giá biểu thức trong Maple
Trường học Đại Học Bách Khoa Hà Nội
Chuyên ngành Khoa học Máy tính
Thể loại Bài soạn
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 17
Dung lượng 205 KB

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

Nội dung

Một biến đã được gán đại diện cho gần như bất kỳ thứ gì: một con số cụ thể, một biểu thức, một hàm, một phương trình, một đồ thị, một lời giải, một biến khác v.v…Một biến đã được gán thỉ

Trang 1

Các loại biến

& Việc lượng giá biểu thức trong Maple

Trang 2

Nội dung chính

1.1 Các khái niệm 3

1.2 Phân loại biến 3

2 Việc lượng giá biểu thức 5 2.1 Giới thiệu chung 5

2.2 Luật Lượng giá đầy đủ 5

2.3 Cấp bậc của việc lượng giá 10

2.4 Sự trì hoãn việc lượng giá 13

3 Phụ lục 17 3.1 Giới thiệu thành viên nhóm biên soạn 17

3.2 Tài liệu tham khảo 17

3.3 Danh sách tập tin đính kèm 17

Trang 3

1 Các loại biến

1.1 Các khái niệm:

Tên biến : là một xâu ký tự, gồm chữ cái, chữ số, ký tự gạch dưới _

o Độ dài của tên phụ thuộc vào nền của hệ điều hành, hệ điều hành 32-bit là 524,271 ký tự, 64-bit là 34,359,738,335 ký tự

o Tên biến chỉ có thể bắt đầu bằng chữ cái hoặc ký tự _ (Lưu ý: biến có tên bắt đầu bằng ký tự _ được Maple xem là biến toàn cục)

o Có 2 loại tên biến là ký hiệu (x , y , x_y_z , hello_there…), và tên theo chỉ số (x[1] , x[2] , x[3]…)

o Maple phân biệt chữ hoa và chữ thường nên Hello khác hello

o Không được đặt tên trùng với 47 từ khóa sau đây:

Trạng thái của biến : mỗi biến trong Maple có một trong hai trạng thái:

o Đã được gán (assigned variables): mỗi biến là một cái tên đại diện cho

một giá trị nào đó Một biến đã được gán đại diện cho gần như bất kỳ thứ gì: một con số cụ thể, một biểu thức, một hàm, một phương trình, một đồ thị, một lời giải, một biến khác v.v…Một biến đã được gán thỉnh thoảng được

gọi là một biến lập trình vì cách chúng thể hiện ít nhiều gì cũng giống với

một biến lập trình truyền thống trong các ngôn ngữ lập trình Biến đã được gán cũng thỉnh thoảng được gọi là "nhãn của một kết quả" hay đơn giản là

"nhãn"

o Chưa được gán (unassigned variables): mỗi biến là một cái tên chưa đại

diện cho một giá trị đặc biệt nào Biến chưa được gán thỉnh thoảng được gọi

là "biến tự do" (free variables) chúng sẽ được tự do làm đại diện cho bất kỳ giá trị nào Hay thỉnh thoảng chúng cũng được gọi "ẩn" (unknowns) vì chúng chưa có một giá trị cụ thể Những cách gọi khác nữa là xem biến chưa được

gán như một biến toán học, một ký hiệu toán học, một ẩn toán học, một ẩn

đại số, biến vô định

Trang 4

Biến trong Maple chia làm hai loại: biến toán học và biến lập trình

Biến toán học: đại diện cho một ẩn số trong toán học.

Biến lập trình: là những biến có thể gán giá trị nào đó và giá trị được lưu trữ

cho tận đến lúc nó bị thay đổi

Cách đơn giản nhất:

o Biến lập trình: biến đã được gán

o Biến toán học: biến có giá trị bằng tên biến

Sự định giá:

o Một tên được gán giá trị khác tên nó sẽ trở thành biến lập trình còn nếu chưa từng được gán giá trị thì nó sẽ nhận chính tên nó làm giá trị và được

xem như kí hiệu biểu thị ẩn số trong toán học

o Việc phân biệt một biến là biến toán học (ẩn số) hay biến lập trình là rất

quan trọng trong Maple

Ví dụ:

[> restart;

[> z := y;

y := t;

t := x^2 + 5*x - 12;

:=

z y

:=

y t

:=

t x2 5 x 12

[z, y, t là biến lập trình, x là biến toán học

[> z;

 

x2 5 x 12

[> y;

 

x2 5 x 12

[> t;

 

x2 5 x 12

[> x;

x

[thay x = 10, tính lại giá trị t

[> x := 10; # x trở thành biến lập trình

:=

x 10 [> t;

138 [> z;

138 [> y;

138

Trang 5

2 Việc lượng giá biểu thức

2.1 Giới thiệu chung

Trong phần này ta sẽ tìm hiểu một số chi tiết về quá trình xử lý bên trong của Maple Chúng ta sẽ xem xét các quy luật lượng giá đối với biến, biểu thức và hàm

2.2 Luật Lượng giá đầy đủ

Định nghĩa : Luật lượng giá là cách thức mà Maple quyết định “điều trả về".

("điều trả về" là giá trị cụ thể hoặc biến toán học)

Ví dụ, nếu p đại diện cho biểu thức x^2+2*x+1 x đại diện cho số 3 thì chúng

ta sẽ không biết chắc Maple sẽ lượng giá p như thế nào Nếu ta hỏi ý nghĩa của p

thì Maple sẽ trả về biểu thức x^2+2*x+1 hay 3^2+2*3+1 hay 16?

Thông thường trong hầu hết các trường hợp, Maple sử dụng một luật lượng giá

gọi là Luật lượng giá đầy đủ (full evaluation)

Điều đó có nghĩa là khi Maple gặp một tên biến, nó sẽ truy ra giá trị của biến

đó (nếu có) Nếu giá trị của biến đó chứa một biến khác thì giá trị của biến khác

đó cũng sẽ được truy ra Maple sẽ tiếp tục quá trình lượng giá như thế cho đến khi tìm đến được hoặc những giá trị số cụ thể hoặc những biến toán học và gán trở lại cho biến tương ứng

Ví dụ 1:

[Trong ví dụ này, x là một biến toán học

[> x := 'x';

[Lập biểu thức y chứa biến x

[> y := 1+x;

[Gán x một giá trị số cụ thể

[> x := 5;

[Ta xem xét quá trình Maple lượng giá biểu thức [1+x^2+y [> 1+x^2+y;

32

[Đầu tiên x trong biểu thức mang giá trị là 5 vì thế biểu [thức 1+x^2+y thành 1+5^2+y y mang giá trị 1+x, vì thế [1+5^2+y thành 1+5^2+1+x, nhưng x có giá trị bằng 5 nên kết [quả cuối cùng 1+5^2+1+5=32 là kết quả của biểu thức [1+x^2+y

Trang 6

Ví dụ 2:

[> x := 'x': y := 'y': z := 'z':

[Lần lượt thực hiện các phép gán trong cụm xử lý (*) sau: [> x := y;

y := z;

z := 3;

x :=

y :=

z := 3

[> x;

3

[> z := 5;

z := 5

[> x;

5

[Trong ví dụ này, x trỏ đến y, y trỏ đến z, và lúc đầu thì z

[trỏ đến 3, vì thế x (và y) mang giá trị là 3 Do đó lúc [sau z được trỏ tới 5 nên x (và y) được lượng giá là 5 (đây

[là Luật lượng giá đầy đủ) Maple truy theo hướng này cho

[tới khi nó gặp “điểm kết thúc” nghĩa là nó đến được một [trong hai trường hợp hoặc một số cụ thể hoặc một biến chưa [được khởi trị

Trang 7

Ví dụ 3:

[Ta xét một ví dụ với các dòng lệnh tương tự ví dụ 2 nhưng [kết quả rất khác biệt

[> x:='x'; y:='y'; z:='z';

x := x

y :=

z :=

[Ta sẽ thay đổi trật tự của 3 dòng lệnh trong ví dụ trên ta [được 3 dòng lệnh (**):

[> z := 3;

y := z;

x := y;

z := 3

y := 3

x := 3

[> x;

3

[> z := 5;

z := 5

[> x;

3

[Trong ví dụ này, đầu tiên z gán giá trị bằng 3 Sau đó, y

[được gán bằng z, và ban đầu z được gán giá trị bằng 3 [Chính vì thế, y được gán giá trị bằng 3, không phải z (đây

[là Luật lượng giá đầy đủ) Tương tự, x được gán bằng 3, [không phải y Và vì thế trong ví dụ này, giá trị của z bị [thay đổi, giá trị của xy không bị thay đổi

Trang 8

Giải thích:

 Một lý giải khá đơn giản cho sự khác biệt kết quả giữa 2 ví dụ trên là trong ví

dụ đầu thì quá trình lượng giá của Maple đã kết thúc và trong ví dụ sau thì quá trình lượng giá của Maple chưa kết thúc

 Ta xét ví dụ 3 quá trình lượng giá kết thúc nghĩa là khi cụm xử lý (*) được thi hành z, y, x cùng được gián giá trị là 3 (gặp “điểm kết thúc”), vì vậy khi thay đổi giá trị của z thì chỉ đơn giản giá trị z bị thay đổi

 Trong ví dụ 2, khi cụm xử lý được thi hành do thứ tự của các dòng lệnh

x:=y, y:=z, z:=3 nên khi thực hiện dòng lệnh đầu tiên Maple chỉ lượng x

giá đến được biến chưa được gán giá trị y, tương tự y chỉ được lượng giá tới z, và

z được lượng giá tới 3; tiếp tục xét, khi thực hiện lệnh x;x, y, z đã trở thành biến lập trình nên x được lượng giá bằng y, y được lượng giá bằng z, z được lượng giá bằng giá trị mới là 5, nên x = y = z = 5

Ghi chú: Từ 2 ví dụ trên ta thấy, trật tự của các dòng lệnh cũng ảnh hưởng đến việc

chúng được thi hành Hay nói một cách khác thì phương thức mà Maple thi hành một dòng lệnh thường không giống như cách bạn nhìn chúng độc lập nhau Chúng ta cần xem

xét qua tất cả các dòng lệnh được thi hành trước để quyết định được ý nghĩa của dòng

lệnh hiện tại

Ví dụ 4:

Ghi chú: Thông thường (không phải là luôn luôn), Maple dùng Luật lượng giá đầy đủ

cho tất cả đầu vào kể cả hàm và lệnh trong Maple

[Và đây cũng là sự lượng giá đầy đủ, ta xét hàm f

[> f := x -> x^2-1;

[Gán giá trị cho z

[> z := 3;

[Khi ta nhập dòng lệnh f(z); Maple cần lượng giá cả fz [Đầu tiên Maple lượng giá f là một hàm, sau đó giá trị của z

[là 3, và sau đó thế giá trị của z vào hàm, tính giá trị [của hàm tại 3, và cho ra kết là 8

[> f(z);

8

Trang 9

Ví dụ 5:

Bạn có thể dựa vào các ví dụ đã nêu ở trên rút ra kinh nghiệm cho mình Nếu

bạn gặp một thông báo lỗi lạ, trước tiên hãy kiểm tra tên biến bạn dùng có thật sự chưa được sử dụng và không mang giá trị nào hay không.

Ngoài ra, Maple còn có một vài quy luật lượng giá khác và tất nhiên cũng có một số ngoại lệ Trong phần còn lại, chúng ta sẽ xem xét các quy luật và các ngoại

lệ quan trọng nhất

[Một số thông báo lỗi thường gặp:

[> solve(x^2 = 4, x);

Warning, solving for expressions other than names or

functions is not recommended

Error, (in solve) a constant is invalid as a variable, 3 [Maple trước tiên lượng giá các giá trị đưa vào của câu lệnh [solve cho nên x^2=4 được lượng giá thành 9=4 (đây không [phải là lỗi sai mà chỉ là một phương trình không có nghiệm) [và x cuối được lượng giá bằng 3 Đây chính là điều mà Maple [báo lỗi (lệnh solve chỉ có thể giải phương trình tìm biến [chứ không tìm hằng số)

[> plot(x^2, x = 0 4);

Error, (in plot) invalid arguments

[Maple lượng giá các giá trị đưa vào của câu lệnh plot cho [nên x^2 được lượng giá bằng 9 (đây không phải là lỗi sai) [và x=0 4 được lượng giá thành 3=0 4 Đây là điểm vô lý và [dẫn đến thông báo lỗi

[Maple không phải lúc nào cũng dùng quy luật lượng giá đầy [đủ Câu lệnh sau đây không khác gì so với câu lệnh trước [nhưng câu lệnh này không dẫn tới thông báo lỗi dù x vẫn [mang giá trị 3

[> seq(x^2, x = 0 4);

, , , ,

0 1 4 9 16 [Cần lưu ý là x vẫn mang giá trị cụ thể

[> x;

3 [Vì Maple không dùng quy luật lượng giá đầy đủ đối với các [giá trị đưa vào trong lệnh seq

Trang 10

2.3 Cấp bậc của việc lượng giá

Để tìm được kết quả cuối cùng thì Maple có thể phải tìm thông qua nhiều giá trị trung gian Chúng ta có thể kiểm soát quá trình lượng giá này bằng một dạng

đặc biệt của hàm evaleval(tên biến hoặc biểu thức, bậc lượng giá);

Xét ví dụ 1:

[> x := 'x': y := 'y': z := 'z':

[> x := y;

[> y := z;

[> z := 3;

[Nếu chúng ta lượng giá x, Maple sẽ dùng sự lượng giá đầy đủ [và trả về giá trị là 3

[> x;

3

[Nhưng để Maple đi từ x đến 3 phải trải qua các giá trị [trung gian là yz Ở đây chúng ta xem xét các giá trị [trung giá trị trung gian và cách thức để đến được chúng

[Tên của những giá trị trung gian này là những Bậc của sự [lượng giá (levels of evaluation) và chúng ta có thể quan

[sát cụ thể từng bậc của sự lượng giá thông qua lệnh eval

[nêu trên

[> eval( x, 1 );

[> eval( x, 2 );

[> eval( x, 3 );

3 [> eval( x, 4 );

3

[Trong ví dụ này ta cần quan tâm ta có thể gọi hàm eval trả [về bậc 4 của sự lượng giá, nhưng bậc cao nhất là bậc 3 nên [giá trị trả về cũng chỉ là 3

Trang 11

Ví dụ 2:

[> unassign('x','y','z'); # lúc này x,y,z là biến toán học

[Ta thực hiện khối lệnh (*) sau:

[> f := a*x+b*y;

[> x := y;

[> y := z;

[> z := 2;

[> b := c;

[> c := a;

[> a := d;

f := d x C d

x :=

y :=

z := 2

b :=

c :=

a :=

[Điều đáng quan tâm ở đây là khi thực hiện cụm xử lý

[thì f := d x C d , vì trong cụm xử lý thì chỉ có d là biến [toán học, trước khi thực hiện dòng lệnh gán x := y, y := z,

[z := 2; x , y , z là biến toán học nhưng sau đó là biến lập [trình (điều này giải thích tại sao khi thực hiện lại khối [lệnh (*) mà không thực hiện lại unassign('x','y','z') thì [

f := 4 ),các biến còn lại là biến lập trình Nên Maple

[lượng giá đầy đủ f và kết quả như đã thấy Như vậy, các [phép lấy bậc của sự lượng giá sẽ cho kết quả:

[> eval( f, 1 );

d x C d

[> eval( f, 2 );

[> eval( f, 3 );

Trang 12

Những bậc của sự lượng giá không hoạt động đối với một số hàm

Ví dụ 3:

[> g := u*sin(u+v);

[> u := s;

[> v := t;

[> s := t;

[> t := Pi/4;

g := u sin(u C v )

u := s

v := t

s := t

t := 1

4 p [Bây giờ ta lượng giá g

[> eval( g, 1 );

u sin(u C v )

[> eval( g, 2 );

s sin(u C v )

[> eval( g, 3 );

t sin(u C v )

[> eval( g, 4 );

1

4 p sin(u C v ) [> eval( g, 5 );

1

4 p sin(u C v ) [Như vậy, luật lượng giá không ảnh hưởng trong hàm sin Tuy [nhiên, nếu ta dùng hàm eval mà không cho tham số bậc thì g

[vẫn bị lượng giá đầy đủ

[> eval( g );

1

4 p

Trang 13

2.4 Sự trì hoãn việc lượng giá

Trong một vài trường hợp chúng ta cần trì hoãn sự lượng giá một biểu thức

hoặc một biến trong Maple

Ta có thể trì hoãn sự lượng giá bằng cách đặt các biến hoặc biểu thức trong cặp

dấu nháy đơn ''

Luật lượng giá cho biểu thức có dấu nháy đơn: Theo nguyên tắc, bất cứ khi nào Maple duyệt qua biến hoặc biểu thức đặt trong dấu nháy đơn, Maple sẽ loại bỏ cặp dấu nháy đơn và không lượng giá biến hoặc biểu thức đặt trong dấu nháy đơn

đó

Ví dụ 1:

Ghi chú: Một cặp dấu nháy đơn chỉ ngăn cản lượng giá x trong một câu lệnh

Vì vậy, mà chúng ta cần xem xét kỹ dòng lệnh mà Maple xuất ra sau khi nhấn enter Ở trường hợp này, trong dòng lệnh (*)x không bị bao bọc bởi dấu nháy Vì vậy, trong các dòng lệnh tiếp theo, khi đề cập đến y, Maple sẽ thực hiện sự lượng giá đầy đủ và xuất ra giá trị y bằng 6 Như vậy, sự lượng giá x chỉ bị ngăn cản trong câu lệnh định nghĩa y

[> x := 3; # x mang một giá trị cụ thể

[Trong dòng lệnh tiếp theo, Maple sẽ lượng giá x, và theo [luật lượng giá đầy đủ thì sau dòng lệnh bên dưới y mang giá [trị là 6

[> y := x + 3;

y := 6

[Nhưng chúng ta muốn rằng giá trị của y đơn thuần là x+3 [Chúng ta có thể làm điều này thông qua cặp dấu nháy đơn bọc [quanh x để ngăn cản sự lượng giá lên biến x, ví dụ như [trong dòng lệnh dưới đây thì x không được lượng giá

[> y := 'x' + 3;

y := x C 3

(*)

[> y;

6

[Lượng giá bậc một y thì y mang giá trị là x+3(theo dòng

Trang 14

Ví dụ 2:

Ví dụ 3:

[> x := 3;

:=

x 3 [> 'x' = x;



x 3

[> %;



3 3

[> y := 3;

y := 3

[> x := '''y''';

x := ' 'y ' '

[> eval( x, 1 );

' 'y ' '

[> eval( x, 2 );

'y '

[> eval( x, 3 );

[> eval( x, 4 );

3

[> x;

'y '

[> eval( x );

Trang 15

Ghi chú:

 Trong ví dụ trên thì đáng quan tâm là dòng lệnh biểu thức xeval(x)

 Khi Maple được yêu cầu lượng giá x, nó bắt đầu gán x bằng ''y'' Theo luật lượng giá cho biểu thức có dấu nháy đơn, Maple sẽ tự động loại bỏ một cặp dấu nháy đơn và thoát ra khỏi sự lượng giá, và kết quả cuối cùng là 'y'

 Khi Maple được yêu cầu lượng giá biểu thức eval(x).Đầu tiên, Maple cần lượng giá đối số của lệnh eval Maple lượng giá x'y' Sau đó, giá trị của đối số được đưa tới eval, Maple gọi eval đối số này, vì thế Maple gọi

eval('y') Nhưng eval lại áp dụng luật lượng giá cho biểu thức có dấu nháy đơn ở bên trên và vì thế nó loại bỏ cặp dấu nháy đơn của'y' đưa ra kết quả cuối cùng là y

Dấu nháy đơn không ngăn chặn việc tự động thu gọn biểu thức của Maple.

Ví dụ 4:

Sau đây trình bày cách sử dụng dấu nháy đơn để định nghĩa y dưới dạng một phương trình bình thường mà không phải lo lắng về các tên biến a,b,c,x có mang giá trị nào không

Ví dụ 5:

Tiếp theo là các ví dụ khác để giúp ta hình dung rõ hơn về tác dụng của dấu nháy đơn

[> y := 'a'*'x'^2+'b'*'x'+'c'=0;

y := a x2C b x C c = 0

[Cách khác

[> y:='a*x^2+b*x+c=0';

y := a x2C b x C c = 0

[> u := 5:

[> 'u + u';

2 u

[> %;

10

Trang 16

Ví dụ 6:

[> x := 5;

[> plot(x^2, x=-5 5);

:=

x 5 Error, (in plot) invalid arguments

[Trong câu lệnh trên x với vai trò là tham số của lệnh plot

[được lượng giá thành plot(5^2, 5=-5 5) Chính điểm vô lý [5=-5 5 đã gây ra thông báo lỗi trên

[> plot(x^2, 'x'=-5 5);

[Lần này thì x trong tham số đầu được lượng giá thành [5^2=25, x trong tham số sau sẽ được lượng giá theo quy luật [lượng giá biểu thức chứa dấu nháy đơn thành x=-5 5 Vì [vậy, đồ thị là một đường thẳng

[> plot('x'^2, 'x'=-5 5);

[Tương tự như trên các tham số trong lệnh plot được lượng [giá thành plot(x^2,x=-5 5) nên đồ thị là một parpbol

[> plot('x'^2, x=-5 5);

Error, (in plot) invalid arguments

[Chính điểm vô lý trong biểu thức 5=-5 5 sau khi lượng giá

Ngày đăng: 26/08/2013, 19:10

Xem thêm

HÌNH ẢNH LIÊN QUAN

 Tiếp theo là các ví dụ khác để giúp ta hình dung rõ hơn về tác dụng của dấu nháy đơn. - vn 2
i ếp theo là các ví dụ khác để giúp ta hình dung rõ hơn về tác dụng của dấu nháy đơn (Trang 15)

TỪ KHÓA LIÊN QUAN

w