基本完成逐次镜像法

Signed-off-by: dmy@lab <dmy@lab.com>
This commit is contained in:
dmy@lab 2015-10-08 14:01:55 +08:00
parent 3a73dfd84e
commit 2ac1e54f69
2 changed files with 163 additions and 34 deletions

114
GradualMirror.m Normal file
View File

@ -0,0 +1,114 @@
clc
clear
%%
% [1]. , .A., 线线. , 1984(Z1): 83-91.
% [2]. , 线. , 1999(03): 39-42.
% , .A..A., Analysis of Conductors Surface Electric Field of UHVDC Transmission Lines Based on Optimized Charge Simulation Method. , 2008(12): p. 2547-2551.
%%
%
semi_lineDistance=450;%
semi_lineCount=6;%
ConductorX=[-11000,11000];%线
ConductorY=[22000,22000,];%线
subconductorR=16.8;%线
phaseN=2;%
%%
eslong=8.854187817*10^-12*1000;
%
% Volt_=[1100/sqrt(3);1100/sqrt(3)*exp(1j*4/3*pi);1100/sqrt(3)*exp(1j*2/3*pi);];
Volt_=[800;-800;];
Volt=[];
for vLoop=1:phaseN
Volt=[Volt;Volt_(vLoop)*ones(semi_lineCount,1);];
end
%线线线
%
arc=2*pi/semi_lineCount;
%线线
R=semi_lineDistance/2/sin(arc/2);
%线
subconductorPos=[];
for phaseLoop=1:phaseN
for sC=1:semi_lineCount
subconductorPos=[subconductorPos;ConductorX(phaseLoop)+1j*ConductorY(phaseLoop)+exp(1j*((sC-1)*arc+arc/2))*R];%线
%
% matchPos=[matchPos;simulationChargePos/r1*subconductorR+ConductorX(phaseLoop)+1j*ConductorY(phaseLoop)+exp(1j*((sC-1)*arc+arc/2))*R];
end
end
mirrorSubconductorPos=conj(subconductorPos);%线
H=diag(imag(subconductorPos));
r=eye(length(H))*subconductorR;
matSubconductor=repmat(subconductorPos,1,length(subconductorPos));
conductor2conductorDistance=abs(matSubconductor-conj(matSubconductor'));
% conductor2conductorDistance=conductor2conductorDistance-diag(diag(conductor2conductorDistance));
conductor2MirrorDistance=abs(matSubconductor-repmat(conj(mirrorSubconductorPos'),length(subconductorPos),1));
% conductor2MirrorDistance=conductor2MirrorDistance-diag(diag(conductor2MirrorDistance));
P1=1/2/pi/eslong*log(2*H./r);
P1(isnan(P1))=0;
P2=1/2/pi/eslong*log(conductor2MirrorDistance./conductor2conductorDistance);
P2(isinf(P2))=0;
Pij=P1+P2;
%
QRI=Pij\Volt;
%
%
innerMirrorPos=[];
innerMirrorQ=[];%
for phaseLoop=1:phaseN
for sCOuter=1:semi_lineCount
for sCInner=1:semi_lineCount
if sCInner==sCOuter
innerMirrorPos=[innerMirrorPos;subconductorPos((phaseLoop-1)*semi_lineCount+sCOuter)];%
innerMirrorQ=[innerMirrorQ;sum(QRI(1+(phaseLoop-1)*semi_lineCount:phaseLoop*semi_lineCount))];
continue
end
innerMirrorPos=[innerMirrorPos;subconductorPos(sCOuter+(phaseLoop-1)*semi_lineCount)+subconductorR^2/abs(subconductorPos(sCOuter+(phaseLoop-1)*semi_lineCount)-subconductorPos(sCInner+(phaseLoop-1)*semi_lineCount))*(subconductorPos(sCInner+(phaseLoop-1)*semi_lineCount)-subconductorPos(sCOuter+(phaseLoop-1)*semi_lineCount))./(abs(subconductorPos(sCInner+(phaseLoop-1)*semi_lineCount)-subconductorPos(sCOuter+(phaseLoop-1)*semi_lineCount)))];
innerMirrorQ=[innerMirrorQ;-QRI(sCInner+(phaseLoop-1)*semi_lineCount)];
end
end
end
%线
vrfRelA=linspace(0,2*pi,200)';%vrf=verify
%线
vrfRelPos=exp(1j*vrfRelA)*subconductorR;
%使线线
vrfPos=[];
for phaseLoop=1:phaseN
for sC=1:semi_lineCount
vrfPos=[vrfPos;exp(1j*((sC-1)*arc+arc/2))*R+ConductorX(phaseLoop)+1j*ConductorY(phaseLoop)+vrfRelPos];
end
end
%
matVrfPos=repmat(vrfPos,1,length(innerMirrorPos));
vrf2ConductorDistance=abs(matVrfPos-repmat(conj(innerMirrorPos'),length(vrfPos),1));
vrf2MirrorDistance=abs(matVrfPos-repmat(conj(conj(innerMirrorPos')),length(vrfPos),1));
Pij=1/2/pi/eslong*log(vrf2MirrorDistance./vrf2ConductorDistance);
%
V=Pij*innerMirrorQ;
Vvalidation=[];
for phaseLoop=1:phaseN
Vvalidation=[Vvalidation;Volt_(phaseLoop)*ones(semi_lineCount*200,1);];
end
error=abs((V-Vvalidation)./Vvalidation);
% error(isinf(error))=0;
error=sum(error)/length(Vvalidation)
%
display('Finished.');
%
ABCy=imag(repmat(innerMirrorPos,1,length(vrfPos)));
ABCx=real(repmat(innerMirrorPos,1,length(vrfPos)));
y=imag(conj(matVrfPos'));
x=real(conj(matVrfPos'));
ERy=sum( ( (ABCy-y)./( (ABCy-y).^2+(ABCx-x).^2 )-(ABCy+y)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(real(innerMirrorQ),1,length(vrfPos))./2/pi/eslong,1 );
EIy=sum( ( (ABCy-y)./( (ABCy-y).^2+(ABCx-x).^2 )-(ABCy+y)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(imag(innerMirrorQ),1,length(vrfPos))./2/pi/eslong,1 );
ERx=sum( ( (ABCx-x)./( (ABCy-y).^2+(ABCx-x).^2 )-(ABCx-x)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(real(innerMirrorQ),1,length(vrfPos))./2/pi/eslong,1 );
EIx=sum( ( (ABCx-x)./( (ABCy-y).^2+(ABCx-x).^2 )-(ABCx-x)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(imag(innerMirrorQ),1,length(vrfPos))./2/pi/eslong,1 );
E2=sqrt(ERy.^2+EIy.^2+ERx.^2+EIx.^2+((ERy.^2-EIy.^2+ERx.^2-EIx.^2).^2+4*(ERy.*EIy+ERx.*EIx).^2).^.5);
E3=sqrt(ERy.^2+EIy.^2+ERx.^2+EIx.^2);
Emat=1/pi/2./eslong.*repmat(conj(innerMirrorQ'),length(vrfPos),1)./(vrf2ConductorDistance.^2).*(matVrfPos-repmat(conj(innerMirrorPos'),length(vrfPos),1))./vrf2ConductorDistance;
E=sum(Emat,2);
max(sqrt(2)*abs(E));
scatter(real(innerMirrorPos(1:length(innerMirrorPos)/1)),imag(innerMirrorPos(1:length(innerMirrorPos)/1)),[],'r');
axis equal
hold on;
scatter(real(vrfPos),imag(vrfPos),[],'k');

View File

@ -3,20 +3,22 @@ clear
%%
% [1]. , .A..A., 线. , 2006(04): 92-96.
% [2]. , 线, 2012, .
% , .A..A., Analysis of Conductors Surface Electric Field of UHVDC Transmission Lines Based on Optimized Charge Simulation Method. , 2008(12): p. 2547-2551.
%%
%
semi_lineDistance=457;%
semi_lineCount=4;%
ConductorX=[-13720,0,13720];%线
ConductorY=[20830,20830,20830];%线
CSM_N=80;%线
subconductorR=29.95;%线
phaseN=3;%
semi_lineDistance=450;%
semi_lineCount=6;%
ConductorX=[-11000,11000];%线
ConductorY=[22000,22000,];%线
CSM_N=40;%线
subconductorR=16.8;%线
phaseN=2;%
%%
%
Volt_=[765/sqrt(3);765/sqrt(3)*exp(1j*4/3*pi);765/sqrt(3)*exp(1j*2/3*pi);];
% Volt_=[1100/sqrt(3);1100/sqrt(3)*exp(1j*4/3*pi);1100/sqrt(3)*exp(1j*2/3*pi);];
Volt_=[800;-800;];
Volt=[];
for vLoop=1:length(Volt_)
for vLoop=1:phaseN
Volt=[Volt;Volt_(vLoop)*ones(CSM_N*semi_lineCount,1);];
end
%线线线
@ -26,46 +28,47 @@ CSM_arc=2*pi/CSM_N;
%线线
R=semi_lineDistance/2/sin(arc/2);
%
r1=20;
r1=5;
error=10000;
step=1/10;
maxLoop=round((subconductorR-r1)/step);
for Loop=1:maxLoop;
simulationChargePos=ones(CSM_N,1);
simulationChargeABCPos=[];
matchPos=[];
for I=1:CSM_N
simulationChargePos(I)=exp(1j*((I-1)*CSM_arc+CSM_arc/2))*r1;%
end
for phaseLoop=1:phaseN
for sC=1:semi_lineCount
simulationChargeABCPos=[simulationChargeABCPos;simulationChargePos+ConductorX(phaseLoop)+1j*ConductorY(phaseLoop)+exp(1j*((sC-1)*arc+arc/2))*R];%线
%
matchPos=[matchPos;simulationChargePos/r1*subconductorR+ConductorX(phaseLoop)+1j*ConductorY(phaseLoop)+exp(1j*((sC-1)*arc+arc/2))*R];
end
end
% simulationChargeAPos=simulationChargePos+ConductorX(1)+1j*ConductorY(1);
% simulationChargeBPos=simulationChargePos+ConductorX(2)+1j*ConductorY(2);
% simulationChargePos=simulationChargeABCPos;
%
H=diag(imag(simulationChargeABCPos));
r=subconductorR*eye(length(imag(simulationChargeABCPos)));%线
% H=diag(imag(simulationChargeABCPos));
% r=subconductorR*eye(length(imag(simulationChargeABCPos)));%线
%线线
matSimulationChargePos=repmat(simulationChargeABCPos,1,length(simulationChargeABCPos));
conductor2conductorDistance=matSimulationChargePos-conj(matSimulationChargePos');
conductor2conductorDistance=abs(conductor2conductorDistance-diag(diag(conductor2conductorDistance)));
matMatchPos=repmat(conj(matchPos'),length(simulationChargeABCPos),1);
CMS2MatchPointDistance=abs(matSimulationChargePos-matMatchPos);
% conductor2conductorDistance=abs(conductor2conductorDistance-diag(diag(conductor2conductorDistance)));
matMirrorChargePos=conj(matSimulationChargePos);%
conductor2MirrorDistance=matSimulationChargePos-conj(matMirrorChargePos');
conductor2MirrorDistance=abs(conductor2MirrorDistance-diag(diag(conductor2MirrorDistance)));
eslong=8.854187817*10;
P1=1/2/pi/eslong*log(2*H./r);
P1(isnan(P1))=0;
P2=1/2/pi/eslong*log(conductor2MirrorDistance./conductor2conductorDistance);
P2(isnan(P2))=0;
P=P1+P2;
mirrorCharge2MatchPointDistance=abs(matMirrorChargePos-matMatchPos);
% conductor2MirrorDistance=abs(conductor2MirrorDistance-diag(diag(conductor2MirrorDistance)));
eslong=8.854187817*10^-12*1000;
% P1=1/2/pi/eslong*log(2*H./r);
% P1(isnan(P1))=0;
P2=1/2/pi/eslong*log(mirrorCharge2MatchPointDistance./CMS2MatchPointDistance);
% P2(isnan(P2))=0;
% P=P1+P2;
P=P2;
%
QRI=P\Volt;
%
if error<0.0001
break;
end
%线
vrfRelA=linspace(0,2*pi,200)';%vrf=verify
%线
@ -88,8 +91,14 @@ for Loop=1:maxLoop;
for phaseLoop=1:phaseN
Vvalidation=[Vvalidation;Volt_(phaseLoop)*ones(semi_lineCount*200,1);];
end
error=sum(abs((V-Vvalidation)./Vvalidation))/length(Vvalidation);
r1=r1+step;
error=abs((V-Vvalidation)./Vvalidation);
% error(isinf(error))=0;
error=sum(error)/length(Vvalidation)
%
if error<0.001
break;
end
r1=r1+1*step;
end
display('Finished.');
if Loop<maxLoop
@ -101,12 +110,18 @@ ABCy=imag(repmat(simulationChargeABCPos,1,length(vrfPos)));
ABCx=real(repmat(simulationChargeABCPos,1,length(vrfPos)));
y=imag(conj(matVrfPos'));
x=real(conj(matVrfPos'));
ERy=sum( ( (ABCy-y)./( (ABCy-y).^2+(ABCx-x).^2 )+(ABCy+y)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(real(QRI),1,length(vrfPos))./2/pi/eslong,1 );
EIy=sum( ( (ABCy-y)./( (ABCy-y).^2+(ABCx-x).^2 )+(ABCy+y)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(imag(QRI),1,length(vrfPos))./2/pi/eslong,1 );
ERx=sum( ( (ABCx-x)./( (ABCy-y).^2+(ABCx-x).^2 )+(ABCx-x)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(real(QRI),1,length(vrfPos))./2/pi/eslong,1 );
EIx=sum( ( (ABCx-x)./( (ABCy-y).^2+(ABCx-x).^2 )+(ABCx-x)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(imag(QRI),1,length(vrfPos))./2/pi/eslong,1 );
E=sqrt(ERy.^2+EIy.^2+ERx.^2+EIx.^2);
max(E);
ERy=sum( ( (ABCy-y)./( (ABCy-y).^2+(ABCx-x).^2 )-(ABCy+y)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(real(QRI),1,length(vrfPos))./2/pi/eslong,1 );
EIy=sum( ( (ABCy-y)./( (ABCy-y).^2+(ABCx-x).^2 )-(ABCy+y)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(imag(QRI),1,length(vrfPos))./2/pi/eslong,1 );
ERx=sum( ( (ABCx-x)./( (ABCy-y).^2+(ABCx-x).^2 )-(ABCx-x)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(real(QRI),1,length(vrfPos))./2/pi/eslong,1 );
EIx=sum( ( (ABCx-x)./( (ABCy-y).^2+(ABCx-x).^2 )-(ABCx-x)./( (ABCy+y).^2+(ABCx-x).^2 ) ).*repmat(imag(QRI),1,length(vrfPos))./2/pi/eslong,1 );
E2=sqrt(ERy.^2+EIy.^2+ERx.^2+EIx.^2+((ERy.^2-EIy.^2+ERx.^2-EIx.^2).^2+4*(ERy.*EIy+ERx.*EIx).^2).^.5);
E3=sqrt(ERy.^2+EIy.^2+ERx.^2+EIx.^2);
Emat=1/pi/2./eslong.*repmat(conj(QRI'),length(vrfPos),1)./(vrf2ConductorDistance.^2).*(matVrfPos-repmat(conj(simulationChargeABCPos'),length(vrfPos),1))./vrf2ConductorDistance;
E=sum(Emat,2);
max(sqrt(2)*abs(E));
scatter(real(simulationChargeABCPos(1:length(simulationChargeABCPos)/1)),imag(simulationChargeABCPos(1:length(simulationChargeABCPos)/1)),[],'r');
axis equal