Ta sẽ tính từ trường \(\vec{B}\) tại các điểm trong không gian giới hạn bởi \(\mathrm{xmin}\), \(\mathrm{xmax}\), \(\mathrm{ymin}\), \(\mathrm{ymax}\), \(\mathrm{zmin}\) và \(\mathrm{zmax}\):
1 2 3 4 5 6 7 8 9 10 11 |
Cuộn solenoid có chiều dài \(L=10\,\mathrm{cm}\), bán kính \(R=0.5\,\mathrm{cm}\) mang dòng điện \(I=1\mathrm{A}\) cần có thể mô tả trong Matlab qua hàm số của một đường xoắn ốc. Ở đây ta khai báo một đường xoắn ốc gồm \(\mathrm{N\_turn}=30\) vòng xoắn:
1 2 3 4 5 6 7 8 9 10 11 |
Từ trường \(\vec{B}\) tại mỗi điểm trong không gian là sự chồng chập từ trường tạo ra bởi từng đoạn dây riêng rẽ, theo định luật Biot-Savart:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | Bx = zeros(size(X)); By = zeros(size(Y)); Bz = zeros(size(Z)); kB = mu0/4/pi*I; cond = []; for i_wire = 1:N dx_wire = x_wire(i_wire+1)-x_wire(i_wire); dy_wire = y_wire(i_wire+1)-y_wire(i_wire); dz_wire = z_wire(i_wire+1)-z_wire(i_wire); Delta_x = X-x_wire(i_wire); Delta_y = Y-y_wire(i_wire); Delta_z = Z-z_wire(i_wire); r = sqrt(Delta_x.^2+Delta_y.^2+Delta_z.^2); Bx = Bx+kB*(dy_wire*Delta_z-dz_wire*Delta_y)./r.^3; % x-component of vector field By = By+kB*(dz_wire*Delta_x-dx_wire*Delta_z)./r.^3; % y-component of vector field Bz = Bz+kB*(dx_wire*Delta_y-dy_wire*Delta_x)./r.^3; % z-component of vector field cond = [cond;find(r<0.1e-2)]; end Bx(cond) = 0; By(cond) = 0; Bz(cond) = 0; |
Hình dưới biểu diễn kết quả mô phỏng cho từ trường tạo bởi cuộn solenoid.

Code chương trình Matlab
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | function M_field_vec_Solenoid % Author: Tran Hai Cat % Lecturer in Physics, HCM University of Technology and Education % - Dai hoc Su pham Ky thuat Tp. Ho Chi Minh % Created: 2019.05.02 clc; clear variables; close all; %% CONSTANTS mu0 = 4*pi*1e-7; %% PARAMETERS I = 1; % Ampere R = 0.5e-2; % Solenoid's radius L = 10e-2; % Solenoid's length N_turn = 30; % Number of turns N_phi = 60; N1 = N_phi*N_turn; phi_max = 2*pi*N_turn; phi = linspace(0,phi_max,N1); x_wire = linspace(0,L,N1); y_wire = R*cos(phi); z_wire = R*sin(phi); streak_arrow = 1; % 1-MUI TEN CONG, 0-MUI TEN THANG Nx = 20; Ny = 10; Nz = 10; xmin = -1e-2; xmax = 11e-2; ymin = -1e-2; ymax = 1e-2; zmin = -1e-2; zmax = 1e-2; %% CALCULATION N = length(x_wire)-1; x = linspace(xmin,xmax,Nx); y = linspace(ymin,ymax,Ny); z = linspace(zmin,zmax,Nz); [X,Y,Z] = meshgrid(x,y,z); Bx = zeros(size(X)); By = zeros(size(Y)); Bz = zeros(size(Z)); kB = mu0/4/pi*I; cond = []; for i_wire = 1:N dx_wire = x_wire(i_wire+1)-x_wire(i_wire); dy_wire = y_wire(i_wire+1)-y_wire(i_wire); dz_wire = z_wire(i_wire+1)-z_wire(i_wire); Delta_x = X-x_wire(i_wire); Delta_y = Y-y_wire(i_wire); Delta_z = Z-z_wire(i_wire); r = sqrt(Delta_x.^2+Delta_y.^2+Delta_z.^2); Bx = Bx+kB*(dy_wire*Delta_z-dz_wire*Delta_y)./r.^3; % x-component of vector field By = By+kB*(dz_wire*Delta_x-dx_wire*Delta_z)./r.^3; % y-component of vector field Bz = Bz+kB*(dx_wire*Delta_y-dy_wire*Delta_x)./r.^3; % z-component of vector field cond = [cond;find(r<0.1e-2)]; end Bx(cond) = 0; By(cond) = 0; Bz(cond) = 0; %% FIGURES figure('name','Electric Field Rod','color','k','numbertitle','off'); if streak_arrow streakarrow3d(X,Y,Z,Bx,By,Bz,2,1); else quiver3(X,Y,Z,Bx,By,Bz,'AutoScaleFactor',3); end hold on % Draw the solenoid: plot3(x_wire,y_wire,z_wire,'linewidth',3); %% Axis properties axis equal axis([xmin xmax ymin ymax zmin zmax]); rotate3d on xlabel('X, m'); ylabel('Y, m'); zlabel('Z, m'); view(-20,30); box off grid off set(gca,'color','k','xcolor','w','ycolor','w','zcolor','w') function hh=streakarrow3d(X,Y,Z,U,V,W,np,AC) %% Bertrand Dano 03-09 % Copyright 1984-2009 The MathWorks, Inc. DX=abs(X(1,1,1)-X(1,2,1)); DY=abs(Y(1,1,1)-Y(2,1,1)); DZ=abs(Z(1,1,1)-Z(1,1,2)); DD=min([DX DY DZ]); ks=DD/100; % Size of the "dot" for the tuft graphs np=np*10; alpha = 3; % Size of arrow head relative to the length of the vector beta = .15; % Width of the base of the arrow head relative to the length XYZ=stream3(X,Y,Z,U,V,W,X,Y,Z); Vmag=sqrt(U.^2+V.^2+W.^2); Vmin=min(Vmag(:));Vmax=max(Vmag(:)); Vmag=Vmag(:); cmap=colormap; for k=1:length(XYZ) F=XYZ(k); [L M]=size(F{1}); if L<np F0{1}=F{1}(1:L,:); if L==1 F1{1}=F{1}(L,:); else F1{1}=F{1}(L-1:L,:); end else F0{1}=F{1}(1:np,:); F1{1}=F{1}(np-1:np,:); end P=F1{1}; if AC==1 vcol=floor((Vmag(k)-Vmin)./(Vmax-Vmin)*64); if vcol==0; vcol=1; end COL=[cmap(vcol,1) cmap(vcol,2) cmap(vcol,3)]; else COL='k'; end hh=streamline(F0); set(hh,'color',COL,'linewidth',.5); if L>1 x1=P(1,1); y1=P(1,2); z1=P(1,3); x2=P(2,1); y2=P(2,2); z2=P(2,3); u=x2-x1; v=y2-y1; w=z2-z1; uv=sqrt(u.*u + v.*v); xa1=x2+u-alpha*(u+beta*(v+eps)); xa2=x2+u-alpha*(u-beta*(v+eps)); xa3=x2+u-alpha*u; ya1=y2+v-alpha*(v-beta.*(u+eps)); ya2=y2+v-alpha*(v+beta.*(u+eps)); ya3=y2+v-alpha*v; za1=z2+w-alpha*w; za2=z2+w-alpha*(w+beta.*(uv+eps)); za3=z2+w-alpha*(w-beta.*(uv+eps)); plot3([x2 xa1 xa2 x2 xa3 xa3 x2],[y2 ya1 ya2 y2 ya3 ya3 y2],[z2 za1 za1 z2 za2 za3 z2],'color',COL); hold on end end axis image |