Note that there are some explanatory texts on larger screens.

plurals
  1. POising model from mathematica to matlab
    primarykey
    data
    text
    <p>i have this problem from mathematica,which refers to ising model.Here is a piece of code:</p> <pre><code>J1k = Table[2 RandomInteger[] - 1, {L}, {L}]; J2k = Table[2 RandomInteger[] - 1, {L}, {L}]; energy1 := Module[{ii1, ii2, jj1, jj2, kk1, kk2, dG1, ener1, ener2, ener}, ener = 0.; Do[ Do[ jj1 = ii1 + 1; jj2 = ii2 + 1; kk1 = ii1 - 1; kk2 = ii2 - 1; If[jj1 &gt; L, jj1 = 1]; If[jj2 &gt; L, jj2 = 1]; If[kk1 &lt; 1, kk1 = L]; If[kk2 &lt; 1, kk2 = L]; ener1 = -J1k[[ii1, ii2]]*mlat[[ii1, ii2]]*mlat[[jj1, ii2]] - J1k[[kk1, ii2]]*mlat[[ii1, ii2]]*mlat[[kk1, ii2]]; ener2 = -J2k[[ii1, ii2]]*mlat[[ii1, ii2]]*mlat[[ii1, jj2]] - J2k[[ii1, kk2]]*mlat[[ii1, ii2]]*mlat[[ii1, kk2]]; ener = ener1 + ener2 - 2*mlat[[ii1, ii2]] *\[Mu]Bk, {ii1, 1, L}], {ii2, 1, L}]; ener = ener/2.] energy = energy1 </code></pre> <p>Here is what i have done:</p> <pre><code>J1k=2*randint(L,L)-1; J2k=2*randint(L,L)-1; I have created a function: function Energy1 =energy1() %spin interaction with the neighbors ener=0; L=16; J1k=2*randint(L,L)-1; J2k=2*randint(L,L)-1; for ii2=1:L for ii1=1:L jj1=ii1+1;jj2=ii2+1;kk1=ii1-1;kk2=ii2-1; if (jj1&gt;L &amp; jj1==1) end if (jj2&gt;L &amp; jj2==1) end if (kk1&lt;1 &amp; kk1==L) end if (kk2&lt;1 &amp; kk2==L) end ener1=-J1k(ii1,ii2).*mlat(ii1,ii2).*mlat(jj1,ii2)-J1k(kk1,ii2).*mlat(ii1,ii2).*mlat(kk1,ii2); ener2=-J2k(ii1,ii2).*mlat(ii1,ii2).*mlat(ii1,jj2)-J2k(ii1,kk2).*mlat(ii1,ii2).*mlat(ii1,kk2); ener=ener1+ener2-2.*mlat(ii1,ii2).*mBk; end end ener=ener ./2; end </code></pre> <p>energy=@energy1</p> <p>The problem is that when i call energy "energy=@energy1" no value returns.It supposes to return a value "1" or "-1".</p> <p>Also, it continues (in mathematica ) :</p> <pre><code>T = 5.2; dT = 0.1; Umean = {}; energy = energy1; Do[energyseries = {}; T = T - dT; Do[i1 = RandomInteger[{1, L}]; i2 = RandomInteger[{1, L}]; j1 = i1 + 1; j2 = i2 + 1; k1 = i1 - 1; k2 = i2 - 1; If[j1 &gt; L, j1 = 1]; If[j2 &gt; L, j2 = 1]; If[k1 &lt; 1, k1 = L]; If[k2 &lt; 1, k2 = L]; dG1 = -J1k[[i1, i2]]*mlat[[j1, i2]] - J1k[[k1, i2]]*mlat[[k1, i2]]; dG2 = -J2k[[i1, i2]]*mlat[[i1, j2]] - J2k[[i1, k2]]*mlat[[i1, k2]]; dE = 2.*mlat[[i1, i2]] (dG1 + dG2 + \[Mu]Bk); W = N[Exp[-dE/T]]; If[W &lt; 1 &amp;&amp; W &gt; Random[] || dE &lt;= 0, mlat[[i1, i2]] = -mlat[[i1, i2]]; index = 1, index = 0]; energy = energy + dE*index // N; AppendTo[energyseries, energy], {i, 1, Maxstep}]; PrependTo[Umean, {T, Mean[energyseries]/L2}], {jT, 1, 51}]; </code></pre> <p>And i did :</p> <pre><code>T=5.2; dT=0.1; Umean=zeros(); energy=@energy1 for jT=1:51 energyseries=zeros(); T=T-dT; for i=1:Maxstep i1=randint(1,L); i2=randint(1,L); j1=i1+1; j2=i2+1; k1=i1-1; k2=i2-1; if (j1&gt;L &amp; j1==1) end if (j2&gt;L &amp; j2==1) end if (k1&lt;1 &amp; k1==L) end if (k2&lt;1 &amp; k2==L) end dG1=-J1k(i1,i2).*mlat(j1,i2)-J1k(k1,i2).*mlat(k1,i2); dG2=-J2k(i1,i2).*mlat(i1,j2)-J2k(i1,k2).*mlat(i1,k2); dE=2.*mlat(i1,i2).*(dG1+dG2+mBk); W=exp(-dE./T); if (W&lt;1 &amp; W&gt;rand() | dE&lt;=0) mlat(i1,i2)=-mlat(i1,i2); index=1; index=0; end energy=energy+dE.*index; energyseries(:)=[energy] end Umean(:)=[T mean(energyseries(:))./L2] end </code></pre> <p>which gives me message " Subscript indices must either be real positive integers or logicals.</p> <p>Error in ==> ising at 58 dG1=-J1k(i1,i2).*mlat(j1,i2)-J1k(k1,i2).*mlat(k1,i2);" Any ideas?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload