注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

千鸟

本blog所有日志均系原创 转载请注明出处

 
 
 

日志

 
 

用迭代法解方程组(java)  

2007-03-14 19:38:02|  分类: Arithmetic |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

先看个用matlab画的 线性方程的图:

t=-10:0.2:10

y=t.^4-5*(t.^3)+7*(t)

plot(t,y)

 

/*

 * DoRect.java

 *

 * Created on 2006年12月4日, 下午7:09

 *

 * To change this template, choose Tools | Template Manager

 * and open the template in the editor.

 */

package rect;

/**

 *

 * @author jzxl

 */

public class DoRect {

   

    /** Creates a new instance of DoRect */

    public DoRect() {

    }

   

    ///////////////解方程组的函数

   public static double  GaussSolve(double[][] a,double[][] b,double[][] c,int n,int m)

  { int i,j,k,row,colunm;

    double temp,max,d=1;

    int[] p=new int[n];

    for(i=0;i<n;i++)p[i]=i;

      for(i=0;i<n-1;i++)

      { //找主元

  row=i;colunm=i;

        max=Math.abs(a[i][i]);

     for(j=i;j<n;j++)

         for(k=i;k<n;k++)

          {temp=Math.abs(a[j][k]);

           if(temp>max){max=temp;row=j;colunm=k;}

       }

     if (max==0){return 0;}

     //第row行、第i行互换

     if(row!=i)

     { for(k=i;k<n;k++)

       {temp=a[i][k];a[i][k]=a[row][k];a[row][k]=temp;}

       for(k=0;k<m;k++)

       {temp=b[i][k];b[i][k]=b[row][k];b[row][k]=temp;}

     }

     //第column列、第i列互换

     if(colunm!=i)

     { for(j=0;j<n;j++)

       {temp=a[j][colunm];a[j][colunm]=a[j][i];a[j][i]=temp;}

       k=p[i];p[i]=p[colunm];p[colunm]=k;

       }

     d*=a[i][i];

     //第i行归一化

      for(k=i+1;k<n;k++)a[i][k]/=a[i][i];

      for(k=0;k<m;k++)b[i][k]/=a[i][i];

      a[i][i]=1;

     //消元

     for(j=i+1;j<n;j++)

      { for(k=i+1;k<n;k++)a[j][k]-=a[j][i]*a[i][k];

     for(k=0;k<m;k++)b[j][k]-=a[j][i]*b[i][k];

     a[j][i]=0;

      }

    }

       d*=a[n-1][n-1];

       //回代

       for(k=0;k<m;k++)

       {b[n-1][k]/=a[n-1][n-1];

        for(i=n-2;i>=0;i--)

          for(j=i+1;j<n;j++)

           b[i][k]-=a[i][j]*b[j][k];

       }

       //调整次序

       for(i=0;i<n;i++)

         for(j=0;j<m;j++)

         c[p[i]][j]=b[i][j];

       return d;

  }

   //////处理int型

   public static int  GaussSolveint(int [][] a,int [][] b,double[][] c,int n,int m)

  { int i,j,k,row,colunm;

    int  temp,max,d=1;

    int[] p=new int[n];

    for(i=0;i<n;i++)p[i]=i;

      for(i=0;i<n-1;i++)

      { //找主元

  row=i;colunm=i;

        max=Math.abs(a[i][i]);

     for(j=i;j<n;j++)

         for(k=i;k<n;k++)

          {temp=Math.abs(a[j][k]);

           if(temp>max){max=temp;row=j;colunm=k;}

       }

     if (max==0){return 0;}

     //第row行、第i行互换

     if(row!=i)

     { for(k=i;k<n;k++)

       {temp=a[i][k];a[i][k]=a[row][k];a[row][k]=temp;}

       for(k=0;k<m;k++)

       {temp=b[i][k];b[i][k]=b[row][k];b[row][k]=temp;}

     }

     //第column列、第i列互换

     if(colunm!=i)

     { for(j=0;j<n;j++)

       {temp=a[j][colunm];a[j][colunm]=a[j][i];a[j][i]=temp;}

       k=p[i];p[i]=p[colunm];p[colunm]=k;

       }

     d*=a[i][i];

     //第i行归一化

      for(k=i+1;k<n;k++)a[i][k]/=a[i][i];

      for(k=0;k<m;k++)b[i][k]/=a[i][i];

      a[i][i]=1;

     //消元

     for(j=i+1;j<n;j++)

      { for(k=i+1;k<n;k++)a[j][k]-=a[j][i]*a[i][k];

     for(k=0;k<m;k++)b[j][k]-=a[j][i]*b[i][k];

     a[j][i]=0;

      }

    }

       d*=a[n-1][n-1];

       //回代

       for(k=0;k<m;k++)

       {b[n-1][k]/=a[n-1][n-1];

        for(i=n-2;i>=0;i--)

          for(j=i+1;j<n;j++)

           b[i][k]-=a[i][j]*b[j][k];

       }

       //调整次序

       for(i=0;i<n;i++)

         for(j=0;j<m;j++)

         c[p[i]][j]=b[i][j];

       return d;

  }

   public static void main(String[] args)// 主函数

 {

  DoRect rec=new DoRect();

  

  int [][] jie={{3,-2,12},{2,1,1}};

  int[][]bbk={

   {1,1,1,1,3},

     {1,2,4,8,4},

     {1,3,9,27,3},

      {1,4,16,64,-3}

  };

  double[][] try2={

   {2,1,-5,1},

   {1,-3,0,-6},

   {0,2,-1,2},

   {1,4,-7,6},

   };

  double[][] b={{8,.1},{9,.01},{-5,.01},{0,0.001}};

 // double[][] b2={8.0,9.0,-5.0,0.0};

  double [][]c=new double[4][1];

  double xx=GaussSolve(try2,b,c,4,1);

  

  System.out.print("\n/n"+c[0][0]);

 } 

   

}

  评论这张
 
阅读(1504)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017