Professional Documents
Culture Documents
===============================================================
TIỂU LUẬN
Đề tài: Lập trình hàm trong Maple và ứng dụng
Giáo viên hướng dẫn: Nguyễn Hữu Điển
Sinh viên thực hiện : Ngô Minh Tuyên
============================================================= 1
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
Phần A:
Giới Thiệu.
1.Giới thiệu Maple.
Maple là một hệ phần mềm chuyên dụng cho công việc tính toán bao
gồm các tính toán thuần túy bằng ký hiệu toán học, các tính toán số và các
tính toán bằng đồ thị. Sản phẩm này do trường Đại học Tổng hợp Waterloo
(Canada) và trường đại học kỹ thuật Zurich (ETZ) xây dựng và đưa vào
thương mại đầu tiên năm 1985. Qua nhiều lần cải tiến, hiện nay Maple đã
được phổ biến rộng rãi trên thế giới. Những đặc tính căn bản của Maple là
dễ sử dụng, đòi hỏi cấu hình máy không lớn, đáp ứng nhu cầu tính toán của
nhiều đối tượng. Ngoài ra Maple còn được thiết kế thích hợp với chế độ
tương tác người và máy, cho phép người dùng phát triển các modul chuyên
dụng, lập trình hoặc thư viện riêng ngay trong phần mềm của chúng.
2.Giới thiệu sơ qua về lập trình tính toán trong Maple:
Ð Một chương trình tính toán thường có ba phần:
¨Dữ liệu vào.
¨Phương pháp.
¨Kết quả.
ÐCấu trúc của một chương trình trong Maple thường có dạng:
Tên_chương_trình:=proc(các đối số)
local các biến;
Thuật toán xử lý;
end;
3.Giới thiệu bài toán nội suy:
Trong thực tế,thường gặp những hàm số mà không biết biểu
thức giải tích cụ thể của chúng.Thông thường bằng đo đạc, thực nghiệm ta
chỉ thu được trong dạng bảng số,nghĩa là biết giá trị yi tại các điểm tương
ứng (i=0..n) thuộc [a,b] nào đó,trong khi đó ta muốn biết giá trị của y tại
một thời điểm x’ nào đó với x’≠ và x’ [a,b],i = 0..n.Cũng có trường
hợp,biết quy luật biến đổi của y = f(x) nhưng f(x) có dạng phức tạp,thì giá trị
y’ = f(x’) cũng khó mà tính được.Vì vậy người ta tím cách thay hàm f(x) bởi
hàm F(x) đơn giản hơn sao cho F(x’) – f(x’) chấp nhận được.Việc thay hàm
f(x) bởi hàm F(x) được gọi là xấp xỉ hàm hay nội suy.
Có nhiều phương nội suy khác nhau,ví dụ:
Nội suy hằng từng đoạn:Phương pháp nội suy đơn giản nhất là xác định
giá trị dữ liệu gần nhất,và gán giá trị như nhau.Trong nội suy đa biến,điều
này có thể là một sự lựa chon thuận lợi cho tốc độ và tính đơn giản của nó.
============================================================= 2
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
============================================================= 3
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
Đa thức nội suy được ứng dụng để làm xấp xỉ đường cong phức tạp hơn,ứng
dụng lien quan đến giá trị của logarit tự nhiên và các hàm lượng giác,là cơ
sở cho các thuật toán cấu phương và phương trình vi phân bằng số bình
thường…
============================================================= 4
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
============================================================= 5
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
Phần B:
Ứng Dụng.
1.Đa thức nội suy lagrange:
1.1.Thuật toán:
Để được đa thức bậc n sinh ra từ bảng số:
,i = 0..n, [a,b].
Thỏa mãn điều kiện yi = , i = 0..n
DBước 1:
Lập đa thức cơ sơ bậc n:
DBước 2:
Ta chọn ;
============================================================= 7
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
2.Nội suy Neville’s.
Xấp xỉ hàm f(x) đi qua bằng đa thức nội suy .
2.1.Thuật toán:
DVÀO:Biến x ,các điểm và các giá trị tai các điểm đó
gán cho cột đầu tiên của bảng Q:
DRA:Các giá trị bảng Q và đa thức nội suy .
DBước 1: For i = 1…n
For j = 1…i
DBước 2:RA:Bảng Q và .
Kết thúc.
2.2.Khai triển trong Maple:
Xây dựng hàm interpNeville có dạng interpNevill(X,Y,u) trong đó
biến u.
CODE:
interpNeville := proc (X, Y, u)
local i, j, x, n, Q;
n := nops(X)-1;
if nops(x) <> nops(y) then return ERROR("Struct
function
interpLagrange([x_0..x_n],[y_0..y_n],variable)")
fi;
Q := array(0 .. n, 0 .. n, []);
x := array(0 .. n, []); j := 0;
for i from 1 to n+1 do
Q[i-1, j] := op(i, Y);
x[i-1] := op(i, X)
od;
for i from 1 to n do
for j from 1 to i do
Q[i, j] := ((u-x[i-j])*Q[i, j-1]-(u-x[i])*Q[i-1,
j-1])/(x[i]-x[i-j])
od;
od;
============================================================= 8
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
i := 0;
for i from 0 to n do
printf("%12f", x[i]);
for j from 0 to i do
printf("%12f", Q[i, j])
od;
printf(" \n ")
od;
end;
VÍ DỤ:
interpNeville([2.0,2.2,2.3],[0.6931,0.7885,0.8329],
2.1);
2.000000 0.693100
2.200000 0.788500 0.740800
2.300000 0.832900 0.744100 0.741900
interpNeville([1.0,1.3,1.6,1.9,2.2],[0.7651977,0.62
00860,0.4554022,0.2818186,0.1103623], 1.5);
1.000000 0.765198
1.300000 0.620086 0.523345
1.600000 0.455402 0.510297 0.512471
1.900000 0.281819 0.513263 0.511286 0.511813
2.200000 0.110362 0.510427 0.513736 0.511830 0.511820
DRA:Mảng F và đa thức .
============================================================= 10
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
1.248903367 − 0.4837056667 v − 0.1087338888 ( v − 1.0 ) ( v − 1.3 )
+ 0.06587839497 ( v − 1.0 ) ( v − 1.3 ) ( v − 1.6 )
+ 0.001825102950 ( v − 1.0 ) ( v − 1.3 ) ( v − 1.6 ) ( v − 1.9 )
P(1.5)= 0.5118199946
============================================================= 11
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
D Bước 1.2:
interpHermite([1.3,1.6,1.9],[0.6200860,0.4554002,0.
2818186], [-0.5220232,-0.5698959,-0.5811571],1.5);
============================================================= 13
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
P(1.5)=
============================================================= 14
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
DBước 3:
DBước 4:For i = 1,2,…n-1
DBước 5:
DBước 6:For j = n-1 ,n-2,…,0
CODE:
interpCubicSpline := proc (X, Y)
local i, j, n, a, l, h, u, z, x, b, c, d, e, S;
n := nops(X)-1; if nops(X) <> nops(Y) or n <= 0
then return ERROR("Struct function
interpLagrange([x_0..x_n],[y_0..y_n])")
fi;
for i from 1 to n+1 do
============================================================= 15
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
if op(i, X) >= op(i+1, X) then return ERROR("List
X ordered x_0 < x_1<....<x_n") fi;
od;
for i from 1 to n do
if op(i, X) >= op(i+1, X) then return ERROR("List
X ordered x_0 < x_1<....<x_n") fi;
od;
a := array(0 .. n);
c := array(0 .. n);
b := array(0 .. n);
d := array(0 .. n);
x := array(0 .. n);
h := array(0 .. n-1);
for i to n+1 do
x[i-1] := op(i, X);
a[i-1] := op(i, Y)
od;
for i from 0 to n-1 do
h[i] := x[i+1]-x[i]
od;
e := array(0 .. n-1);
for i to n-1 do
e[i] := (3*a[i+1]-3*a[i])/h[i]-(3*a[i]-3*a[i-
1])/h[i-1] end do; l := array(0 .. n);
u := array(0 .. n);
z := array(0 .. n);
l[0] := 1; u[0] := 0;
z[0] := 0; for i to n-1 do
l[i] := 2*x[i+1]-2*x[i-1]-h[i-1]*u[i-1];
u[i] := h[i]/l[i];
z[i] := (e[i]-h[i-1]*z[i-1])/l[i]
od;
l[n] := 1;
z[n] := 0;
c[n] := 0;
for i to n do
j := n-i;
c[j] := z[j]-u[j]*c[j+1];
b[j] := (a[j+1]-a[j])/h[j]-
(1/3)*h[j](c[j+1]+2*c[j]);
============================================================= 16
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
d[j] := (1/3)*(c[j+1]-c[j])/h[j]
od;
S := array(0 .. n-1);
for j from 0 to n-1 do
S[j] := a[j]+b[j]*(v-x[j])+c[j]*(v-
x[j])^2+d[j]*(v-x[j])^3;
printf("%13f %13f %13f %13f\nS_(%d)=%a\n", a[j],
b[j], c[j], d[j], j, S[j])
od;
end;
Ví Dụ:
> interpCubicSpline([0.,0.25,0.50,0.75,01.0], [1,
1.64872127,2.71828183,4.48168907,7.38905610]);
1.000000 2.511552 0.000000 5.349900
S_(0)=1.+2.511551747*v+5.349899910*v^3
1.648721 4.194909 4.012425 0.184215
S_(1)=.599994043+4.194908907*v+4.012424932*(v-.25)^2+.1842150133*(v-
.25)^3
2.718282 6.970296 4.150586 11.385713
S_(2)=-.766865984+6.970295627*v+4.150586192*(v-.50)^2+11.38571300*(v-
.50)^3
4.481689 11.546135 12.689871 -16.919828
S_(3)=-4.177912022+11.54613479*v+12.68987094*(v-.75)^2-16.91982792*(v-
.75)^3
5.2.Nội suy trơn chặt:(Clamped Cubic Spline)
Xây dựng nội suy trơn từng khúc S cho hàm f(x).Cho các điểm
thỏa mãn
5.2.1.Thuật toán:
VÀO:
,
RA:
Bước 2:
============================================================= 17
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
DBước 4:
DBước 6:
CODE:
interpCubicSpline := proc (X, Y,F)
local i, j, n, a, l, h, u, z, x, b, c, d, e, S;
n := nops(X)-1; if nops(X) <> nops(Y) or n <= 0
then return ERROR("Struct function
============================================================= 18
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
interpLagrange([x_0..x_n],[y_0..y_n],[f'(x_0),f'(x_
n)])")
fi;
for i from 1 to n do
if op(i, X) >= op(i+1, X) then return ERROR("List
X ordered x_0 < x_1<....<x_n") fi;
od;
a := array(0 .. n);
c := array(0 .. n);
b := array(0 .. n);
d := array(0 .. n);
x := array(0 .. n);
h := array(0 .. n-1);
for i to n+1 do
x[i-1] := op(i, X);
a[i-1] := op(i, Y)
od;
for i from 0 to n-1 do
h[i] := x[i+1]-x[i]
od;
e := array(0 .. n);
e[0]:=3*(a[1]-a[0])/h[0]-3*op(1,F);
e[n]:=3*op(2,F)-3*(a[n]-a[n-1])/(h[n-1]);
for i from 1 to n-1 do
e[i] := 3*(a[i+1]-a[i])/h[i]-3*(a[i]-a[i-1])/h[i-
1] end do;
l := array(0 .. n);
u := array(0 .. n);
z := array(0 .. n);
l[0] :=2*h[0];
u[0] := 0.5;
z[0] := e[0]/l[0];
for i to n-1 do
l[i] := 2*(x[i+1]-x[i-1])-h[i-1]*u[i-1];
u[i] := h[i]/l[i];
z[i] := (e[i]-h[i-1]*z[i-1])/l[i]
od;
l[n] := h[n-1]*(2-u[n-1]);
z[n] := e[n]-h[n-1]*z[n-1]/l[n];
c[n] := z[n];
============================================================= 19
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
for i from 1 to n do
j := n-i;
c[j] := z[j]-u[j]*c[j+1];
b[j] := (a[j+1]-a[j])/h[j]-
(1/3)*h[j](c[j+1]+2*c[j]);
d[j] := (1/3)*(c[j+1]-c[j])/h[j]
od;
S := array(0 .. n-1);
for j from 0 to n-1 do
S[j] := a[j]+b[j]*(v-x[j])+c[j]*(v-
x[j])^2+d[j]*(v-x[j])^3;
printf("%13f %13f %13f %13f\nS_(%d)=%a\n", a[j],
b[j], c[j], d[j], j, S[j])
od;
end;
Ví dụ:
interpCubicSpline([1,2,5,6,7,8,10,13,17],[3.0,3.7,3
.9,4.2,5.7,6.6,7.1,6.7,4.5],[1.0,-0.67]);
3.000000 0.366667 -0.346832 0.046832
S_(0)=2.633333333+.3666666667*v-.3468315906*(v-1)^2+.4683159057e-1*(v-
1)^3
3.700000 -0.933333 -0.206337 0.026538
S_(1)=5.566666667-.9333333333*v-.2063368189*(v-2)^2+.2653839256e-1*(v-
2)^3
3.900000 -0.033333 0.032509 0.342144
S_(2)=4.066666666-.333333333e-1*v+.325087141e-1*(v-5)^2+.3421440100*(v-
5)^3
4.200000 1.166667 1.058941 -0.575737
S_(3)=-2.800000002+1.166666667*v+1.058940744*(v-6)^2-.5757374783*(v-
6)^3
5.700000 0.566667 -0.668272 0.160806
S_(4)=1.733333333+.5666666667*v-.6682716913*(v-7)^2+.1608059041*(v-7)^3
6.600000 -0.416667 -0.185854 0.017092
S_(5)=9.933333334-.4166666667*v-.1858539791*(v-8)^2+.1709196037e-1*(v-
8)^3
7.100000 -1.133333 -0.083302 0.011283
S_(6)=18.43333333-1.133333333*v-.8330221689e-1*(v-10)^2+.1128284362e-
1*(v-10)^3
6.700000 -1.883333 0.018243 -0.027677
S_(7)=31.18333333-1.883333333*v+.1824337572e-1*(v-13)^2-.2767654399e-
1*(v-13)^3
============================================================= 20
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN
Lập trình hàm trong Maple và ứng dụng.
===============================================================
Phần C.
Tài Liệu Tham Khảo
1.Hướng dẫn sử dụng Maple.Nguyễn Hữu Điển.
2. Burden R.L., Faires J.D. Numerical analysis (7ed., Brooks Cole, 2001).
5.wikipedia.org
The End.©®
============================================================= 21
Giảng viên:Nguyễn Hữu Điển.
Sinh viên :Ngô Minh Tuyên.Toán Tin 2 – k51 - BKHN