Tải bản đầy đủ (.doc) (11 trang)

bài thực hành symbolic math – lập trình – simulink

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (99.93 KB, 11 trang )

BÀI THỰC HÀNH SYMBOLIC MATH. – LẬP TRÌNH –
SIMULINK
1. Tính các giới hạn:
lim ( 1 + x )

G1 =

1 
1
lim  − x
÷;
x →0 x
e −1


G2 =

lim ( sin x )
x →0

x

;

G3 =

ln x

;
giải: để tính giới hạn hàm số: kq=limit(y,x,giới hạn)
với giới hạn vô cùng là inf


trước tiên vẫn cần phải khai báo ký hiệu: syms x…;
>> syms x;
>> G1=1/x-1/(exp(x)-1);
>> G2=sin(x).^x;
>> G3=(1+x).^(log(x));
>> kq1=limit(G1,x,0)
kq1 =1/2
>> kq2=limit(G2,x,0)
kq2 =1
>> kq3=limit(G3,x,0)
kq3 = 1
2. Tính đạo hàm các hàm số:
x →0

y1 =

1
cos x 2 + 1

;

y2 =

x 2
a2
x
a − x 2 + arcsin ;
2
2
a


giải:với bài toán tính đạo hàm vẫn cần khai báo biến syms, dùng lệnh
diff(f) cho dao ham cap 1,diff(f,2) cho dao ham cap 2
>> syms x a;
>> y1=1./cos(sqrt(x.^2+1));
>> y2=x/2*sqrt(a.^2-x.^2)+a.^2/2*asin(x/a);
>> kq1=diff(y1)
kq1 = (x*sin((x^2 + 1)^(1/2)))/(cos((x^2 + 1)^(1/2))^2*(x^2 + 1)^(1/2))
>> kq2=diff(y2)
kq2 =
(25 - x^2)^(1/2)/2 - x^2/(2*(25 - x^2)^(1/2)) + 5/(2*(1 - x^2/25)^(1/2))
3. Tính các tích phân:
sin 2 x

T1 = ∫ 1 + cos2 x dx ;

T2 = ∫

arcsin 2 x
1 − x2

dx ;

giải:với bài toán tính nguyên hàm vẫn cần khai báo biến syms, dùng lệnh
int(f(x))
>> syms x;
>> T1=sin(2*x)/(1+cos(2*x));


>> T2=atan(sin(2*x))/sqrt(1-x.^2);

>> int(T1)
ans =-log(2*cos(x)^2)/2
>> int(T2)
Warning: Explicit integral could not be found.
ans =int(atan(sin(2*x))/(1 - x^2)^(1/2), x)
4. Tính các tích phân xác định bằng phương pháp Simpson và bằng lệnh
int trong Symbolic Math:
a
2
1 − sin 2 ( x )
T1 =
;
x 2 a 2 − x 2 dx ; T2 =





−a

1

x

dx

Giai: để giải bài toán với tích phân xác định có thể dùng các phương
pháp sau:
Int(f(x),a,b) với a,b là giới hạn trên và dưới
với phương pháp hình thang y=f(x) lệnh trapz(x,y) với x=[a:h:b]

với p2 simson lệnh quad(fun,a,b) hàm fun viết dưới dạng handles (@(x))
>> syms x;
>> T1=x.^2*sqrt(a.^2-x.^2);
>> T2=sqrt(1-sin(x).^2)/x;
>> int(T1,-a,a)
ans = (pi*a^4)/8
>> int(T2,1,2)
Warning: Explicit integral could not be found.
ans = int((1 - sin(x)^2)^(1/2)/x, x = 1..2)
?5. Khảo sát sự biến thiên và vẽ đồ thị hàm số:
f(x) =
>> syms x;
>> f=(x.^3*log(x)+4*x)/(x.^2-1);
>> ezplot(f)
>> hold on
>> x_tcd=solve(x.^2-1)
x_tcd =
-1
1
>> plot([-1 1],[-15 25],'r')
>> plot([1 1],[-15 25],'r')
>> x_ctr=double(solve(diff(f)))
x_ctr =
2.1501
>> y_ctr=subs(f,x_ctr)

x3 ln x + 4 x
;
x2 − 1



y_ctr =
4.4741
>> plot(x_ctr,y_ctr,'r*')
300

?6. Tính tổng S = ∑ n
n =1

2

sin

π
2n

bằng phương pháp lập trình, so sánh kết

quả tính toán khi sử dụng cách tính tổng chuỗi trong Symbolic Math.
giải: bài toán sử dụng vòng lặp for i=array
>> n=1
>> s=0;
>> for n=1:300;
s=s+n.^2*sin(pi/(2.^n));
end
>> s
s = 17.8505
cách 2:
tính bằng phương pháp chuỗi trong Symbolic Math ta thêm double để
chuyển từ dạng ký hiệu sang dạng số:

>> syms n;
>> double(symsum(n^2*sin(pi/(2^n)),1,300))
ans = 17.8505
?7. Sử dụng vòng lặp for trong lập trình Matlab để tính tổng: S =

2 n + 5n

6n
n=1
500

so sánh kết quả có được với kết quả tính toán khi sử dụng cách tính tổng
chuỗi trong Symbolic Math.
8. Lập trình trong Matlab tìm giá trị nguyên dương lớn nhất của số n mà
có tổng:
a. S = 11 + 22 + 33 + ... + nn < 1.000.000;
b. S = en – 1992.lg(n) ≤ 5;
giải: với bài toán này cần kết hợp thêm lệnh if
a))>> n=1;
s=0;
for n=1:1000000;
if n.^n<1000000;
s=n;
end
end
>> s


s= 7
----------------------------------->> n=1;

>> s=1;
>> while n.^n<1000000;
s=n;
n=n+1;
end
>> s
s= 7
>> while exp(n)-1992*log10(n)<=5;
s=n;
n=n+1;
end
>> s
s= 7
>> n=7;
>> h=exp(n)-1992*log10(n)
h =-586.8021
-------------------------------->> h=0;
>> n=1;
>> while h<=5;
h=exp(n)-1992*log10(n);
n=n+1;
end
>> n-2
n= 7
?9. Một mạch điện gồm 2 đoạn mạch mắc song song, đoạn thứ nhất gồm
N tụ điện mắc nối tiếp, đoạn thứ hai gồm M tụ điện mắc nối tiếp. Lập
trình trong Matlab nhập N, M (<10) và điện dung của các tụ. Đưa ra màn
hình điện dung tương đương của mạch.
10. Lập trình nhập x, n từ bàn phím, rồi tính:
T = 1+x

>> T=1;

x 2 x3
xn
+
+
....
+
+
2! 3!
n!


>> x=input('nhap x=')
nhap x=3
x= 3
>> n=input('nhap n=')
nhap n=2;
n= 2
>> for i=1:n;
T=T+x.^i/factorial(i);
end
>> T
T = 8.5000
11. Cho hàm số :
f(x) =

0.5 x < −0.5
 2
2 x − 0.5 ≤ x ≤ 0.5

0.5 x > 0.5


Vẽ đồ thị hàm f với x trong khoảng -1 ÷ 1 .
giải: với bài toán này cần phải tạo ra file trong M-file sử dụng lệnh
dk if
trong M-file:
function y = cau11(x )
j=0; y=[]; j=j+1;
for i=x;
if i< -0.5
y(j)=0.5;
elseif i<= 0.5
y(j)=2*i.^2;
else
y(j)=0.5;
end
end
end
>> x=[-1:0.05:1];
>> y=cau11(x);
>> plot(x,y)
Cach 2:
function y = cau11(x )
y=[];
if x< -0.5
y=0.5;
elseif -0.5≤ x<= 0.5



y=2*x.^2;
else

y=0.5;

end
end
>> x=[-1:0.05:1];
>> y=cau111(x);
>> plot(x,y)

12. Cho hàm số: f(x) =

− sin x

1
sin x


x < −π / 2
−π / 2 ≤ x ≤ π / 2
x > 0.5

khoảng -π ÷ π .
function y = cau13(x )
if x< -pi/2
y=-sin(x);
elseif -pi/2<= x <= pi/2
y=1;
else

y=0.5;
end
end
>> x=[-pi:0.1:pi];
>> y=cau13(x);
>> plot(x,y)
Cách 2:
function y = cau13(x )
j=0; j=j+1; y=[];
for i=x
if i< -pi/2
y(j)=-(sin(i));
elseif -pi/2<= i <= pi/2
y(j)=1;
else
y(j)=0.5;
end
end
end
>> x=[-pi:0.1:pi];

Vẽ đồ thị hàm f với x trong


>> y=cau13(x);
>> plot(x,y)
13. Nhập vào hai số a,b rồi tính: y = 15x2 + x + 72 với:
x=

 a+b

khi a < b
 3

 15,172 khi a = b
 a−b
 2
khi a > b
 a + b2

giải: với bài toán này thì cần lập trong M-file với x=cau13(a,b)
function x = cau131(a,b )
if ax=(a+b)/3;
elseif a==b
x=15.172;
else
x=(a-b)/(a.^2+b.^2);
end
end
>> a=input('nhap a=')
nhap a=5
a= 5
>> b=input('nhap b=')
nhap b=5
b= 5
>> x=cau131(a,b)
x = 15.1720;
>> y=15*x.^2+x+72
ans = 3.5400e+003
14. Nhập vào ba số x, y, z, tính và đưa kết quả ra màn hình:


f=

x+ y

 z + arctg 1 − xy khi x > 0 va z < 0

x+ y
 2
khi xy < 1 va z > 0
 z + arctg
1 − xy


x+ y
 z 3 + arctg
khi xy > 1 va z > 0
1 − xy

 15 trong cac truong hop con lai



function f = cau14( x,y,z)
if x>0& z<0
f=z+atan((x+y)/(1-x*y));
elseif x*y<1&z>0
f=z.^2+atan((x+y)/(1-x*y));
elseif x*y>1& z>0
f=z.^3+atan((x+y)/(1-x*y));

else
f=15;
end
end
>> x=input('nhap x=')
nhap x=-1
x =
-1
>> y=input('nhap y=')
nhap y=-2
y = -2
>> z=input('nhap z=')
nhap z=-3
z =
-3
>> f=cau14(x,y,z)
f =
15
15. Giải phương trình vi phân bằng phương pháp mô phỏng Simulink:
dy
3
= cos( x − y ) − ( x 2 − y 2 )
dx
5

giải:
các khối cần cho bài toán: ADD- khối cộng
RAMP- khối tín hiệu vào phi tuyến ( hàm lượng giác)
GAIN- nhân với tín hiệu đứng trước nó
TRIGONOMETRIC FUNCTION-khối hàm lượng giác

Intergartor- khối vi phân
Scope - hiển thị ra màn hình kết quả đồ thị
Display - hiển thị ra màn hình kết quả số cuối cùng.
Math funtion- khôí cho ra bình phương đầu vào


16. Giải hệ phương trình phi tuyến bằng phương pháp mô phỏng
Simulink:
−x
2

 x1 + 8 x1 − s inx2 = e 1 + 2,105

− x2

− cos x1 + 2 x2 = e + 12,8638

So sánh kết quả mô phỏng với kết quả giải bằng lệnh solve.
Các khối cần lấy:
Constant- khối số nguyên
Display- hiện thị kết quả số
Subtract -khối cộng trừ
Math function- khối bình phương (có thể thay đổi giá trị của khối)
Algebraic Constraint- khối giải hệ phương trình fsolve
Product- thực hiện nhân chia
TRIGONOMETRIC FUNCTION-khối hàm lượng giác


kiểm tra lại bằng lệnh fsolve(@fun,x0)
function f = bai161(x)

f=[x(1)^2+8*x(1)-sin(x(2))-exp(-x(1))-2.105;exp(x(2))+cos(x(1))-2*x(2)+12.8638];
>> t=[0;0];
>> kq=fsolve(@bai161,t)
kq =
0.3988
6.8932
17. Giải hệ phương trình bằng phương pháp mô phỏng Simulink:
2 x12 − x22 − 2 x3 = 10,5

2
 x2 + 2 x3 = 11,5
;

2
6 x1 + 3 x2 + x3 = 20, 75

So sánh kết quả mô phỏng với kết quả giải bằng lệnh solve.


kiểm tra lại bằng lệnh fsolve:
function f =bai171(x )
f=[2*x(1)^2-x(2)^2-2*x(3)-10.5;x(2)+2*x(3)^211.5;6*x(1)+3*x(2)^2+x(3)-20.75];
>> x0=[0;0;0];
>> fsolve(@bai171,x0)
ans =
2.1693
1.8197
-2.2000

18. Giải phương trình vi phân bằng phương pháp mô phỏng Simulink:

(2 x 3 + xy 2 − 1)dx + (2 y 3 + x 2 y + 3)dy = 0 với x = 0 ÷ 20



×