// // Esempio di documento Javascript esterno... // function peresempio(){ return 2*Math.PI; } // // // Definendo in questo modo inipermuta, ogni // permutazione viene rappresentata tramite cifre decimali. // var inipermuta="1xx"; // // Da una stringa o da un intero deduce // la permutazione corrispondente. // ss == numero o stringa con cui esprimo la permutazione. // diversi== quanti sono gli oggetti della permutazione. // function ossiapermuta(sv,diversi){ var j,k,kk,n,nn,ss=sv,vs=[],vp=[]; n=inipermuta.charCodeAt(0); vp[0]="{"+ String.fromCharCode(n)+"}"; nn=diversi-n%diversi; for(j=0;diversi>j;j++){ss+=inipermuta; vs[j]=true;} for(j=0;diversi>j;j++){ n=(nn+ss.charCodeAt(j))%diversi; if(vs[n]){vp[j+1]=n+1;vs[n]=false;} else{ vp[j+1]=-1; for(k=n+1;diversi+n>k;k++){ kk=k%diversi; if(vs[kk]){vp[j+1]=kk+1; vs[kk]=false;break;}}}} for(j=1;diversi>=j;j++)vs[j]=vp[j]; n=1;for(j=1;diversi>=j;j++){ if(vs[j]!=j)for(k=1;diversi>=k;k++){ if(vs[k]==j){vs[k]=vs[j]; vs[j]=j;n=-n;break;}}} return ["LeviCivita \u03b5 : ",n,vp]; } // // Calcola la lunghezza minima della lista // che deve contenere il tensore di ordine // ossia base e rango assegnati. // function mindimor(base,rango){ var hh,nt,pb; var ba=Math.round(base), ra=Math.round(rango); if(2>ba || 1>ra) return 2; if(1==ra)return (2*ba-1); pb=Math.pow(2,ra-1); nt=Math.pow(ba,ra); hh=nt-nt%pb; return (hh+pb*(1+(hh/pb)%2)); } // // Come mindimor ma senza il vincolo di usare // la potenza di 2 per consevare l'info del // rango del tensore. // function tensolungo(base,rango,primo){ var mm; var ba=Math.round(base), ra=Math.round(rango), pr=Math.max(2,Math.round(primo)); if(2>ba || 1>ra) return 2; if(ra==1){mm=ba+1+Math.floor(ba/(pr-1));} else{ mm=Math.pow(pr,ra-1)* Math.ceil(Math.pow(ba,ra)/Math.pow(pr,ra-1)); if(mm%(Math.pow(pr,ra))==0)mm+=Math.pow(pr,ra-1);} return mm; } // // In base alla lunghezza della lista trova // l'ordine e il rango del tensore // contenuto nella lista. // function baserango(lungo){ var j,ba=1,pd=1,ra=0,lu=Math.round(lungo); if(3>lu)return [2,ba,ra]; for(j=0;lu>j;j++){ra++; pd=2*pd;if(lu%pd!=0)break;} if(pd==2)ba=(lu+1)/2; else if(pd==2*lu){ba=2;ra=ra-2;} else for(j=0;lu>j;j++){ba++; if(Math.pow(ba+1,ra)>lu)break;} return [lu,ba,ra]; } //