BM Vật lý Ứng dụng, Khoa KHUD, ĐHBK TP.HCM Bài tập lớn Matlab – Vật lý A1Bài tập 2: Xác định từ trường của một dòng điện tròn bằng định luật Biot-Savart 1.. Yêu cầu Từ trường của một
Trang 1BM Vật lý Ứng dụng, Khoa KHUD, ĐHBK TP.HCM Bài tập lớn Matlab – Vật lý A1
Bài tập 2:
Xác định từ trường của một dòng điện tròn
bằng định luật Biot-Savart
1 Yêu cầu
Từ trường của một phân bố dòng điện (C) bất kỳ có thể được xác định bằng định luật Biot-Savart theo biểu thức sau:
Bài tập này yêu cầu sinh viên sử dụng Matlab để tính toán từ trường của một dòng điện tròn sử dụng biểu thức trên với cách thức chia vòng tròn thành những đoạn dòng điện thẳng nhỏ và cộng giá trị từ trường do từng đoạn trên tạo nên tại một vị trí nào đó Sau đó, sử dụng các giá trị từ trường đã tính để vẽ biểu diễn đường sức của từ trường chung
2 Điều kiện
1) Sinh viên cần có kiến thức về lập trình cơ bản trong MATLAB
2) Tìm hiểu các lệnh Matlab liên quan symbolic và đồ họa
3 Nhiệm vụ
Xây dựng chương trình Matlab:
1) Nhập bán kính dòng điện tròn
2) Chia vòng tròn thành những đoạn dòng điện thẳng nhỏ và cộng giá trị từ trường do từng đoạn trên tạo nên tại một vị trí nào đó (tham khảo đoạn mã Matlab bên dưới)
3) Vẽ đồ thị biểu diễn đường sức của từ trường (dùng lệnh quiver – vẽ mũi tên đường sức) Chú ý: Sinh viên có thể dùng các cách tiếp cận khác
4 Tài liệu tham khảo:
A L Garcia and C Penland, MATLAB Projects for Scientists and Engineers, Prentice Hall,
Upper Saddle River, NJ, 1996 http://www.algarcia.org/fishbane/fishbane.html
* Hướng dẫn: Tham khảo đoạn chương trình sau về cách tính từ trường từng đoạn dòng điện nhỏ cộng lại:
fprintf( 'Field plotted from x = %g m to x = %g m\n' ,-xMax,xMax);
fprintf( 'Field plotted from y = %g m to y = %g m\n' ,-yMax,yMax);
for i=1:NGrid
xObs(i) = -xMax + (i-1)/(NGrid-1)*(2*xMax); % x values to plot
yObs(i) = -yMax + (i-1)/(NGrid-1)*(2*yMax); % y values to plot
end
%@ Loop over the segments in the current loop in yz plane
NSegments = 20;
for k=1:NSegments
%@ Compute location of the endpoints of a segment
theta1 = 2*pi*(k-1)/NSegments;
x1 = 0;
y1 = Radius*cos(theta1);
z1 = Radius*sin(theta1);
theta2 = 2*pi*k/NSegments;
1/1
Trang 2BM Vật lý Ứng dụng, Khoa KHUD, ĐHBK TP.HCM Bài tập lớn Matlab – Vật lý A1
x2 = 0;
y2 = Radius*cos(theta2);
z2 = Radius*sin(theta2);
%@ Compute components of segment vector dl
dlx(k) = x2-x1;
dly(k) = y2-y1;
dlz(k) = z2-z1;
%@ Compute the location of the midpoint of a segment
xc(k) = (x2+x1)/2;
yc(k) = (y2+y1)/2;
zc(k) = (z2+z1)/2;
end
%@ Loop over all grid points and evaluate B(x,y) on grid
for i=1:NGrid
for j=1:NGrid
Bx = 0; By = 0; % Initialize B to zero
%@ Loop over the segments in the loop
for k=1:NSegments
%@ Compute components of the r vector (vector between
%% segment on loop and observation point)
rx = xObs(j) - xc(k);
ry = yObs(i) - yc(k);
rz = -zc(k); % Observation points are in xy plane
%@ Compute r^3 from r vector
r3 = sqrt(rx^2 + ry^2 + rz^2)^3;
%@ Compute x and y components of cross product dl X r
dlXr_x = dly(k)*rz - dlz(k)*ry;
dlXr_y = dlz(k)*rx - dlx(k)*rz;
%@ Increment sum of x and y components of magnetic field
Bx = Bx + Constant*dlXr_x/r3;
By = By + Constant*dlXr_y/r3;
end
%@ Compute normalized vectors of magnetic field direction
BMag = sqrt(Bx^2 + By^2);
BDirx(i,j) = Bx/BMag;
BDiry(i,j) = By/BMag;
end
fprintf( 'Calculation %g%% complete\n' ,100*i/NGrid);
end
1/2