目录
静电场的知识是非常重要但同时又是非常抽象的。尤其是电场叠加得到的合电场的电场线和电势分布更是难以凭空想象。而目前网络上大部分的资料都是简单展示单个或两个电荷产生的比较经典的电场分布模型,且都是展现的电场的二维分布。但实际上,电场在空间中的分布是三维的。
本文则基于科学计算软件MATLAB,在借鉴部分参考资料的基础上,编写了基于MATLAB的静电场模拟系统,利用计算机强大的算力来帮助我们更进一步直观地认识静电场这一物质。本系统还利用MATLAB的图形用户界面创建工具GUIDE创建了交互式界面,操作更加方便[1]。
关键词:MATLAB;静电场;交互式界面
静电场这一看不见摸不着的物质难以理解。由于条件限制,也不方便通过动手实验去直观感受静电场的分布。很难想象出多个点电荷叠加得出的静电场的电场线及电势分布是什么样的。如果想要对某个位置的电场强度和电势大小进行定量分析,其中的计算量可想而知。而计算机的发展使得人们得以从大量的数据计算中摆脱出来,且运算速度越来越快。因此,本文基于科学计算软件MATLAB,在借鉴部分参考资料的基础上,编写了基于MATLAB的静电场模拟系统。该系统可实现最大将8个处于同一平面中的任意位置和电荷量的点电荷产生的静电场进行叠加,并绘制出相应电场线分布和电势分布图形。还可以通过输入坐标值得到静电场中某一点处的电场强度和电势大小。本系统还利用MATLAB的图形用户界面创建工具GUIDE创建了交互式界面,操作更加方便。
因为需要求坐标中一系列点的电势和电场强度,为了方便计算,可先求出电势φ,再直接利用电场强度和电势的微分关系求解E。所以在模拟多个静电场叠加之前,首先研究一个点电荷所产生的电场分布特点。由下述公式求得点电荷产生电场在某点的电势。

根据叠加原理得到扩展到多个点电荷产生的静电场叠加时的电势计算公式。

又根据电场强度和电势的微分关系,计算出电场强度。

但是在求解坐标系中某一点处的电场强度E时,只能通过分别求解Ex,Ey,Ez之后根据下述公式计算得到合场强。

最后根据计算所得的数据,利用MATLAB中的绘图函数将图形绘制出来即可。
用于输入点电荷的坐标位置和电荷量。
程序片段参见附录A。
用于计算点电荷合成静电场中的电势大小和电场强度,并绘制二维电场线和三维等势线的分布,这样绘制出来的就是我们最许多资料和参考书上常见的电场的二维分布图形。
计算和绘图原理:
(1)建立平面二维坐标系。
(2)计算每个点电荷到坐标系中各点的距离,共计100*100=10000个点。
(3)根据得到的距离并利用叠加原理,计算所有点电荷在坐标系中每个点产生的电势大小。
(4)根据得到的电势,结合
,计算坐标系中每个点处的电场强度。
(5)根据计算得到的数据,利用MATLAB中的图形绘制函数绘制二维电场线和三维等势线的分布。
程序片段参见附录B。
用于计算点电荷合成静电场中的电势大小和电场强度,并绘制三维电场线和三维等势面的分布。
计算和绘图原理与二维电场线和三维等势线的分布绘制相似,只是扩展到了三维坐标系上。
程序片段参见附录C。
用于计算点电荷合成静电场中某一点的电场强度和电势大小,并将结果返回到交互界面中。
计算原理:
(1)建立坐标系。
(2)计算所求坐标与各个点电荷之间的距离。
(3)利用叠加原理,计算所有点电荷在这一点产生的电势之和。
(4)分别计算各点电荷与所求点在各坐标轴方向上的电场强度分量,最后合成总电场强度大小。
程序片段参见附录D。
利用MATLAB的图形用户界面创建工具GUIDE创建了交互式界面如图所示。

MATLAB的GUIDE控件,简化了GUI应用程序的开发。本系统主要是通过文本编辑器输入参数,并在按钮中的回调函数中写入数据处理过程,单击按钮后,系统会自动生成需要绘制的图形或者返回需要计算的数字到静态文本框中显示。
系统主要分两大部分:
第一部分,图形绘制。该系统最多可同时对8个点电荷的静电场进行叠加,并绘制出相应的二维电场线分布和三维等势线分布或三维电场线分布和三维等势面分布。
第二部分,电场强度和电势大小计算。当我们设置好点电荷的参数后,可以通过输入坐标来计算静电场中某一点处的电场强度和电势大小。
点击运行之后系统会开始运行,如图所示。

参数设置:
q1:x=5,y=5,q=3
绘图结果如图所示。

蓝色带箭头线条为电场线分布,蓝色圆弧和彩色的山峰状图形为电势的分布和大小,颜色和高度都代表了电势的大小。绘制结果与理论相符。
参数设置:
等量同号:q1:x=5,y=5,q=3 q2:x=-5,y=-5,q=3
等量异号:q1:x=5,y=5,q=3 q2:x=-5,y=-5,q=-3 绘图结果如图所示。


参数设置:
q1:x=5,y=5,q=3 q2:x=6,y=-5,q=-3 q3:x=-5,y=3,q=3 q4:x=-5,y=-5,q=-3
q5:x=10,y=10,q=-2 q6:x=4,y=-10,q=4 q7:x=-10,y=10,q=-4 q8=x=-10,y=-8,q=4
绘图结果如图所示。

参数设置:
q1:x=10,y=5,z=-11,q=10
绘图结果如图所示。

蓝色线条为电场分布,彩色闭合曲面为电势分布,颜色代表电势的大小,暖色核心为正电荷,冷色核心为负电荷。
参数设置:
等量同号:q1:x=5,y=5,z=5,q=3 q2:x=-5,y=-5,z=-5,q=3
等量异号:q1:x=5,y=5,z=5,q=3 q2:x=-5,y=-5,z=-5,q=-3
绘图结果如图所示。


参数设置:
q1:x=6,y=6,z=6,q=3 q2:x=6,y=6,z=-6,q=-3 q3:x=6,y=-6,z=6,q=-3
q4:x=6,y=-6,z=-6,q=3 q5:x=-6,y=6,z=6,q=-3 q6:x=-6,y=6,z=-6,q=3
q7:x=-6,y=-6,z=6,q=3 q8:x=-6,y=-6,z=-6,q=-3
绘图结果如图所示。

参数设置:
q1:x=5,y=10,z=5,q=3 q2:x=-3,y=-5,z=-5,q=5 q3:x=3,y=6,z=-12,q=-6
绘图结果如图所示。

取任意坐标系中的点(1.3,6.4,12.9)和点(6.7,12.4,5)计算其所在处电场强度和电势大小,计算结果如图所示。


综上所述,该系统对合成静电场分布的模拟结果和参数计算结果均与实际相符,模拟效果较好。
经过观察与计算,模拟结果与实际结果相符,系统模拟效果较好。不足之处在于,由于程序中计算电势和电场强度的公式中分母会出现为0的情况而使程序无法正常运行,因此参照网络上的方法,在分母上加了一个无限小量eps(eps=2.22044604925031e-016),这样便使程序可以正常运行,同时在可接受范围内造成的误差很小。
在这个模拟系统中,每画一个图都要处理数以万计的数据,靠人力去计算根本不现实,而利用MATLAB和计算机强大的数据计算与处理能力,上万的数据在几秒钟内就可以被处理完成,并且数据的可视化使得我们能够更加直观的观察多个点电荷产生的叠加电场的电场线和电势分布,我们能借此更直观的认识静电场这一物质,帮助我们的学习。
[1]栾玲,刘杰,冯立军.基于MATLAB的点电荷系电场分布的用户图形界面设计[J].物理与工程,2016,26(4):72-74.
[2]王文涛,梅宇航.基于MATLAB的点电荷的静电场模拟[J].中学物理,2013,31(03):95-96.
[3]刘浩,韩晶.MATLAB R2020a完全自学一本通[M].北京:电子工业出版社,2020:516-546.
说明:由于作者水平有限,matlab编程为自学,在编写程序时只注重功能的实现,并没有考虑程序的运行速度、内存的使用等专业问题,因而程序运行时可能出现运行速度较慢等问题,但不影响结果的呈现。程序的正常运行需要自行创建用户界面,并将代码放在对应模块的回调函数中。
%总共需要传入很多参数,但代码都是一样的,这里只截取一个
input=str2num(get(hObject,'String'));
if(isempty(input))
set(hObject,'String','0')
end
guidata(hObject,handles);
ep0=8.854*10.^(-12); %真空介电常数
e=1.602*10.^(-19); %元电荷电量
%获取坐标和电荷量参数
x1=get(handles.edit1,'String');x11=str2num(x1);
y1=get(handles.edit2,'String');y11=str2num(y1);
q1=get(handles.edit3,'String');q11=str2num(q1)*e; %q的值为e的整数倍
x2=get(handles.edit5,'String');x22=str2num(x2);
y2=get(handles.edit6,'String');y22=str2num(y2);
q2=get(handles.edit7,'String');q22=str2num(q2)*e;
x3=get(handles.edit8,'String');x33=str2num(x3);
y3=get(handles.edit9,'String');y33=str2num(y3);
q3=get(handles.edit10,'String');q33=str2num(q3)*e;
x4=get(handles.edit11,'String');x44=str2num(x4);
y4=get(handles.edit12,'String');y44=str2num(y4);
q4=get(handles.edit13,'String');q44=str2num(q4)*e;
x5=get(handles.edit14,'String');x55=str2num(x5);
y5=get(handles.edit15,'String');y55=str2num(y5);
q5=get(handles.edit16,'String');q55=str2num(q5)*e;
x6=get(handles.edit17,'String');x66=str2num(x6);
y6=get(handles.edit18,'String');y66=str2num(y6);
q6=get(handles.edit19,'String');q66=str2num(q6)*e;
x7=get(handles.edit20,'String');x77=str2num(x7);
y7=get(handles.edit21,'String');y77=str2num(y7);
q7=get(handles.edit22,'String');q77=str2num(q7)*e;
x8=get(handles.edit23,'String');x88=str2num(x8);
y8=get(handles.edit24,'String');y88=str2num(y8);
q8=get(handles.edit25,'String');q88=str2num(q8)*e;
%设置二维坐标系范围,建立二维坐标系lyd
mul=max([q11/e,q22/e,q33/e,q44/e,q55/e,q66/e,q77/e,q88/e])/2;
%坐标范围要随着电荷量的变化而变化
xm=20*mul;
ym=20*mul;
x=linspace(-xm,xm);
y=linspace(-ym,ym);
[X,Y]=meshgrid(x,y);
%计算每个点电荷到坐标系中各点的距离
R1=sqrt((X-x11).^2+(Y-y11).^2);
R2=sqrt((X-x22).^2+(Y-y22).^2);
R3=sqrt((X-x33).^2+(Y-y33).^2);
R4=sqrt((X-x44).^2+(Y-y44).^2);
R5=sqrt((X-x55).^2+(Y-y55).^2);
R6=sqrt((X-x66).^2+(Y-y66).^2);
R7=sqrt((X-x77).^2+(Y-y77).^2);
R8=sqrt((X-x88).^2+(Y-y88).^2);
%计算电势
U=(1./(4*pi*ep0))*((q11./R1)+(q22./R2)+(q33./R3)+(q44./R4)+(q55./R5)+(q66./R6)+(q77./R7)+(q88./R8));
%画图
figure
colormap('jet');%设置配色,颜色表示电势大小
contour3(X,Y,U,100);%画三维电势图
title('二维电场线和三维等势线分布图');%设置标题
%设置坐标轴名
xlabel('X/m');
ylabel('Y/m');
zlabel('U/v');
grid on%显示轴网格线
hold on%叠加绘图
%绘制坐标轴
plot([-xm;xm],[0;0])
plot([0;0],[-ym;ym])
%标出各点电荷所在位置
if q11~=0 %只有电荷量不为零时才会标记电荷位置lyd
plot(x11,y11,'o','MarkerSize',10)%标出电荷位置
end
if q22~=0
plot(x22,y22,'o','MarkerSize',10)
end
if q33~=0
plot(x33,y33,'o','MarkerSize',10)
end
if q44~=0
plot(x44,y44,'o','MarkerSize',10)
end
if q55~=0
plot(x55,y55,'o','MarkerSize',10)
end
if q66~=0
plot(x66,y66,'o','MarkerSize',10)
end
if q77~=0
plot(x77,y77,'o','MarkerSize',10)
end
if q88~=0
plot(x88,y88,'o','MarkerSize',10)
end
%根据电场强度等于电势的负梯度计算电场强度值
[Ex,Ey]=gradient(-U,x(2)-x(1),y(2)-y(1));
%绘制电场线
streamslice(X,Y,Ex,Ey)
ep0=8.854*10.^(-12); %真空介电常数
e=1.602*10.^(-19); %元电荷电量
%获取坐标和电荷量参数
x1=get(handles.edit1,'String');x11=str2num(x1);
y1=get(handles.edit2,'String');y11=str2num(y1);
z1=get(handles.edit29,'String');z11=str2num(z1);
q1=get(handles.edit3,'String');q11=str2num(q1)*e;%q的值为e的整数倍
x2=get(handles.edit5,'String');x22=str2num(x2);
y2=get(handles.edit6,'String');y22=str2num(y2);
z2=get(handles.edit30,'String');z22=str2num(z2);
q2=get(handles.edit7,'String');q22=str2num(q2)*e;
x3=get(handles.edit8,'String');x33=str2num(x3);
y3=get(handles.edit9,'String');y33=str2num(y3);
z3=get(handles.edit31,'String');z33=str2num(z3);
q3=get(handles.edit10,'String');q33=str2num(q3)*e;
x4=get(handles.edit11,'String');x44=str2num(x4);
y4=get(handles.edit12,'String');y44=str2num(y4);
z4=get(handles.edit32,'String');z44=str2num(z4);
q4=get(handles.edit13,'String');q44=str2num(q4)*e;
x5=get(handles.edit14,'String');x55=str2num(x5);
y5=get(handles.edit15,'String');y55=str2num(y5);
z5=get(handles.edit33,'String');z55=str2num(z5);
q5=get(handles.edit16,'String');q55=str2num(q5)*e;
x6=get(handles.edit17,'String');x66=str2num(x6);
y6=get(handles.edit18,'String');y66=str2num(y6);
z6=get(handles.edit34,'String');z66=str2num(z6);
q6=get(handles.edit19,'String');q66=str2num(q6)*e;
x7=get(handles.edit20,'String');x77=str2num(x7);
y7=get(handles.edit21,'String');y77=str2num(y7);
z7=get(handles.edit35,'String');z77=str2num(z7);
q7=get(handles.edit22,'String');q77=str2num(q7)*e;
x8=get(handles.edit23,'String');x88=str2num(x8);
y8=get(handles.edit24,'String');y88=str2num(y8);
z8=get(handles.edit36,'String');z88=str2num(z8);
q8=get(handles.edit25,'String');q88=str2num(q8)*e;
%设置三维坐标系范围,建立三维坐标系
mul=max([abs(q11)/e,abs(q22)/e,abs(q33)/e,abs(q44)/e,abs(q55)/e,abs(q66)/e,abs(q77)/e,abs(q88)/e])/2;
%坐标范围要随着电荷量的变化而变化lyd
xm=20*mul;
ym=20*mul;
zm=20*mul;
x=linspace(-xm,xm);
y=linspace(-ym,ym);
z=linspace(-zm,zm);
[X,Y,Z]=meshgrid(x,y,z);
%计算每个点电荷到坐标系中各点的距离
R1=sqrt((X-x11).^2+(Y-y11).^2+(Z-z11).^2);
R2=sqrt((X-x22).^2+(Y-y22).^2+(Z-z22).^2);
R3=sqrt((X-x33).^2+(Y-y33).^2+(Z-z33).^2);
R4=sqrt((X-x44).^2+(Y-y44).^2+(Z-z44).^2);
R5=sqrt((X-x55).^2+(Y-y55).^2+(Z-z55).^2);
R6=sqrt((X-x66).^2+(Y-y66).^2+(Z-z66).^2);
R7=sqrt((X-x77).^2+(Y-y77).^2+(Z-z77).^2);
R8=sqrt((X-x88).^2+(Y-y88).^2+(Z-z88).^2);
%根据叠加原理计算电势
U=(1./(4*pi*ep0))*((q11./R1)+(q22./R2)+(q33./R3)+(q44./R4)+(q55./R5)+(q66./R6)+(q77./R7)+(q88./R8));
%根据电场强度等于电势的负梯度计算电场强度lyd
[Ex,Ey,Ez]=gradient(-U,x(2)-x(1),y(2)-y(1),z(2)-z(1));
%画图
figure
view(3);%建立三维坐标系视图
title('三维电场线和三维等势面分布图');%设置标题
%设置坐标名
xlabel('X/m');
ylabel('Y/m');
zlabel('Z/m');
grid on%显示轴网格线
hold on%叠加绘图
%标出各点电荷所在位置
if q11~=0 %只有电荷量不为零时才会标记电荷位置
plot3(x11,y11,z11,'o','MarkerSize',10)%标出电荷位置
end
if q22~=0
plot3(x22,y22,z22,'o','MarkerSize',10)
end
if q33~=0
plot3(x33,y33,z33,'o','MarkerSize',10)
end
if q44~=0
plot3(x44,y44,z44,'o','MarkerSize',10)
end
if q55~=0
plot3(x55,y55,z55,'o','MarkerSize',10)
end
if q66~=0
plot3(x66,y66,z66,'o','MarkerSize',10)
end
if q77~=0
plot3(x77,y77,z77,'o','MarkerSize',10)
end
if q88~=0
plot3(x88,y88,z88,'o','MarkerSize',10)
end
%画等势面
colormap('jet'); %设置配色,颜色表示电势大小
for i=-10e-10:1e-10:10e-10
isosurface(x,y,z,U,i); %绘制等势面
end
alpha 0.1 %设置透明度
%画电场线
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
%从x=0的平面上的几个点作为出发点,绘制到相应点电荷的图线,后面同理
streamline(x,y,z,Ex,Ey,Ez,0,l,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,Ex,Ey,Ez,xm,l,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,Ex,Ey,Ez,-xm,l,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,Ex,Ey,Ez,l,0,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,Ex,Ey,Ez,l,xm,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,Ex,Ey,Ez,l,-xm,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,Ex,Ey,Ez,l,k,0);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,Ex,Ey,Ez,l,k,xm);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,Ex,Ey,Ez,l,k,-xm);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,-Ex,-Ey,-Ez,0,l,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,-Ex,-Ey,-Ez,xm,l,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,-Ex,-Ey,-Ez,-xm,l,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,-Ex,-Ey,-Ez,l,0,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,-Ex,-Ey,-Ez,l,xm,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,-Ex,-Ey,-Ez,l,-xm,k);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,-Ex,-Ey,-Ez,l,k,0);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,-Ex,-Ey,-Ez,l,k,xm);
end
end
for k=-xm:xm/2:xm
for l=-xm:xm/2:xm
streamline(x,y,z,-Ex,-Ey,-Ez,l,k,-xm);
end
end
ep0=8.85*10.^(-12);%真空介电常数
e=1.602*10.^(-19); %元电荷电量
%获取坐标和电荷量参数
x1=get(handles.edit1,'String');x11=str2num(x1);
y1=get(handles.edit2,'String');y11=str2num(y1);
z1=get(handles.edit29,'String');z11=str2num(z1);
q1=get(handles.edit3,'String');q11=str2num(q1)*e;%q的值为e的整数倍
x2=get(handles.edit5,'String');x22=str2num(x2);
y2=get(handles.edit6,'String');y22=str2num(y2);
z2=get(handles.edit30,'String');z22=str2num(z2);
q2=get(handles.edit7,'String');q22=str2num(q2)*e;
x3=get(handles.edit8,'String');x33=str2num(x3);
y3=get(handles.edit9,'String');y33=str2num(y3);
z3=get(handles.edit31,'String');z33=str2num(z3);
q3=get(handles.edit10,'String');q33=str2num(q3)*e;
x4=get(handles.edit11,'String');x44=str2num(x4);
y4=get(handles.edit12,'String');y44=str2num(y4);
z4=get(handles.edit32,'String');z44=str2num(z4);
q4=get(handles.edit13,'String');q44=str2num(q4)*e;
x5=get(handles.edit14,'String');x55=str2num(x5);
y5=get(handles.edit15,'String');y55=str2num(y5);
z5=get(handles.edit33,'String');z55=str2num(z5);
q5=get(handles.edit16,'String');q55=str2num(q5)*e;
x6=get(handles.edit17,'String');x66=str2num(x6);
y6=get(handles.edit18,'String');y66=str2num(y6);
z6=get(handles.edit34,'String');z66=str2num(z6);
q6=get(handles.edit19,'String');q66=str2num(q6)*e;
x7=get(handles.edit20,'String');x77=str2num(x7);
y7=get(handles.edit21,'String');y77=str2num(y7);
z7=get(handles.edit35,'String');z77=str2num(z7);
q7=get(handles.edit22,'String');q77=str2num(q7)*e;
x8=get(handles.edit23,'String');x88=str2num(x8);
y8=get(handles.edit24,'String');y88=str2num(y8);
z8=get(handles.edit36,'String');z88=str2num(z8);
q8=get(handles.edit25,'String');q88=str2num(q8)*e;
xq=get(handles.edit27,'String');xqq=str2num(xq);
yq=get(handles.edit28,'String');yqq=str2num(yq);
zq=get(handles.edit37,'String');zqq=str2num(zq);
%准备计算所用的数据
Q=[q11 q22 q33 q44 q55 q66 q77 q88];
Xz=[x11 x22 x33 x44 x55 x66 x77 x88];
Yz=[y11 y22 y33 y44 y55 y66 y77 y88];
Zz=[z11,z22,z33,z44,z55,z66,z77,z88];
%计算所求坐标与各个点电荷之间的距离
deltx=-Xz+xqq;
delty=-Yz+yqq;
deltz=-Zz+zqq;
R=sqrt(deltx.^2.+delty.^2+deltz.^2);
%计算所求坐标处的电势lyd
U=(1./(4*pi*ep0)).*sum(Q./(R+eps),'all');
%计算所求坐标处的电场强度
Ea=(1./(4*pi*ep0)).*sum(Q./((deltx.^2)+eps),'all');
Eb=(1./(4*pi*ep0)).*sum(Q./((delty.^2)+eps),'all');
Ec=(1./(4*pi*ep0)).*sum(Q./((deltz.^2)+eps),'all');
E=sqrt(Ea.^2+Eb.^2+Ec.^2);
%回传显示结果
set(handles.text37,'String',U);
set(handles.text34,'String',E);
guidata(hObject,handles);
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
假设我在Store的模型中有这个非常简单的方法:defgeocode_addressloc=Store.geocode(address)self.lat=loc.latself.lng=loc.lngend如果我想编写一些不受地理编码服务影响的测试脚本,这些脚本可能已关闭、有限制或取决于我的互联网连接,我该如何模拟地理编码服务?如果我可以将地理编码对象传递到该方法中,那将很容易,但我不知道在这种情况下该怎么做。谢谢!特里斯坦 最佳答案 使用内置模拟和stub的rspecs,你可以做这样的事情:setupdo@subject=MyCl
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实