Các biểu thức sẽ được biểu diễn một cách đệ quy và sự đệ quy phải bắt đầu từ một nơi nào đó. Nơi bắt đầu đó chính là các nguyên tử. Trong Mathematica, các nguyên tử là mỗi kí hiệu, số hoặc chuỗi. Kí hiệu là một dãy các kí tự và số tự nhiên (có thể là $), không bắt đầu với một số tự nhiên. Ví dụ như a2Dd là một kí hiệu. “Một số” ở đây có nghĩa là một số tự nhiên hoặc là một số thực. Bốn dạng khác là số hữu tỷ, số nguyên Gauss, số hữu tỷ Gauss và số phức thì không phải là những nguyên tử. Cuối cùng, chuỗi là dãy các kí tự ASCII được đặt giữa 2 dấu ngoặc kép (“A book ”).
Ý nghĩa của biểu thức
Có một vài cách nghĩ về biểu thức giúp chúng ta sử dụng chúng có hiệu quả. Function[argument]...ví dụ: Sin[x]
Command[argument]...ví dụ: Expand[(x+y)^10] Operator[Operands]...ví dụ: Plus[x,y]
Type[parts]...ví dụ: List[a, b, c, d]
Dạng (form) của biểu thức
Chúng ta có thể truy suất form bằng lệnh FullForm. Xem ví dụ sau:
Biểu thức... Head ...FullForm
abc ... Symbol... abc 27 ...Integer ...27 ¾ ...Rational ...Rational[3,4] Bây giờ chúng ta sẽ xem xét một vài biểu thức phức tạp hơn:
Biểu thức ...FullForm
x+y+z ...Plus[x, y, z] x y z ...Times[x, y, z] x/y... Times[x, Power[y, -1]] {x, y, z} ...List[x, y, z] Cuối cùng là một vài kí hiệu kì quái:
Biểu thức... FullForm % ... Out[] %%... Out[-2] %5... Out[5] _ ...Blank[] x_ ...Pattern[x, Blank[]] x_Integer... Pattern[x, Blank[Integer]] # ...Slot #& ...Function[Slot[1]]
Các phần của biểu thức
Xem ví dụ sau:
exp=f[x1, x2, x3, x4];
{exp[[0]], exp[[1]], exp[[2]], exp[[3]], exp[[4]]} {exp[[-4]], exp[[-3]], exp[[-2]], exp[[-1]]}
{f, x1, x2, x3, x4} {x1, x2, x3, x4}
Như vậy, số dương trong cặp ngoặc vuông tương ứng với việc đếm từ trái sang phải, còn số âm thì ngược lại.
Cấu trúc cây của biểu thức
Chúng ta thử một vài ví dụ lấy các phần của biểu thức exp1
exp1[[0]] ...kq: Plus
exp1[[1]]... kq: x3
exp1[[1]][[2]]... kq: 3
Có thể dùng dạng sau để thay cho lệnh cuối ở trên
exp1[[1, 2]] ...kq: 3 Tiếp tục thử các trường hợp khác
exp1[[1, 2, 1]] ...kq: báo lỗi vì thành phần đó không tồn tại
exp1[[2, 1, 2]] ...kq: z
Nếu biểu thức quá dài thì chúng ta sẽ rất khó để thấy được dạng cấu trúc cây của nó. Chúng ta có hai phương pháp để xem xét được biểu thức: Shortvà Shallow.
Short[exp, n] – in biểu thức ra với chiều dài là n hàng.
Các mức độ (level) của biểu thức, chiều sâu (depth) của biểu thức
Có thể hiểu ý nghĩa từ “mức độ” như thế này: theo cây cấu trúc ở trên, đỉnh trên cùng của cây cấu trúc là mức độ 0, hàng tiếp theo là mức độ 1, v.v… Các mức độ được miêu tả bởi các số nguyên n hoặc –n nằm trong ngoặc nhọn {n}, {-
n}, hoặc {n1, n2} hoặc Infinity.
Chúng ta gọi lại biểu thức exp1 = x^3 + (1+z)^2 ở trên và phân tích một vài ví dụ:
Level[exp1, {2}]... kq: {x, 3, 1+z, 2}
Kết quả cho thấy rằng, các cây con có gốc ở mức độ 2 cũng được liệt kê dưới dạng biểu thức. Để thấy các phần (kể cả cây con) tại mức độ 2 và cao hơn (nghĩa là tính luôn mức độ 1), chúng ta bỏ đi dấu ngoặc nhọn:
Level[exp1, 2]... kq: {x, 3, x^3, 1+z, 2, (1+z)^2}
Nếu viết dạng {n1, n2} sẽ cho các cây con mà gốc của chúng nằm giữa n1 và n2.
Level[f0[f1[f2[f3[f4[f5]]]]], {2, 4]
{f4[f5], f3[f4[f5]], f2[f3[f4[f5]]]}
Chiều sâu của một biểu thức là số nút lớn nhất dọc theo đường đi từ gốc đến lá trên biểu thức.
Depth[exp1]... kq: 4
Cũng có các mức độ âm được sử dụng để đếm từ dưới lên. Thực chất cái được đếm chính là chiều sâu (depth) của các biểu thức con. Chẳng hạn như {-1} sẽ cho các biểu thức con có depth đúng bằng 1 (tức là những cái lá của cây cấu
trúc), còn -1 (không có ngoặc nhọn) sẽ cho ra tất cả các biểu thức con với depth tối thiểu là 1 (tức là, liệt kê tất cả các biểu thức con đúng nghĩa).
Level[exp1, {-1}]... kq: {x, 3, 1, z, 2}
Level[exp1, -1] ...kq: {x, 3, x^3, 1, z, 1+z, 2, (1+z)^2}
Nếu viết {-2} sẽ cho tất cả các cây con depth bằng 2, còn -2 sẽ cho tất cả các cây con với depth tối thiểu bằng 2.
Level[exp1, {-2}] ...kq: {x^3, 1+z}
Level[exp1, -2]... kq: { x^3, 1+z, (1+z)^2}
Level[exp1, Infinity]... kq: {x, 3, x^3, 1, z, 1+z, 2, (1+z)^2}
Một phương trình với nghiệm chính xác không được tìm