计算物理吧 关注:164贴子:186
  • 4回复贴,共1

庞涛 课后习题部分解答

只看楼主收藏回复

如题


IP属地:河南1楼2013-05-11 01:22回复
    题目 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 } };
    }


    IP属地:河南3楼2013-05-12 14:19
    回复
      我觉得题目比答案更重要。
      能不能把题目列出,讨论一下呢?


      IP属地:广东4楼2013-06-18 10:19
      回复
        考完试了,可是暑假也不能放假,抽时间补补这个帖子了


        IP属地:河南来自Android客户端5楼2013-07-16 15:10
        回复