Pari/GPからCへ変換・・・
Posted: 2006年12月14日(木) 10:25
Pari/GPという計算ソフトを用いて作られたプログラムをCに変換できる人いませんでしょうか?
先日尋ねられたのですが、わたしはどちらも詳しくないので教えて頂きたいと思います。
元のプログラムは、、、
{
n=6;
g=matrix(n,n);
gs=matrix(n,n);
m=matrix(n,n);
u=matrix(n,n);
h=matrix(n,n);
c=0;
"====================step1====================";
g[1,]=[1,0,0,0,0,-21];
g[2,]=[0,1,0,0,0,-5];
g[3,]=[0,0,1,0,0,-10];
g[4,]=[0,0,0,1,0,-20];
g[5,]=[0,0,0,0,1,-24];
g[6,]=[0,0,0,0,0,49];
print("--------------------step1--------------------");
print("G=");
for(s=1,n,print(g[s,]));
print("");
print("M=");
for(s=1,n,print(m[s,]));
print("");
print("GS");
for(i=1,n,print(gs[i,]));
print("M*GS=");
mgs=m*gs;
for(s=1,n,print(msg[s,]));
print("");print("");
"====================step2====================";
gs[1,]=g[1,];
u[1,1]=1;
for(i=2,n,gs[i,]=g[i,];
for(j=1,i-1,uu=g[i,]*gs[j,]~;us=gs[j,]*gs[j,]~;u[i,j]=uu/us;
gs[i,]=gs[i,]-u[i,j]*gs[j,]
);
u[i,i]=1;
);
m=u;
print("--------------------step2"--------------------");
print("G=");
for(s=1,n,print(g[s,]));
print("");
print("M=");
for(s=1,n,print(m[s,]));
print("");
print("GS=");
for(i=1,n,print(gs[i,]));
print("M*GS=");
mgs*m*gs;
for(s=1,n,print(mgs[s,]));
print("");
i=2;
print("i=",2);
print("");
print("");
u=m;
"====================step3====================";
while(i<=n,
j=i-1;
while(j>0,
g[i,]=g[i,]-round(u[i,j])*g[j,]);
m[i,]=m[i,]-round(u[i,j])*m[j,]);
u[i,]=m[i,];
j=j-1;
print("--------------------step3"--------------------");
print("G=");
for(s=1,n,print(g[s,]));
print("");
print("M=");
for(s=1,n,print(m[s,]));
print("");
print("GS=");
for(i=1,n,print(gs[i,]));
print("");
print("M*GS=");
mgs=m*gs;
for(s=1,n,print(mgs[s,]));
print("");print("");
);
if((i>1&&(gs[i-1,]*gs[i-1,]~>2*gs[i,]*gs[i,]~),
h[i,]=g[i,];g[i,]=g[i-1,];g[i-1,]=h[i,];
mi=i-1;
for(ii=mi,n,
gs[ii,]=g[ii,];
for(j=1,ii-1,
uu=g[ii,]*gs[j,]~;us=gs[j,]*gs[j,]~;u[ii,j]=uu/us;
gs[ii,]=gs[ii,]-u[ii,j]*gs[j,]
);
u[ii,ii]=1;
);
i=i-1,
i=i+1
);
m=u;
print("--------------------step3(b)--------------------");
print("G=");
for(s=1,n,print(g[s,]));
print("");
print("M=");
for(s=1,n,print(m[s,]));
print("");
print("GS=");
for(i=1,n,print(gs[i,]));
print("");
print("M*GS=");
mgs=m*gs;
for(s=1,n,print(mgs[s,]));
print("");
print("i=",i);
print("");print("");
);
print("====================Finish====================");
print("G=");
for(s=1,n,print(g[s,]));
print("==============================================");
}
ちょっと長いですがこういうプログラムです。
どうかお願い致します!
先日尋ねられたのですが、わたしはどちらも詳しくないので教えて頂きたいと思います。
元のプログラムは、、、
{
n=6;
g=matrix(n,n);
gs=matrix(n,n);
m=matrix(n,n);
u=matrix(n,n);
h=matrix(n,n);
c=0;
"====================step1====================";
g[1,]=[1,0,0,0,0,-21];
g[2,]=[0,1,0,0,0,-5];
g[3,]=[0,0,1,0,0,-10];
g[4,]=[0,0,0,1,0,-20];
g[5,]=[0,0,0,0,1,-24];
g[6,]=[0,0,0,0,0,49];
print("--------------------step1--------------------");
print("G=");
for(s=1,n,print(g[s,]));
print("");
print("M=");
for(s=1,n,print(m[s,]));
print("");
print("GS");
for(i=1,n,print(gs[i,]));
print("M*GS=");
mgs=m*gs;
for(s=1,n,print(msg[s,]));
print("");print("");
"====================step2====================";
gs[1,]=g[1,];
u[1,1]=1;
for(i=2,n,gs[i,]=g[i,];
for(j=1,i-1,uu=g[i,]*gs[j,]~;us=gs[j,]*gs[j,]~;u[i,j]=uu/us;
gs[i,]=gs[i,]-u[i,j]*gs[j,]
);
u[i,i]=1;
);
m=u;
print("--------------------step2"--------------------");
print("G=");
for(s=1,n,print(g[s,]));
print("");
print("M=");
for(s=1,n,print(m[s,]));
print("");
print("GS=");
for(i=1,n,print(gs[i,]));
print("M*GS=");
mgs*m*gs;
for(s=1,n,print(mgs[s,]));
print("");
i=2;
print("i=",2);
print("");
print("");
u=m;
"====================step3====================";
while(i<=n,
j=i-1;
while(j>0,
g[i,]=g[i,]-round(u[i,j])*g[j,]);
m[i,]=m[i,]-round(u[i,j])*m[j,]);
u[i,]=m[i,];
j=j-1;
print("--------------------step3"--------------------");
print("G=");
for(s=1,n,print(g[s,]));
print("");
print("M=");
for(s=1,n,print(m[s,]));
print("");
print("GS=");
for(i=1,n,print(gs[i,]));
print("");
print("M*GS=");
mgs=m*gs;
for(s=1,n,print(mgs[s,]));
print("");print("");
);
if((i>1&&(gs[i-1,]*gs[i-1,]~>2*gs[i,]*gs[i,]~),
h[i,]=g[i,];g[i,]=g[i-1,];g[i-1,]=h[i,];
mi=i-1;
for(ii=mi,n,
gs[ii,]=g[ii,];
for(j=1,ii-1,
uu=g[ii,]*gs[j,]~;us=gs[j,]*gs[j,]~;u[ii,j]=uu/us;
gs[ii,]=gs[ii,]-u[ii,j]*gs[j,]
);
u[ii,ii]=1;
);
i=i-1,
i=i+1
);
m=u;
print("--------------------step3(b)--------------------");
print("G=");
for(s=1,n,print(g[s,]));
print("");
print("M=");
for(s=1,n,print(m[s,]));
print("");
print("GS=");
for(i=1,n,print(gs[i,]));
print("");
print("M*GS=");
mgs=m*gs;
for(s=1,n,print(mgs[s,]));
print("");
print("i=",i);
print("");print("");
);
print("====================Finish====================");
print("G=");
for(s=1,n,print(g[s,]));
print("==============================================");
}
ちょっと長いですがこういうプログラムです。
どうかお願い致します!