From 152ee0a213dd32a439f0d3ca22528d1f06505a53 Mon Sep 17 00:00:00 2001 From: "dmy@lab" Date: Thu, 24 Sep 2015 14:38:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E7=AE=97=E5=A4=9A=E7=9B=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dmy@lab --- SelfAdaptSimulation.m | 53 +++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/SelfAdaptSimulation.m b/SelfAdaptSimulation.m index b700347..7cbf138 100644 --- a/SelfAdaptSimulation.m +++ b/SelfAdaptSimulation.m @@ -11,10 +11,14 @@ ConductorX=[-14500,14500];% ConductorY=[16500,16500];%导线间距 CSM_N=80;%每一个子导线的模拟电荷数 subconductorR=30;%子导线半径 +phaseN=2;%相数,单回三相 %% %设置电压 -Volt=[500;500;500;500;-500;-500;-500;-500]; -Volt=[500*ones(CSM_N*semi_lineCount,1);-500*ones(CSM_N*semi_lineCount,1)]; +Volt_=[500;-500;]; +Volt=[]; +for vLoop=1:length(Volt_) + Volt=[Volt;Volt_(vLoop)*ones(CSM_N*semi_lineCount,1);]; +end %按分裂数和分裂导线间距布置单相线路导线 %用极坐标 arc=2*pi/semi_lineCount; @@ -28,24 +32,23 @@ step=1/10; maxLoop=round((subconductorR-r1)/step); for Loop=1:maxLoop; simulationChargePos=ones(CSM_N,1); - simulationChargeAPos=[]; - simulationChargeBPos=[]; - for sC=1:semi_lineCount - for I=1:CSM_N -% simulationChargePos(I)=exp(1j*((I-1)*CSM_arc+CSM_arc/2))*(R+r1);%逆时针转一个角度 - simulationChargePos(I)=exp(1j*((I-1)*CSM_arc+CSM_arc/2))*r1;%逆时针转一个角度 + simulationChargeABCPos=[]; + 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];%移动到子导线中心 end - simulationChargeAPos=[simulationChargeAPos;simulationChargePos+ConductorX(1)+1j*ConductorY(1)+exp(1j*((sC-1)*arc+arc/2))*R];%移动到子导线中心 - simulationChargeBPos=[simulationChargeBPos;simulationChargePos+ConductorX(2)+1j*ConductorY(2)+exp(1j*((sC-1)*arc+arc/2))*R];%移动到子导线中心 end % simulationChargeAPos=simulationChargePos+ConductorX(1)+1j*ConductorY(1); % simulationChargeBPos=simulationChargePos+ConductorX(2)+1j*ConductorY(2); - simulationChargePos=[simulationChargeAPos;simulationChargeBPos]; +% simulationChargePos=simulationChargeABCPos; %计算电位系数 - H=diag(imag(simulationChargePos)); - r=subconductorR*eye(length(imag(simulationChargePos)));%导线自几何均距 + H=diag(imag(simulationChargeABCPos)); + r=subconductorR*eye(length(imag(simulationChargeABCPos)));%导线自几何均距 %导线与导线的距离 - matSimulationChargePos=repmat(simulationChargePos,1,length(simulationChargePos)); + matSimulationChargePos=repmat(simulationChargeABCPos,1,length(simulationChargeABCPos)); conductor2conductorDistance=matSimulationChargePos-conj(matSimulationChargePos'); conductor2conductorDistance=abs(conductor2conductorDistance-diag(diag(conductor2conductorDistance))); matMirrorChargePos=conj(matSimulationChargePos);%虚部取负号 @@ -69,18 +72,23 @@ for Loop=1:maxLoop; vrfRelPos=exp(1j*vrfRelA)*subconductorR; %移动坐标,使验证的子导线中心和实际子导线中心重合。 vrfPos=[]; - for sC=1:semi_lineCount - vrfPos=[vrfPos;exp(1j*((sC-1)*arc+arc/2))*R+ConductorX(1)+1j*ConductorY(1)+vrfRelPos]; + 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 -% vrfPos=ConductorX(1)+1j*ConductorY(1)+vrfRelPos; %计算这一点的电位系数 - matVrfPos=repmat(vrfPos,1,length(simulationChargePos)); - vrf2ConductorDistance=abs(matVrfPos-repmat(conj(simulationChargePos'),length(vrfPos),1)); - vrf2MirrorDistance=abs(matVrfPos-repmat(conj(conj(simulationChargePos')),length(vrfPos),1)); + matVrfPos=repmat(vrfPos,1,length(simulationChargeABCPos)); + vrf2ConductorDistance=abs(matVrfPos-repmat(conj(simulationChargeABCPos'),length(vrfPos),1)); + vrf2MirrorDistance=abs(matVrfPos-repmat(conj(conj(simulationChargeABCPos')),length(vrfPos),1)); Pij=1/2/pi/eslong*log(vrf2MirrorDistance./vrf2ConductorDistance); %计算电压 V=Pij*QRI; - error=sum(abs(V-500)./500)/length(V); + Vvalidation=[]; + 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; end display('Finished.'); @@ -88,7 +96,8 @@ if Loop