12 23 k 1,k 1n nn ,1 k 1,k
3.2 Phương phỏp xử lớ Symbolic:
Tư tưởng của phương phỏp là phừn tớch chuỗi dạng text mụ tả biểu thức thành cỏc phần tử toỏn học cơ bản và lưu trữ theo cấu trỳc dữ liệu cừy nhị phừn, sử dụng cỏc thuật giải thớch hợp trờn cừy nhị phừn để tớnh gớa trị, tớnh đạo hàm của biểu thức theo cỏc biến.
Xột một hàm số được nhập vào mỏy tớnh dưới dạng một chuỗi ký tự. Nú cũng bao gồm bốn thành phần là : hằng số, biến số, toỏn tử và cỏc hàm chuẩn. Ở đõy ta giới hạn cỏc thành phần nhập vào như sau
Hằng số : nhập vào chỉ là cỏc số vớ dụ như 0, 1, 2, 10.12, 0.56…
Biến số : là một ký tự hoặc một chuỗi ký tự bất kỳ vớ dụ như x, y, z, xyz,
abc, x1, xy23…vv
Toỏn tử : bao gồm cỏc toỏn tử cơ bản + Phộp cộng hai ngụi ….+…. + Phộp trừ hai ngụi ….-…. + Phộp nhõn ….*…. + Phộp chia …./…. + Phộp tớnh luỹ thừa ….^…. + Phộp cộng một ngụi +…. + Phộp trừ một ngụi -….
Cỏc hàm chuẩn : bao gồm cỏc hàm cơ bản sau
+ Hàm sin: cú thể nhập vào là sin(), SIN(), Sin(), hoặc sIn() … + Hàm cos: cú thể nhập vào là cos(), COS(), Cos(), hoặc cOs()… + Hàm tang: cú thể nhập vào là tg(), TG(), Tg() hoặc tG()
+ Hàm cotang: cú thể nhập vào là cotg(), COTG(), Cotg() hoặc cOtg()
+ Hàm e mũ: cú thể nhập vào là exp(), EXP(), Exp(), hoặc eXp().. + Hàm căn bậc hai : cú thể nhập vào là sqrt(), SQRT(), Sqrt(),
hoặc sqRt()..
Ngoài ra trong chuỗi ký tự thể hiện hàm số cũn cỳ hai phần tử đặc biệt là dấu mở ngoặc ‘(’ và dấu đúng ngoặc ‘)’. Như vậy từ cỏc thành phần nờu ra ở trờn và để lưu trữ, nhận biết được hàm số ta qui định ra 18 loại phần tử như trong bảng sau:
Bảng phõn loại cỏc phần tử trong hàm số
1: Hằng số 7: Toỏn tử luỹ thừa 13 : Hàm cos()
2: Biến số 8:Toỏn tử trừ một ngụi 14 : Hàm tg() 3: Toỏn tử cộng hai ngụi
9: Toỏn tử cộng một ngụi
15 : Hàm cotg()
4: Toỏn tử trừ hai ngụi 10 : Dấu mở ngoặc 16 : Hàm e mũ exp() 5 : Toỏn tử nhõn
11 : Dấu đúng ngoặc 17:Hàm căn bậc hai sqrt()
6 : Toỏn tử chia
12 : Hàm sin() 18 : Hàm lụga lờpe ln()
Một chuỗi nhập vào sẽ được phõn tớch thành vector cỏc phần tử trước khi tạo cấu trỳc cõy để xử lớ,
Vớ dụ: Hàm số ‘ x^2 + y*cos(z) - exp(-x) ’ sẽ được lưu trữ như sau
2 7 1 3 2 5 1 3 1 0 2 1 1 4 1 6 1 0 8 2 1 1
X ^ 2 + y * cos ( z ) - exp ( - x )
Vớ dụ : Lưu vector cỏc phần tử theo cấu trỳc cõy nhị phõn: f = x + y + z*sin(x)
Hỡnh 3.2.1: Sơ đồ cấu trỳc cõy phần tử của chuỗi.
Trong đú mỗi nỳt của cõy nhị phõn là một cấu trỳc cú năm trường
+ Type : là số nguyờn cho biết nỳt đỳ thuộc loại nào trong 18 loại ở bảng cỏc phần tử
+ Value : là số thực cho biết giỏ trị của nỳt đỳ + Describle : là chuỗi ký tự thể hiện nỳt đỳ + PL : là con trỏ trỏi của nỳt
+ PR : là con trỏ phải của nỳt Cấu trỳc trờn được cài đặt như sau:
Typedef struct node { int type; double value; CString describle; node * PL; node * PR; } element;
Với vớdụ trờn cú hỡnh ảnh cõy như sau: +
+ *
x y
x
Hỡnh 3.2.2: Cấu trỳc cõy phần tử