题目 1.1
public class Evaluatepi {
public static void main(String[] args){
double D = envaluate(new data().xxxx);
double[][] temp = new double[4][4];
double[] result = new double[4];
for(int i=0;i<4;i++){
System.arraycopy(new data().xxxx, 0, temp, 0, 4);
temp[0][i] = 3.061467;
temp[1][i] = 3.121445;
temp[2][i] = 3.136548;
temp[3][i] = 3.140331;
double Di = envaluate(temp);
result[i] = Di/D;
}
System.out.println("当π8=3.061467,π16=3.121445,π32=3.136548,π64=3.140331时:");
System.out.println(" c1的值:"+result[0]);
System.out.println(" c2的值:"+result[1]);
System.out.println(" c3的值:"+result[2]);
System.out.println(" π的值:"+result[3]);
for(int i=0;i<4;i++){
System.arraycopy(new data().xxxx, 0, temp, 0, 4);
temp[0][i] = 3.313708;
temp[1][i] = 3.182598;
temp[2][i] = 3.151725;
temp[3][i] = 3.144118;
double Di = envaluate(temp);
result[i] = Di/D;
}
System.out.println("\n然而当π8=3.313708,π16=3.182598,π32=3.151725,π64=3.144118时:");
System.out.println(" c1的值:"+result[0]);
System.out.println(" c2的值:"+result[1]);
System.out.println(" c3的值:"+result[2]);
System.out.println(" π的值:"+result[3]);
}
public static double envaluate(double[][] d){
int len = d.length;
tree[] trees = new tree[len];
for(int i=0;i<len;i++){
int sign = i%2==0?1:-1;
double a = d[i][0];
double[][] M = new double[len-1][len-1];
int c = 0;
for(int j=0;j<len;j++){
if(j!=i){
double[] t = new double[len-1];
System.arraycopy(d[j], 1, t, 0, len-1);
System.arraycopy(t, 0, M[c++], 0, len-1);
}
}
trees[i] = new tree(sign*a,M);
}
while(trees[0].m.length!=2){
trees =dealtree(trees);
}
double rs = 0;
for(int i=0;i<trees.length;i++){
rs+=trees[i].a*(trees[i].m[0][0]*trees[i].m[1][1]-trees[i].m[0][1]*trees[i].m[1][0]);
}
return rs;
}
public static tree[] dealtree(tree[] t){
tree[] trees = new tree[t.length*(t.length-1)];
for(int i=0;i<t.length;i++){
double a = t[i].a;
double[][] m = t[i].m;
for(int j=0;j<m.length;j++){
int sign = j%2==0?1:-1;
double aa = m[j][0];
double[][] M = new double[m.length-1][m.length-1];
int c = 0;
for(int k=0;k<m.length;k++){
if(k!=j){
double[] tt = new double[m.length-1];
System.arraycopy(m[k], 1, tt, 0, m.length-1);
System.arraycopy(tt, 0, M[c++], 0, m.length-1);
}
}
trees[i*(t.length-1)+j] = new tree(a*sign*aa,M);
}
}
return trees;
}
}
class tree {
public double[][] m;
public double a;
public tree(double a,double[][] m){
this.m = m;
this.a = a;
}
}
class data {
public double[][] xxxx = {
{ 1.0/8, 1.0/64, 1.0/512, 1 },
{ 1.0/16, 1.0/256, 1.0/4096, 1 },
{ 1.0/32, 1.0/1024, 1.0/32768, 1 },
{ 1.0/64, 1.0/4096, 1.0/262144,1 } };
}
public class Evaluatepi {
public static void main(String[] args){
double D = envaluate(new data().xxxx);
double[][] temp = new double[4][4];
double[] result = new double[4];
for(int i=0;i<4;i++){
System.arraycopy(new data().xxxx, 0, temp, 0, 4);
temp[0][i] = 3.061467;
temp[1][i] = 3.121445;
temp[2][i] = 3.136548;
temp[3][i] = 3.140331;
double Di = envaluate(temp);
result[i] = Di/D;
}
System.out.println("当π8=3.061467,π16=3.121445,π32=3.136548,π64=3.140331时:");
System.out.println(" c1的值:"+result[0]);
System.out.println(" c2的值:"+result[1]);
System.out.println(" c3的值:"+result[2]);
System.out.println(" π的值:"+result[3]);
for(int i=0;i<4;i++){
System.arraycopy(new data().xxxx, 0, temp, 0, 4);
temp[0][i] = 3.313708;
temp[1][i] = 3.182598;
temp[2][i] = 3.151725;
temp[3][i] = 3.144118;
double Di = envaluate(temp);
result[i] = Di/D;
}
System.out.println("\n然而当π8=3.313708,π16=3.182598,π32=3.151725,π64=3.144118时:");
System.out.println(" c1的值:"+result[0]);
System.out.println(" c2的值:"+result[1]);
System.out.println(" c3的值:"+result[2]);
System.out.println(" π的值:"+result[3]);
}
public static double envaluate(double[][] d){
int len = d.length;
tree[] trees = new tree[len];
for(int i=0;i<len;i++){
int sign = i%2==0?1:-1;
double a = d[i][0];
double[][] M = new double[len-1][len-1];
int c = 0;
for(int j=0;j<len;j++){
if(j!=i){
double[] t = new double[len-1];
System.arraycopy(d[j], 1, t, 0, len-1);
System.arraycopy(t, 0, M[c++], 0, len-1);
}
}
trees[i] = new tree(sign*a,M);
}
while(trees[0].m.length!=2){
trees =dealtree(trees);
}
double rs = 0;
for(int i=0;i<trees.length;i++){
rs+=trees[i].a*(trees[i].m[0][0]*trees[i].m[1][1]-trees[i].m[0][1]*trees[i].m[1][0]);
}
return rs;
}
public static tree[] dealtree(tree[] t){
tree[] trees = new tree[t.length*(t.length-1)];
for(int i=0;i<t.length;i++){
double a = t[i].a;
double[][] m = t[i].m;
for(int j=0;j<m.length;j++){
int sign = j%2==0?1:-1;
double aa = m[j][0];
double[][] M = new double[m.length-1][m.length-1];
int c = 0;
for(int k=0;k<m.length;k++){
if(k!=j){
double[] tt = new double[m.length-1];
System.arraycopy(m[k], 1, tt, 0, m.length-1);
System.arraycopy(tt, 0, M[c++], 0, m.length-1);
}
}
trees[i*(t.length-1)+j] = new tree(a*sign*aa,M);
}
}
return trees;
}
}
class tree {
public double[][] m;
public double a;
public tree(double a,double[][] m){
this.m = m;
this.a = a;
}
}
class data {
public double[][] xxxx = {
{ 1.0/8, 1.0/64, 1.0/512, 1 },
{ 1.0/16, 1.0/256, 1.0/4096, 1 },
{ 1.0/32, 1.0/1024, 1.0/32768, 1 },
{ 1.0/64, 1.0/4096, 1.0/262144,1 } };
}
