Ứng dụng maple trong khảo sát hàm số

Một phần của tài liệu Ứng dụng CNTT vào dạy Toán (Trang 93 - 124)

4.7.1. Các lnh ca Maple có th vn dng trong kho sát hàm s

Ta có thể sử dụng các hàm của Maple khi khảo sát hàm số, chẳng hạn như: xác định miền giá trị, khoảng đơn điệu, miền lồi, cực trị và điểm uốn, vẽđồ thị,...

* Xác định miền xác định của hàm số f(x):

Để xác định miền giá trị của các hàm phân thức được trình bày trong sách giáo khoa giải tích lớp 12, trước tiên ta dùng lệnh denom() để tách lấy mẫu số. Miền xác định của hàm số chính là tập các giá trị làm cho mẫu số có nghĩa. Ví dụ tìm miền xác định của hàm số:

Ta dùng nhóm các lệnh sau: [> restart;

Y:=simplify(Y):

print('Tap xac dinh cua ham so la:'); a:=solve(denom(Y)=0,x):

if(type(denom(Y),realcons)=true)or(coeff(denom(y),x^2)<>0 and type(a[1],realcons) =falssel then D=R;fi:

if coeff(denom(y),x^2)=0 and coeff(denom(y),x)<>0 then D={x<>a};fi; ↵

Kết quả thực hiện chương trình:

* Tìm khoảng đơn điệu của hàm số.

Bước 1: Tìm đạo hàm của hàm số với lệnh: [> diff(f(x),x);

Bước 2: Xác định chiều biến thiên:

Xác định khoảng đồng biến của hàm số (tức là tìm nhưng khoảng mà đạo hàm của hàm số không âm), ta sử dụng lệnh: [> dhbn := bieuthuc r(x) >=0;

Bước 3 : Giải phương trình bằng lệnh [> solve(dhbn, { x } ) ;

Xác định khoảng nghịch biến của hàm số, tương tự như trên, ta dùng lệnh:

[> dhbn : = bieuthuc f’(x) <=0; Và giải phương trình bằng lệnh: [> solve(dhbn,{x}); Thí dụ: Tìm khoảng đơn điệu của hàm số: y = x3 - 6 x2+ 4 x - 8

Bước 1: Tính đạo hàm:

Bước 2: Thiết lập bất phương trình

dhbn:= 0 ≤ 3x2 - 12x +4

* Tìm miền lồi, miền lõm của hàm số

Bước 1: Tính đạo hàm bậc nhất: [> dhb1:=diff(f(x),x);

Bước 2: Tính đạo hàm bậc hai: [> dhb2:=diff(dhbl,x);

Bước 3: Giải bất phương trình .f”x) ≥ 0 để tìm miền lồi của hàm số, bằng lệnh: (dhb2>=0,x);

ví dụ xét hàm số

Bước 1 : Tìm đạo hàm bậc nhất:

Bước 2 : Tìm đạo hàm bậc 2 :

Bước 3 : Giải phương trình tìm miền dương của đạo hàm bậc 2 (miền lồi của hàm số)

* Tìm cực đại, cực tiểu:

Để xác định cực đại, cực tiểu của hàm số ta xét đạo hàm bậc nhất và tính đơn điệu của hàm số hoặc dùng tính lồi thông qua đạo hàm bậc hai, cụ thể:

Bước 1 : Tìm đạo hàm của hàm số: [> diff(f(x), x);

Bước 2: Giải phương trình f’(x)=0 để trên các điểm nghi ngờ là cực trị. [> solve(f(x)=0, x);

Bước 3: Tìm khoảng đồng biến và nghịch biến của hàm số: [> solve(f(x)>=, x);

Bước 4: Xét xem tại xo :

1) Nếu đạo hàm đổi dấu từ dương sang âm thì xo là điểm cực đại. 2) Nếu đạo hàm đổi dấu từ âm sang dương thì xo là điểm cực tiểu. 3) Nếu qua xođạo hàm không đổi dấu thì xo không phải là điểm cực trị. Ví dụ tìm cực trị của hàm số

Bước 4:

Qua nênđạo hàm bậc nhất đổi dấu từ dương sang âm nên là

điểm cực đại, còn qua đạo hàm bậc nhất đổi dấu từ âm sang dương nên là điểm cực tiểu của hàm số

Nếu dựa vào đạo hàm bậc hai ta có thể tiến hành các bước sau:

Bước 1: Tìm đạo hàm của hàm số: [> dhb1:=diff(f(x),x);

Bước 2: Giải phương trình f’(x)= 0để tìm các điểm nghi ngờ là cực trị. [> solve(dhb1=0,x);

Bước 3: tìm đạo hàm bậc hai: [> dhb2:=diff(dhbl,x); Thí dụ Tìm cực trị của

Bước 1 :

Bước 2: Tìm những điểm mà đạo hàm bậc nhất bằng 0:

Bước 3: Tìm đạo hàm bậc hai:

bằng không:

Bước 5: Xét giá trị của đạo hàm bậc hai và kết luận, chẳng hạn ở ví dụ này, ta nên là điểm cực tiểu, còn y’’,

nên là điểm cực đại của hàm số. * Tìm điểm uốn:

Điểm uốn là điểm mà tại đó đạo hàm bậc hai đổi dấu. Để xác định điểm uốn của hàm số, ta lần lượt thực hiện các câu lệnh sau:

Bước 1. Tính đạo hàm bậc nhất: [> dhbl:=diff(f(x),x); Trong đó f(x) là hàm số mà ta cần khảo sát

Bước 2: Tính đạo hàm bậc hai: [> dhb2:=diff(dhbl,x);

Bước 3: Điểm xã là điểm uốn của hàm số nếu xo là nghiệm chung của hai bất phương trình: [> solve(dhb2>=0); và [> solve(dhb2<=0);

Ví dụ: Tìm điểm uốn của hàm số x4 - 2x2

Kết luận: là hai điểm uốn của đồ thị hàm sốđã cho. * Tìm giá trị nhỏ nhất lớn nhất của hàm sô.

Các hàm minimize(expr, vars, ranges) và maximize(expr, vars,ranges) dùng để tìm giá trị nhỏ nhất, lớn nhất của hàm số được xác định bởi biểu thức expr theo giá trị của các

Ví dụ xác định giá trị cực tiểu, cực đại của hàm số x4- 2x2 [> y:=x^4-2*x^2 :# khai báo hàm số↵

[> extrema(y,{},x);# xác định cực đại, cực tiểu của hàm số↵

{ -1, 0 } * Xác định các đường tiệm cận:

Ta sử dụng lệnh tách mẫu số của f(x) bởi lệnh denom(), dùng lệnh solve( tìm

nghiệm của mẫu số ta được tiệm cận đứng.

Lần lượt tính các giới hạn a= lim(f(x)/x) và b=lim(f(x)-ax) khi x tiến tới vô cùng nếu các giới hạn này tồn tại sẽ cho ta tiệm cận xiên y=ax+b. Ví dụ xác định tiện cận của hàm số :

[> Y:=(x^2+x+1)/(2*x+2); a:=limit(y/x,x=infinity); b:=limit(y-a*x,x=infinity); ms:=solve(denom(y)=0,x);

if a<>infinity or a <>-infinity then print('tiem can dung:',x=ms); print(tiem can xien y=',x*a+b); fi; ↵

Kết quả thực hiện chương trình:

* Xác định giao điểm của đồ thị hàm số Y=f(x )với các trục toạđộ.

Sử dụng gói công cụ student, sau đó dùng các lệnh: Tìm giao điểm với trục tung intercept(y=Y,x=0,{x,y}), tìm giao điểm với trục hoành: intercept(y=Y,y=0,{x,y}), ví dụ xác định giao điểm với các trục toạđộ của hàm số:

Y:=(x^2+x+1)/(2*x+2); # mở gói công cụ và khai báo hàm [> intercept(y=Y,y=0,{x,y}); # giao điểm với trục hoành intercept(y=Y,x=0,{x,y}); # giao điểm với trục tung ↵

Kết quả thực hiện chương trình:

Như vậy đồ thị hàm số không cắt trục hoành mà chỉ có một giao điểm duy nhất với trục tung tại điểm có toạđộ x = 0, y = 1/2. * Vẽđồ thị hàm sô. Vẽ đồ thị là một trong những chức năng mạnh của MaDle. Để vẽ đồ thị hàm số f(x) trên đoạn [a,b], ta sử dụng lệnh [> plot(f(x),x- a..b); ví dụ với hàm số x4-2x2 trên đoạn [-2, 2]: [> plot(x^4-2*x^2,x=- 2..2); ↵ Kết quả ta được đồ thị như hình vẽ.

Qua hình dạng đồ thị, một lần nữa chứng tỏ việc xác định chiều biến thiên, điểm uốn, chiều lồi, lõm, cực đại, cực tiểu .. với các câu lệnh của Maple

4.7.2. Mt s ví d minh ho:

* Khảo sát hàm số với m = 0 (Đề thi tuyển sinh vào

ĐH Thái Nguyên - Năm học 1999-2000, khối A, B). Ta sử dụng chương trình con sau: [> Restart:

print(' Khao sai ham so y=x^3/3-mx^2-x+m+2/3 voi gia tri m=0'); Y:=(x^3/3-x+2/3);

print('Tap xác dinh cua ham so la:'); Y:=simplify(Y):

a:=solve(denom(Y)=0,x):

if(type(denom(y),realcons)=true) then D=R;fi; print('Tinh dao ham bác nhai cua ham so), dy/dx=factor(simplify(diff(Y,x)));

print('giai phương trinh f = 0:’); solve(diff(Y,x)=0,{x});

print(' Ham so se dong bien tren khoang’); solve(diff(y,x)>0);

phát(' Ham so nghịch bien tren khoang); solve(diff(Y,x)<0);

print(' Tim cac gia tri cuc tri dia phuong'); Ymin_max:=extrema(y,{},x);

print('Tinh dao ham bac hai cua ham so'); z:=simplify(diff(Y,x$2));

print(' Diem uon cua do thi ham so la’); solve({z=0,Y=y},{x,y});

print(' Tim giao diem voi truc tung'); student[intercept](y=Yy,x=0,{x,y}); print("rim giao diem voi truc hoanh')l student[intercept](y=Y,y=0,{x,y}); print(' Do thi ham so co dang sau’); plot(Y,x=-5..5,color=red); ↵

Kết quả thực hiện chương trình :

khao sat ham so y=x^3/3-mx^2-x +m+2/3 voi gia tri m=0

Tap xac dinh cua ham so la: D = R Tinh dao ham bac nhat cua ham so

giai phuog trinh f’=0: Ham so dong bien tren khoan

RealRange( -∞, Open( - 1 ) ). RealRange( Open(1), ∞)

Ham so nghich bien tren khoang

RealRange( Open(. - 1), Open( 1 ) )

~ìl 1 ~i~lo ~ ~elll ~oi tr~l~ tl~ll~

Tim giao diem voi truc hoanh

(x = -2, y= 0 }: { x = 1. y = 0}. { x = 1. y = 0 }

Do thỉ ham so co dang sau

* Khảo sát hàm phân thức: [> restart:

Y:=(x^2-3*x+4)/(2*x-2);Y:=simplify(y):

print(' Tap xac dinh cua ham so la:'); dk:=solve(denom(Y)=0,x):

if(type(denom(y),realcons)=true)or(coeff(denom(Y),x∧2)<>0 and type(dk[1],realcons) =falsse) then D=R;fi;

if coeff(denom(Y),x^2)=0 and coeff(denom(Y),x)<>0 then D={x<>dk};fi; a:=limit(Y/x,x=infinity):b:=limit(Y-a*x,x=infinity):ms:=solve(denom(Y)=0,x): if a<>infinity or a <>-infinity then

print('tiem can dung:',x=ms); print(' tiem can xien y=',x*a+b); fi;

dy/dx=factor(simplify(diff(y,x)));

print('giai phuong trinh f = 0:'); solve(diff(Y,x)=0,{x});

print(‘ Ham so se dong bien tren khoang'); solve(diff(Y,x)>0); print(' Ham so nghich bien tren khoang'); solve(diff(Y,x)<0);

print(' Tim cac gia tri cuc tri dia phuong'); Ymin_max:=extrema(Y,{},x); print(' Tim giao diem vot truc tung’); student[intercept](y=Y,x=0,{x,y}); print('Tim giao diem voi truc hoanh.); student[intercept](y=Y,y= 0,{x,y}); print(' Do thi ham so co dang sau’);

plot({y,x*a+b},x=-4..4,-6..4,color=red); ↵

Kết quả thực hiện chương trình:

Tap xac dinh cua ham so D = {x ≠1 }

Tiem can dung:, x = 1 Tiem can xien

Tinh dao ham bac' nhat cua ham so

Giai phuong trinh f’=0:

Ham so se dong bien tren khoang

RealRang (-∞. Open( . RealRange( Open(

Ham so ngich bien tren khoang

RealRange( Open(1− 2). Open( 1 ) ), RealRange( Open( 1 ), Open(1+ 2 )

Tim cac gia tri cuc tri dia phuong

Tinh dao ham bac hai cua ham so Tim giao diem voi truc tung

Tim giao diem voi truc hoanh

{ y = 0, x = RootOf(_Z2 - 3 _Z + 4. label= - _LI)}

Do thi ham so co dang sau

Như vậy, để khảo sát các hàm số khác trong chương trình phổ thông, bạn đọc chỉ cần thay đổi chút ít, và như vậy ta đã có một công cụ

mạnh để kiểm tra và minh hoạ cho các bài toán khảo sát hàm số.

* Tìm quỹ tích các điểm M(xo,yo) mà từ đó kẻ được 2 tiếp tuyến vuông góc với parabo (phỏng theo đề thi tuyển sinh vào ĐHTN - Năm học 1999 -

2000, khối A, B). Ta sử dụng chương trình con: [> restart; delta:=collect(simplify(discrim(f,x)),k): solve(delta,{k}): ki:=coeff(delta,k^2): k2:=coeff(delta,k,0): y3:=solve(k1*k2=-1,{yo}):

print(‘Ket luan ta co phuong trinh quy tich la’); print(y3);

Thực hiện chương trình, ta có kết quả:

Ket luan ta có phương trinh quy tich là

* Cho tam thức bậc hai

Tìm những giá trị của tham số m sao cho p(x) có 2 nghiệm x1,x2 thoả mãn: 1 < x1 < 3 < x2. Ta sử các câu lệnh sau sau:

Các ví dụ tương tự, bạn đọc có thể xem trong [1], [2], [ 3], [4] hoặc liên hệ trực tiếp với tác giảđể nhận được chương trình nguồn. Dưới đây là một số chương trình để

bạn đọc tham khảo:

* Chương trình khảo sát hàm số

[> reastart: with(plots): with(student): kshbh:=proc(a,b,c)

local Y,Xt,Yt,dhbn; print('khao sat ham so');

print('y =',Y); Xt:=-b/(2*a); Yt:=a*xt^2+b*xt+c: dhbn:=diff(Y,x);

print(‘Tap xac dinh cua ham so la:R'); print('Ham so dong bien tren khoang'); print(solve(dhbn>=0));

prtnt('Ham so nghich bien tren khoang'); print(solve(dhbn<=0));

if a>0 then print('Ham so co diem cuc tieu la’) print(intercept(y=y,x=xt,{x,y}));fi;

if a<0 then print('Ham so co diem cuc dai la:'), print(intercept(y=y,x=xt,{x,y}));fi;

implicitplot([y-y=0,x+0*y-xt=0],x=-5+xt..5+xt,y=-5+yt..5+yt, color=[red,blue], legend=[parabol,trucdoixung]);

end: ↵

Để sử dụng chương trình, ta chỉ việc gọi tên chương trình con với các tham số

thực cụ thể, ví dụ: [>kshbh(1,2,3);

* Chương trình khảo sát hàm số

[> restart: with(plots): with(student): kshb3:=proc(a,b,c,d)

local x,dhbn,xg,dhbh,xct,A,B,Y,xu,x1,Y1 ; print('khao sat ham so bac 3');

print('y =', Y);

print('Mien xac dinh cua ham so la R');

print('khao sat chieu bien thien'); dhbn:=diff(Y,x); print(‘Dao ham bac nhat');

print('dhbn =',dhbn); dhbh:=diff(diff(y,x),x);

xct:=solve(dhbn=0); A:=solve(dhbn>=0); B:=solve(dhbn<=0); if A=x then

print('Ham so dong bien tren toan truc so:'); print('Ham so khong co cuc tri: ');

print('Gioi han cua ham so’);

print(limit(y,x=infinity)=limit(y,x=infinity)); print(limit(y,x=-infinity)=limit(y,x=-infinity));

print('Ham so loi tren cac khoang'); print(solve(dhbh<0,{x})); print('cac khoang loi lom va diem uon');

print('Dao ham bac hai la:'); print(dhbh); print('Ham so lom tren khoang');

print('Diem uon’) xu:=solve(dhbh:0,x); print(intercept(y=y,x=xu,{x,y}));

print(plot(y,x=-3+xu..3+xu,-15+f(xu)..15+f(xu)));

Y1:=expand(a*(xi+xu)^3+b*(xi+xu)^2+c*(xi+xu)+d-f(xu)); Print(‘Do thi ham so sau khi doi truc la’)

print(plot(y1,x1=-6..6,-20..20)); fi; if B=x then

print('Ham so nghich bien tren toan truc so:'); print('Ham so khong co cuc tri: ');

print(‘Gioi han cua ham so');

print(limit(y,x=infinity)=limit(y,x=infinity)); print(limit(y,x=-infnity)=limit(y,x=-infinity)); print('cac khoang loi lom va diem uon'); print('Dao ham bac hai la:'); print(dhbh); print(‘Ham so loi tren cac khoang'); print(solve(dhbh<0,{x})),

print('Ham so lom tren khoang'); print(solve(dhbh>0,{x})); print('Diem uon');

xu:=solve(dhbh=0,x); print(intercept(y=y,x=xu,{x,y})); print(plot(y,x=-3+xu..3+xu,-15+f(xu)..15+f(xu)));

Y1 :=expand(a*(x1+xu) ^3+b*(xi+xu)^2+c*(xi+xu)+d-f(xu)); Print(‘Do thi ham so sau khi doi truc la');

print(plot(y1,x1=-6..6,-20..20)); fi; if A<>x then

print('Ham so dong bien tren cac khoang’); print(solve(dhbn>=0,{x}));

print('Ham so nghich bien tren khoang’); print(solve(dhbn<o,{x}));

xct:=fsolve(dhbn=0);

print('Diem cuc dai',intercept(y=y,x=xct[1],{x,y}), ‘Diem cuc tieu’, intercept(y=y,x=xct[2],{x,y}));

print('Gioi han cua ham so');

print(limit(y,x=infinity)=limit(y,x=infinity)); print(limit(y,x=-infinity):limit(y,x=-infinity)); print('cac khoang loi lom va diem uon');

print('Dao ham bac hai la:');print('dhbh =',dhbh);

print('Ham so loi tren cac khoang'), print(solve(dhbh<0,{x})); print('Ham so lom tren khoang'); print(solve(dhbh>0,{x})); print('Diem uon'); xu:=solve(dhbh=0,x);

print(intercept(y=Y,x=xu,{x,y}));

Y1:=expand(a*(xi+xu)^3+b*(xi+xu)^2+c*(xi+xu)+d-f(xu)); xg:=solve(Y1=0,x1);

if a>0 then

print(plot(Y,x=-3+xu+xg[3]..3+xu+xg[2],-5+f(xct[2])..5+f(xct[1]))); print('Do thi ham so sau khi doi truc toa do');

print(plot(Y1,x1=-6..6,-20..20)); fi; if a<0 then

print(plot(y,x=-3+xu+xg[3]..3+xu+xg[2],-5+f(xct[1])..5+f(xct[2]))); print('Do thi ham so sau khi doi truc toa do');

print(plot(Y1,x1=-6..6,-20..20)); fi; fi; end: ↵

Để sử dụng chương trình, ta chỉ việc gọi tên chương trình con với các tham số

thực cụ thể, ví dụ: [> kshb3(1,2,3,4);

* Chương trình khảo sát hàm số y = ax4 + bx3+cx2+dx+e:

[> restart: with(student): with(plots): kshb4:=proc(a,b,c,d,e)

print('khao sat ham bac 4');

print('y=',Y);

print('Tap xac dinh:R.Ham so chan.'); print(' Chieu bien thien'); dhbn:=diff(y,x); print(‘y’=dhbn); dhbh:=diff(dhbn,x);

print('Ham so dong bien tren cac khoang la'); print(solve(dhbn>=0,{x})),

print('Ham so nghich bien tren cac khoang la'); print(solve(dhbn<0,{x}));

A:=solve(dhbh<0): B:=solve(dhbh>0): if a<0 and A=x then

print(' Cac diem cuc tri cua ham so'); xct:=fsolve(dhbn=0); xu:=fsolve(dhbh=0); print(intercept(y=Y,x=xct,{x,y}));

print(' Gioi han');

print(limit(y,x=-infinity),':=', limit(y,x=-infinity)); print(limit(y,x=inf nity),':=', limit(y,x=infinity));

print (‘Tinh loi, lom va diem uon cua do thi’); print('y" =,dhbh); print(‘Ham so lom tren R’);

print('Ham so khong co diem uon'); print('Do thi cua ham so');

print(plot(y,x=-4+xct..4+xct,y=-2+f(xct)..2+f(xct))); fi; if a>0 and B=x then

print(‘ Cac diem cuc tri cua ham so’) xct:=fsolve(dhbn=0);

xu:=fsolve(dhbh=0);

print(intercept(y=y,x=xct,{x,y})); print('Gioi han');

print(limit(y,x=-infinity),':=', limit(y,x=-infnity)); print(limit(y,x=infinity),'::', limit(y,x=infinity)), print("rinh loi, lom va diem uon cua do thi' ); print(‘y" =’,dhbh);

print('Ham so lom tren R');

print(‘Ham so khong co diem uon’); print('Do thi cua ham so');

print(plot(y,x=-4+xct..4+xct,y=-4+f(xct)..4+f(xct))); fi, if (B<>x) and (A<>x) then

print('cac diem cuc tri cua ham so’); xct:=solve(dhbn=0); xu:=solve(dhbh=0); print(intercept(y=y,x=xct[1],{x,y})); print(intercept(y=y,x=xct[2],{x,y})); print(intercept(y= r,x=xct[3],{x,y})); print('Gioi han'); print(limit(y,x=-infinity),':=', limit(y,x=-infinity)); print(limit(y,x=infinity),':=', limit(y,x=infinity)); print('Dao ham bac hai:');

print('dhbh =',dhbh);

print('Ham so loi tren cac khoang la’); print(solve(dhbh<0,{x}));

print('Ham so lom tren cac khoang la :'); print(solve(dhbh>=0,{x}));

print(‘Do thi cua ham so’)

if a>0 then print(plot(y,x=-4+xct[3]..4+xct[2],y=-2+f(xct[2])..2+f(xct[1]))) fi; if a<0 then print(plot(y,x=-4+xct[3]..4+xct[2],y=-2+f(xct[1])..2+f(xct[2]))) fi; fi;end: ↵

Để sử dụng chương tnnh, ta chỉ việc gọi tên chương trình con với các tham số

thực cụ thể, ví dụ: l> kshb4(1,2,3,4,5);

* Chương trình khảo sát hàm số d cx b ax y + + = [> restart: with(plots): with(student): kshbntbn:=proc(a,b,c,d)

local Y,dhbn,xm,ytc; Y:=(a*x+b)/(c*x+d); dhbn:=simplify(diff(y,x));

print(‘khao sat ham so’); print(y);

print('1.Tap xac dinh'); print(D={x<>-d/c});

print('chieu bien thien'); print('Dao ham bac nhat'); print(dhbn); if numer(dhbn)>0 then print(‘Ham so luon dong bien tren D’); fi; if numer(dhbn)<0 then print(‘Ham so luon nghich bien tren D'); fi; print('Ham so khong co cuc tri');

xm:=-d/c: ytc:=limit(Y,x=+infinity); print(limit(y,x=xm)=infinity),

print('Ham so co tiem can dung la: x=',xm); print(limit(Y,x=-infinity)=limit(Y,x=-infinity)); print(limit(y,x:+infinity)=limit(Y,x=+infinity)); print(‘suy ra ham so co tiem can ngang la y=’,ytc); print('Do thi cua ham so');

print(‘Do thi ham so cat truc hoanh tai'); print(intercept(y=Y,y=0,{x,y}));

print('Do thi ham so cat truc tung tai'), print(intercept(y=Y,x=0,{x,y}));

print('Diem doi xung cua do thi ham so la:'); print(intercept(y=ytc,x=xm,{x,y}));

plot({y,ytc},x=-5+xm..5+xm,y=-5+ytc..5+ytc); end:

Để sử dụng chương trình, ta chỉ việc gọi tên chương trình con với các tham số

I> kshbntbn(1,2,3,4);

* Chương trình khảo sát hàm số

[> restart: with(plots): with(student): kshbhtbn:=proc(a,b,c,a1,b1)

local Y,dhbn,A,B,a11,xm,b11,xct; print('khao sat ham so');

f:=x >(a*x^2+b*x+c)/(a1*x+b1); Y:=(a*x^2+b*x+c)/(a1*x+b1); print(y);

print('Tap xac dinh: R-(',-b1/a1,')’); print('chieu bien thien.');

dhbn:=diff(y,x): simplify(dhbn);

A:=solve(numer(dhbn)>0): B:=solve(numer(dhbn)<0): if A=x then

print('Ham so dong bien tren TXD'); fi; if B=x then

print(‘Ham so nghich bien tren TXD’); fi; if (A<>x) and (B<>x) then

print(‘Ham so dong bien tren cac khoang la’); print(solve(dhbn>0,{x}));

print('Ham so nghich bien tren cac khoang la:'); print(solve(dhbn<0,{x}));

print(‘cac diem cuc tri cua ham so la’) xct:=solve(numer(dhbn)=0,x);

print('Diem cuc dai cua ham so la:'); print(intercept(y=y,x=xct[2])); print('Diem cuc tieu cua ham so la:'), print(intercept(y=y,x=xct[1])); fi; print('Gioi han cua ham so');

print(limit(y,x=-infinity)=limit(y,x=-infinity)); print(limit(y,x=infinity)=limit(y,x:infinity}); xm:=solve(denom(y)=0,x);

print(limit(y,x=xm)=infinity);

print('Ham so co tiem can dung la x =',xm);

a11:=limit(y/(x),x=infinity);b11:=limit(y-a11*x,x=infinity); print(‘Ham so co tiem can xien la: y=',a11*x+b11);

print('Giao voi truc tung’); print(intercept(y=y,x=0,{x,y})); print('Diem doi xung cua ham so la :');

print(intercept(y=a11*x+b1,x=xm)); if (A=x) or (B=x) then

print(plot({Y,a11*x+b11},x=-5+xm..5+xm,y=- 10+a11*xm+b11..10+a11*xm+b11));fi;

if (A<>x) and (B<>x) then

print(plot({y,a11*x+b11},x=-10+xct[2]..10+xct[1],y=-10+f(xct[2])..10+f(xct[1])));fi; end: ↵

Để sử dụng chương trình, ta chỉ việc gọi tên chương tnnh con với các tham số

thực cụ thể, ví dụ: [> kshbhtbn(1,2,3,4,5); * Chương trình khảo sát hàm số [> restart: with(plots):with(student): kshbhtbh:=proc(a,b,c,a1,b1,c1) local Y,dhbn,xm,dhbh,A,B; Y:=(a*x^2+b*x+c)/(a1 *x^2+b1 *x+c1 ) ; f:=x >(a*x^2+b*x+c)/(a1*x^2+b1*x+c1); print(‘khao sat ham so’)

print(y);

dhbn:=simplify(diff(Y,x)); dhbh:=simplify(diff(dhbn,x)); xm:=solve(denom(Y)=0,x),

print('Tap xac dinh cua ham so');

if type(xm[1],realcons)=false then print(‘D = R’); fi; if type(xm[1],realcons)=true then print('D =',{x<>xm}); fi; print('chieu bien thien');

print('Dao ham bac nhat'); print(dhbn); print('Ham so dong bien tren cac khoang'); print(solve(dhbn>=0,{x}));

print('Ham so nghich bien tren cac khoang'); print(solve(dhbn<=0,{x}));

print('Gioi han cua ham so'); ytc:=limit(y,x=-infinity);

print(limit(y,x=-infinity)-limit(y,x=-infinity)); print(limit(y,x=infnity)=limit(y,x=infinity)); print('cac gia tri cuc tri cua ham so’);

print(‘Ymax-min:=’,extrema(y,{},x)); print('cac giao diem voi truc tung'); print(intercept(y=Y,x=0,{x,y})); print('cac giao diem voi truc hoanh'); print(intercept(y=Y,y=0,{x,y})); if type(xm[1],realcons)=true then tu:=numer(dhbn); print(tu);

A:=solve(tu>=0); B:=solve(tu<=0); if (A<>x) and (B<>x) then

if coeff(tu,x,1)<0 then

print(plot({y,ytc},x=-5+xm[2]..5+xm[1],y=-5+f((xm[1]+xm[2])/2)..5+ytc));fi; if coeff(tu,x,1)>0 then

print(plot({y,ytc},x=-5+xm[2]..5+xm[1],y=-5+ytc..5+f((xm[1]+xm[2])/2)));fi; if A=x then

print(plot({y,ytc},x:-5+xm[2]..5+xm[1],y=-10..10)); fi;fi; fi; print(xm[1],xm[2]);

end: ↵

Để sử dụng chương trình, ta chỉ việc gọi tên chương trình con với các tham số

thực cụ thể, ví dụ:

[> kshbhtbh(1,2,3,4,5,6);

* Bài toán tìm điểm kẻđược hai riếp tuyến vuông góc vói một đường cong:

Print(‘(c):', y);

print('Goi M(x1,y1) la diem ma qua do ke duoc hai tiep tuyen (d) den (c) co he so goc k thi phuong trinh:');

y2:=k*(x-x1)+y1: print('(d):',y2);

print('phuong trinh hoanh do giao diem cua duong thang va duong cong la:'); y=y2; print('<=>', y-y2=0);

A1:=y-y2: A:=numer(A1): B:=collect(A,x): print('<=>',B=0,'(1)');

A1:=coeff(B,x,2): b1:=coeff(B,x,1): c1:=coeff(B,x,O): C:=b1^2-4*a1*c1: D1:=expand(c): D2:=collect(D1,k):

print('(d) la tiep tuyen cua do thi ham so khi va chi khi (1) co nghiem kep'); print('<=>', delta=0, '<=>', b1^2-4*a1*c1=0),

print('<=>',C=0); print('<=>',D2=0,'(2)');

print(‘De qua M co hai nghiem thi phuong trinh (2) phai co hai nghiem thoa man dieu kien k1*k2 = -1’)

a2:=coeff(D2,k,2): b2:=coeff(D2,k,1): c2:=coeff(D2,k,0): print('<=> delta>0 va c2/a2 =',-1);

print('<=>',c2/a2+1=0);

print('Quy tich cua nhung diem trong mat phang ma tu do co the ke duoc hai tiep tuyen den do thi ham so va hai tiep tuyen nay vuong goc voi nhau la:’)

c2/a2+1=0; ↵

* Bài toán xác định phương trình của đường cong luôn tiếp xúc với một đường cong cho trước:

Print(‘Do dang cua phuong trinh (Hm), ta chon duong cong co dinh co phuong trinh la:');

print(' khi do phuong trinh hoanh do giao diem la:');

A:=y-y1: print(A,=0 (1)'); B:=collect(A,x): print('<=>', B=0); P1:=coeff(B,x,2): p2:=coeff(B,x,1):

p3:=coeff(B,x,0): C:=p2*p2-4*p1*p3:

print('<=>',delta=0,'voi moi m’, '<=>',C=0,'voi moi m'); C:=p2*p2-4*p1*p3: D1:=collect(c,m):

print('<=>',D1 = 0, ‘voi moi m dieu nay xay ra khi va chi khi'); p11 := coeff(D1,m,2):

p12:=coeff(D1,m,1): p13:=coeff(D1,m,0):

print(p11=0, p12=0, 'va',p13=0);

print('<=>',solve({p11,p12,p13},{b1,c1,d1}));.J

* Bài toán tìm đường thẳng luôn tiếp xúc với một đường cong cho trước:

[> restart:a:=0:b:=(m+1):c:=m:a1:=1:b1:=m:

print('Tim phuong trinh cua duong thang luon tiep xuc voi ho duong cong'),

print('(Hm):',y);y1:=k*x+n:

print('Mot duong thang bat ky co he so goc la k co phuong trinh la’); print('(d) :',y1);

print(‘Ta co phuong trinh hoanh do giao diem cua ho duong cong (Hm) va duong thang (d) la:');

A:=numer(y)-denom(y)*y1 : A=0; B::expand(A): C:=collect(B,x): print('<=>’, C=0,' (1)');

p1:=coeff(c,x,2): p2:=coeff(c,x,1): p3:=coeff(c,x,0): D1:=p2^2-4*p1*p3: D2:=collect(D1,m):

Print(‘De duong thang la tiep tuyen cua ho duong cong (Hm) thi (1) phai co nghiem kep voi moi m’);

print('<=>', D2=0, voi moi m.', ‘Dieu nay xay ra voi moi m khi va chi khi’); p11:=coeff(D2,m,2): p12:=coeff(D2,m,1): p13:=coeff(D2,m,0):

print(p11=D, p12=0,' va ', p13=0); p11:=coeff(D2,m,2): p12:=coeff(D2,m,1): p13:=coeff(D2,m,0):

print('<=>', solve({p11,p12,p13},{k,n}));

print('vay ta co phuong trinh cua duong thang can tim la:'); ↵

* Bài toán tìm điểm cốđịnh của một đường cong:

[> restart:

print('Tim diem co dinh cua ho duong cong '); print('(Hm): y=',y1);

print (‘Ta viet phuong cua ham so lai duoi dang’); print(y1-y = 0);

mau:=denom(y1):tu::numer(y1):A:=tu-y*mau:B:=collect(A,m): print('<=>',B print('Muon dang thuc dung voi m thi:');

p1:=coeff(B,m,2):p2:=coeff(B,m,1):p3:=coeff(B,m,0): print(p1 = 0,p2 = 0,' va ',p3 = 0);

print('<=> ',solve({p1,p2,p3},{x,y}));

print('Diem co dinh cua ho duong cong la: ',solve({p1,p2,p3},{x,y}));↵

Để thuận có một giao diện thân thiện và thao tác đơn giản khi cho học sinh kiểm tra lại kết quả, đối với bài toán khảo sát các hàm số dạng đa thức, ta có thể khai thác chương tnnh sau:

[> restart: with(plots): with(plottools): with(Maplets): with(Maplets[Elements]):

[> caiiMapIet := Maplet( Window[wi](title=“DO lHl HAM DA THUC” menubar=MB1, 'layout' = BL1), MenuBar[MB1](Menu("File", Menultem("Dong", Shutdown()))), BoxLayout[BL1](inset=0, Boxcolumn(inset=0, spacing=0, Plotter[p1]() ),

Boxcolumn(inset=0, spacing=0, BoxRow(inset=0, spacing=0,"f(x)=",

TextField[F]("-3*x^5+5*x^3 - 1.5*x")),BoxRow(inset=0, spacing=0,"MIEN XAC DINH: x= ", TextField[NEGX](3,"-1.2"), " to ", rextField[POSX](3,"1.2")),

Button[func]("DO THI HAM SO", onclick=Evaluate(P1 = 'showFunc(F, NEGX, POSX)')), Button[conUp]("KHOANG LOM", onclick=Evaluate(P1 =

'showConUp1(F, NEGX, POSX)')),

Button[conDown]("KHOANG LOI", oncIick=Evaluate(P1='showConDown1(F, NEGX, Button[inc]("DONG BIEN", onclick=Evaluate(P1 = 'showlnc1(F, NEGX, POSX)')), Button[dec]("NGHICH BIEN", onclick=Evaluate(P1 = 'showDec1(F, NEGX, POSX)')), Button[max]("DIEM CUC DAI", onclick=Evaluate(P1 = 'showMax1(F, NEGX, POSX)')), Button[min]("DIEM CUC TIEU", onclick=Evaluate(P1 = 'showMin1(F, NEGX, POSX)')), Button[all]("HIEN THI TAT CA", onclick=Evaluate(P1 = 'showAll(F, NEGX, POSX)')) ))):

showFunc := proc(f, negX, posX) option remember: plot(f,x=negX..poX, color=black, thickness=3): end proc:

showconUp1 := proc(f, negX posX) option remember:

display(showconUp(f, negX, posX), showFunc(f, negX, posX)): end proc: showConDown1 := proc(f, negX, posX) option remember:

display(showConDown(f,negX, posX), showFunc(f, negX, posX)):end proc: showlnc1 := proc(f, negX, posX) option remember:

display(showlnc(f, negX, posX), showFunc(f, negX, posX)):end proc: showDec1 := proc(f, negX, posX) option remember:

display(showDec(f, negX, posX), showFunc(f, negX, posX)): end proc: showMax1 := proc(f, negX, posX) option remember:

display(showMax(f, negX, posX), showFunc(f, negX, posX)):end proc: showMin1 := proc(f, negx, posx) option remember:

display(showMin(f, negx, posx), showFunc(f, negX, posX)):end proc: showconUp := proc(f, negX, posX) option remember:

local d2, sols, i, n, polys, j, delta, X1, X2, Y1, Y2, p: d2 := diff(f,x$2);

sols := findRoots(d2, negX, posX); if not member(evalf(negX), sols) then sols := [evalf(negX), op(sort(sols))]: end if:

if not member(evalf(posX), sols) then sols := [op(sort(sols)), evalf(posX)]: end if:

n := 100: polys := []:

for j from 1 to (nops(sols) - 1) do

if evalf(subs(x = (sols[j] + sols[j+1])/2, d2)) > 0 then delta := (sols[j+1] - sols[j]) / n:

X2 := sols[j]: for i from 1 to n do

X1 := evalf(x2): Y1 := evalf(subs(x = X1, f)):

X2 := evalf(sols[j] + i * delta): Y2 := evalf(subs(x=X2,f)):

p[i] := polygonplot([[x1, 0],[X1, Y1],[X2, Y2],[X2, 0]], color=cyan, style=patchnogrid):

end do:

polys := [op(polys) seq(p[i],i=1..n)]: end if: end do: if nops(polys) = 0 then return NULL: end if: display(seq(polys[i],i=1..nops(polys))): end proc:

showConDown := proc(f, negx, posx) option remember:

Một phần của tài liệu Ứng dụng CNTT vào dạy Toán (Trang 93 - 124)

Tải bản đầy đủ (PDF)

(189 trang)