Đây là chương trình viết trên Matlab mô phỏng điện thế tại các điểm bao quanh thanh dài tích điện đều. Việc tính toán được tiến hành bằng cách chia nhỏ thanh dài ra thành nhiều đoạn, mỗi đoạn có thể xem như một điện tích điểm, tạo ra điện trường theo định luật Coulomb. Tại mỗi vị trí trong không gian, điện thế được tích phân lại theo các điện thế tạo ra từ những phần nhỏ ấy.
Những hình bên dưới thể hiện kết quả tính toán điện thế, có thể xoay góc nhìn 360 độ. Đường sức điện trường cũng được miêu tả trên từng mặt cắt. Độ lớn của điện thế biểu thị qua phổ màu. Ta thấy rằng đường sức điện trường luôn cắt vuông góc với các mặt đẳng thế.


Code chương trình
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 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | function Equipotential_Lines_Rod % Author: Tran Hai Cat % Created: 2019.02.02 clc; clear all; close all; %% INPUT DATA Q = -2e-9; % charges L = 2; N = 50; xmin = -2; xmax = 2; ymin = -1; ymax = 1; zmin = -1; zmax = 1; %% CALCULATION lambda = Q/L; dx = L/N; dq = lambda*dx; Nx = 20; Ny = 11; Nz = 11; x = linspace(xmin,xmax,Nx); y = linspace(ymin,ymax,Ny); z = linspace(zmin,zmax,Nz); [X,Y,Z] = meshgrid(x,y,z); ke = 9e9; Ex = zeros(size(X)); Ey = zeros(size(Y)); Ez = zeros(size(Z)); V = zeros(size(X)); r1 = sqrt(Y.^2+Z.^2); x_rod = -1; for iN = 1:N r = sqrt((X-x_rod).^2+Y.^2+Z.^2); E = ke*dq./r./r; Ex = Ex+E./r.*(X-x_rod); % x-component of vector field Ey = Ey+E./r.*Y; % y-component of vector field Ez = Ez+E./r.*Z; % z-component of vector field condition = find((r1<0.1)&(X>-1)&(X<1)); Ex(condition) = 0; Ey(condition) = 0; Ez(condition) = 0; V = V+ke*dq./r; V(condition) = 0; x_rod = x_rod+dx; end %% FIGURES figure('name','Equipotential Lines Rod','color','w','numbertitle','off'); hold on xslice = 0; yslice = 0; zslice = 0; slice(X,Y,Z,V,xslice,yslice,zslice); colormap(jet(64)); colorbar('vertical'); shading interp; % Draw streamline: Z1 = linspace(-1,1,Nz); X1 = -2*ones(size(Z1)); Y1 = zeros(size(Z1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) Z1 = linspace(-1,1,Nz); X1 = 2*ones(size(Z1)); Y1 = zeros(size(Z1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) X1 = linspace(-2,2,Nx); Y1 = zeros(size(X1)); Z1 = 1*ones(size(X1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) X1 = linspace(-2,2,Nx); Y1 = zeros(size(X1)); Z1 = -1*ones(size(X1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) X1 = linspace(-2,2,Nx); Y1 = -1*ones(size(X1)); Z1 = zeros(size(X1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) X1 = linspace(-2,2,Nx); Y1 = 1*ones(size(X1)); Z1 = zeros(size(X1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) Y1 = linspace(-1,1,Ny); X1 = -2*ones(size(Y1)); Z1 = zeros(size(Y1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) Y1 = linspace(-1,1,Ny); X1 = 2*ones(size(Y1)); Z1 = zeros(size(Y1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) Y1 = linspace(-1,1,Ny); X1 = zeros(size(Y1)); Z1 = 1*ones(size(Y1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) Y1 = linspace(-1,1,Ny); X1 = zeros(size(Y1)); Z1 = -1*ones(size(Y1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) Z1 = linspace(-1,1,Nz); X1 = zeros(size(Z1)); Y1 = -1*ones(size(Y1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) Z1 = linspace(-1,1,Nz); X1 = zeros(size(Z1)); Y1 = 1*ones(size(Y1)); hlines = streamline(X,Y,Z,Ex,Ey,Ez,X1,Y1,Z1); set(hlines,'Color',[0.5 0.5 0.5]) % Draw the rod: x1 = linspace(-1,1,2); phi = linspace(0,2*pi,20); y1 = 0.1*cos(phi); z1 = 0.1*sin(phi); [X1,Y1] = meshgrid(x1,y1); Z1 = zeros(size(Y1)); for i = 1:length(x1) Z1(:,i,:) = z1; end mesh(X1,Y1,Z1,'FaceColor','interp'); %% 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 on grid off set(gca,'color','w') |