I need to calculate potential in a nonuniform conductor. The complete problem is
2 dimensional, but even 1D is causing me trouble.In the 1D problem, you have a 1D conductor of length 3l. The first l has a conductivity of k and the remaining 2l of the conductor has a conductivity of
2k. The two sections have the same resistance. If a voltage is applied across this conductor, the both of the sections will drop half the voltage, and the voltage change in each section will be linear.Here are the the equations:
Let J be current density, E be the electric field and V be the potential.
Since there is no free charge:
div J = 0.
The current is related to the field via the isotropic but not constant conductivity k:
J = k E.
And the field is the gradient of the potential V:
E = grad V.
Putting this together gives:
div (k grad V) = 0.
In 1D (dimension x) this is:
dk / dx * dv/dx + k * d^2 v / dx^2 = 0
d^2 v / dx^2 = - dk / dx * dv/dx
Taking a finite difference approximation gives:
k(i) * ( v(i-1) -2 v(i) + v(i+1) ) / D^2 = -(k(i+1) - k(i-1))/2D * (v(i
+1) - v(i-1))/2Dwhere D is the grid spacing, and i is the index which is the descrete position.
This comes out as:
v(i) = = (v(i+1) * ( k(i) + (k(i+1) - k(i-1))/4) + v(i-1)*(k(i) - (k(i
+1)-k(i-1))/4))/ (2 * k(i))which can be iterated. This is the relaxation solution for the differential equation above.
If I solve the above equation, for the problem above, I seem to get the right answer (the middle voltage gets very close to half the total voltage, butit takes a long time to converge). However, if I make the conductivitites significantly different, then the equations become unstable and I can't get an answer.
Can anyone help?
-Ed
I have a simple solver in matlab. Here is the code:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%% xs = [1 : 90 ]; %Positions vs = 0 * xs; %Voltages
rs = 0 * xs; %Conductivities
rs(1:30) = 5; rs(31:90) = 10;
while 1
vs(1) = 1; %Boundary conditions: 1 volt at the left edge vs(90) = 0; %Boundary conditions: 0 volts at the right edge edge
v2 = vs;
for i=2:89 v2(i) = (vs(i+1) * ( rs(i) + (rs(i+1) - rs(i-1))/4) + vs(i-1)*(rs(i)
- (rs(i+1)-rs(i-1))/4))/ (2 * rs(i)); end
hold off plot(xs, vs, 'g'); hold on plot(xs, v2, 'r');
vs = v2;
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%