Resistor mesh: Difference between revisions

(→‎{{header|XPL0}}: added zkl)
Line 1,457:
<pre>
1.60899
</pre>
 
=={{header|zkl}}==
{{trans|Maxima}}
Uses the GNU Scientific Library.
<lang zkl>var [const] GSL=Import("zklGSL"); // libGSL (GNU Scientific Library)
fcn onGrid(i,j,p,q){ ((0<=i<p) and (0<=j<q)) }
fcn gridResistor(p,q, ai,aj, bi,bj){
n,A := p*q, GSL.Matrix(n,n);
foreach i,j in (p,q){
k:=i*q + j;
if(i==ai and j==aj) A[k,k]=1;
else{
c:=0;
if(onGrid(i+1,j, p,q)){ c+=1; A[k, k+q]=-1 }
if(onGrid(i-1,j, p,q)){ c+=1; A[k, k-q]=-1 }
if(onGrid(i, j+1, p,q)){ c+=1; A[k, k+1]=-1 }
if(onGrid(i, j-1, p,q)){ c+=1; A[k, k-1]=-1 }
A[k,k]=c;
}
}
b:=GSL.Vector(n);
b[k:=bi*q + bj]=1;
A.AxEQb(b)[k];
}</lang>
<lang zkl>gridResistor(10,10, 1,1, 7,6).println();</lang>
{{out}}
<pre>
1.60899
</pre>
Anonymous user