行列式,矩阵,线性方程组,逆阵
package org.dean;
import javax.swing.*;
public class fun {
private double[][]a;
private int[][]aa;
public fun(double[][] aa){
a=new double[aa.length][aa[0].length];
System.arraycopy(aa,0,a,0,aa.length);
}
public fun(int[][] a){
aa=new int[a.length][a[0].length];
System.arraycopy(a,0,aa,0,a.length);
}
public void displayMatrix(int aa[][]){
for(int[] df:aa){
System.out.println();
for(int d:df)
System.out.print(d+” “);}
}
public void displayMatrix(double aa[][]){
for(double[] df:aa){
System.out.println();
for(double d:df)
System.out.print(d+” “);}
}
/**
* 使用高斯消元解行列式
* @param aa 二维double数组
*/
public double guass(){
double arrangerResult=1.0;
double k=0;
if(a[0].length!=a.length)throw new IllegalArgumentException(“行列式的行列数必须相等”);
for (int p = 0; p for (int r =p+1; r
a[r][p]=0;
for (int c = p+1; c a[r][c]=a[r][c]-k*a[p][c];
}
}
}
for (int i = 0; i
}
return arrangerResult;
}
public int arra(){
int c,l,sum;
int A[];
c=aa[0].length;
l=aa.length;
//第一行的代数余子式
A=new int[c];
sum=0;
//若行列数不相等
if(c!=l) throw new IllegalArgumentException(“行列式的行数和列数必须相等”);
//到达最小单位2*2,计算出值
if(c==2)return aa[0][0]*aa[1][1]-aa[0][1]*aa[1][0];
//按第一行展开,计算代数余子式
for(int i=0;i
//求第一行第i个元素的代数余子式
A[i]=solveA(aa,0,i);}
else{
A[i]=solveA(aa,0,i)*(-1);}
sum+=aa[0][i]*A[i];
}
return sum;
}
public int arra(int aa[][]){
int c,l,sum;
int A[][];
c=aa[0].length;
l=aa.length;
A=new int[c][l];
sum=0;
if(c!=l) throw new IllegalArgumentException(“行列式的行数和列数必须相等”);
if(c==2)return aa[0][0]*aa[1][1]-aa[0][1]*aa[1][0];
for(int i=0;i
A[0][i]=solveA(aa,0,i);}
else{
A[0][i]=solveA(aa,0,i)*(-1);}
sum+=aa[0][i]*A[0][i];
}
return sum;
}
/**
* 计算aa[][]第i行的j列元素的代数余子式
* @param aa 整形数组
* @param ii 元素的行号
* @param jj 元素的列号
* @return 代数余子式的行列式的值
*/
public int solveA(int aa[][],int ii,int jj){
//余子式元素
int a[][];
int c,l,m;
int x=-1,y=0;
c=aa[0].length-1;
l=aa.length-1;
//每次都按第一 行展开的余子式的行列式的值
int A[];
int sum=0;
A=new int[c];
a=new int[c][l];
for(int i=0;i<=c;i++){
//如果元素的行号等于要求余子式的行号则跳过
if(i==ii){continue;}
y=0;x++;
for(int j=0;j<=c;j++){
//如果元素的列号等于要求余子式的列号则跳过
if(j==jj){continue;
}else{
a[x][y]=aa[i][j];
y++;}
}}
if(c==2)return a[0][0]*a[1][1]-a[0][1]*a[1][0];
// 递归调用.每次都按第一行展开
for(int i=0;i
A[i]=solveA(a,0,i);
else
A[i]=solveA(a,0,i)*(-1);
sum+=a[0][i]*A[i];
}
return sum;
}
/**
* 输入增广矩阵求解线性方程组解
* @return 包含解的double数组
*/
public double[] formula(){
int c=aa[0].length-1;
int r=aa.length;
if(r!=(c)) throw new IllegalArgumentException(“必须是增广矩阵.且行数比列数少1 “);
int D[]=new int[c];
//A矩阵存放解
double A[]=new double[c];
int a[][]=new int[r][c];
for(int i=0;i
//求出系数矩阵行列式的值
int DD=arra(a);
for(int k=0;k
}
//第k列用最后一列替换
a[i][k]=aa[i][c];
}
//求出第k列用最后一列替换以后的 行列式的值
D[k]=arra(a);
//求出解
A[k]=D[k]/(double)DD;
}
return A;
}
/**
* 求方阵的逆阵
*
*
* @return 逆阵
*/
public double[][] nizhen()
{
int c,l,sum;
double A[][];
c=aa[0].length;
l=aa.length;
A=new double[c][l];
double he=arra(aa);
//如果只有2*2 则主对角线交换,副对角线取负即为A*
if(c==2){
A[0][0]=aa[1][1];
A[1][1]=aa[0][0];
A[1][0]=aa[0][1]*(-1);
A[0][1]=aa[1][0]*(-1);
//displayMatrix(A);
return A;
}
for(int i=0;i
A[j][i]=solveA(aa,i,j)/he;}
else{
A[j][i]=(solveA(aa,i,j)*(-1))/he;}
}
//displayMatrix(A);
return A;
}
}
今天重写了一次..使用了jdk5.0 的for while功能.不错.十分好用.只是递归的效率太低.高阶的几乎就是解不出来了.在想办法..
放假啦….
历经千辛万苦总算到家啦..虽然路途很远.腿好累.但是还是免不了说一句很俗气的话.回家真好 ..
很久没写日记,当然不是没话说了.只是静不下心来.作个年度总结吧.
这半年也许是我学习比较用功的半年.虽然还是逃课.上课不听讲.但是总比以前进步了不少.至少数学课笔记都 记全了.就是最后算法和数据库没考好.让我一直记在心里,同学关系比较一般.班上的人都没认全噢..还是比较不外向,看来以后要努力改变一下.搞好和同学的关系..
新的一年有好多目标噢.软件设计师要考下来,六级要考到550分,java程序员也要尽力考.数据库管理和编程要搞定.MCSE课程要学完.linux管理和编程又是不少时间.想起来头都大了噢.天天不上课也没那么多时间嘛..明年过年的时候再来看日记.看目标实现了多少噢..同学 结婚请酒.说老实话都不怎么想去,感觉我太老了噢.不过我确实是不小了.都二十好几.在过几年都奔三了 .突然感到原来我已不在年轻.有种紧迫感.
塘沽行
来天津都三年多了,竟然没有去过塘沽,说起来经常被别人鄙视,没事老听别人说在洋货市场十几块钱买劳力士的经历,各种水货,各国的小东西,总是不禁心生向往.昨天一同学塘沽回来告诉我今天塘沽有个国际大学生龙舟邀请赛,说的可是眉飞色舞,让我觉得不去都不行了.马上打电话联系,约定好时间.
今天起了一个大早.难得地破坏了我晚起得习惯.七点多就起床了,一醒马上打电话给他们,打开电脑,装魔兽,刷牙去,估计他们会磨点时间,让他们上车打电话给我,不料他们已经上车了.倒!手机欠了二十多了,这次真难得竟然还能打电话,去银行还交不了话费,坐上公交竟然下错了站,提前一站下了,没办法等了一辆再上,而他们已经等得开始骂娘了噢.到了中山门第一眼看到就是长长得排队得队伍,晕.怎么这么多人?打电话却联系不上人.不管了.先排上对再说.就在我放弃得时候他们打电话过来.原来他们还在外面等我.又被鄙视了一番,我只好把给他们买轻轨票当作补偿.到塘沽还要5块钱.轻轨很新,感觉和上海得差不多,不过上海得轻轨好像是卖票得,地铁才用磁卡.虽然感觉轻轨开得并不快,但是半个小时我们就到塘沽了.而以前他们坐公交要2个小时呢.
在轻轨上看塘沽感觉塘沽还是挺大得,我以前一直以为塘沽是个很小的区,下了轻轨发现原来并不小,市区有得基本那边都有噢..一样有家世界.国美什么得,下了轻轨却没发现洋货市场在哪,先不管了.看龙舟先,上了公交感觉公交开得好猛噢.都是急开急停,站着都要拉紧了才行,有点象福州的小公交噢.人家的口号是中速行驶呢.可怜我没吃早饭,本来就没啥力气还要耗费大量体力在维持身体平衡上.
到了外滩就感叹,人好多呀,早就听说国庆出门就是看人噢.不过还好..还可以走着游玩而不用到处挤,到了河边确发现沿河全是人,几乎都看不到河面,汗.欺负我不够高嘛…
to be continued….
我旷课了。。
今天逃了两节课,上午上的郁闷。上课几分钟就从后门逃走。下午第一次一开始就没去,以为老师上节课点的就是我们班。想想应该不会又点我们班吧。。如果全部点的话我们前面还有2个班还是来得及赶到的噢。以为宿舍到教室也就100米嘛。
想不到。。竟然又点七班。穿着拖鞋一路狂奔过去。还是晚了。。最后记了个迟到。。倒。。上了两份钟就从后门溜了。。闷。
今天宽带装好了。虽然学校好像不允许装,但是给人家网通钱 还是好说话嘛。昨天申请的,今天就开通了。怕别人知道大家都装,现在我们屋都锁门,进去就不出来了。有人来还要伪装一番。晕。
末日
前两天体检得时候做了个皮试。当时也没说注射的是什么。几个小时以后皮试的地方开始红肿,有传闻说是检查肺结核的。当时我还不信。以后是瞎传的呢。
到最后消息越来越多。不能不认真考虑一下了。上网查了一下原来是真的在做肺结核的皮试。我和宿舍3个人红肿特别厉害。我的直径有1厘米多吧。红了。还痛。今天是第三天了来复查。量了一下多大登记一下就让我们走了。问他们怎么回事也不说。说让我们回去等信。晕。还不如直接告诉我们呢。。感觉我就要挂了噢。
这几天传闻我们要退学费。因为我们的学费还是按照专科的水平交的。既然我们是正规的本科了学费当然要统一嘛。。刚开始传说师大的退了一千多。后来证实人家还没开学呢。然后又说财大退了。人家也没退嘛。后来又说南大。最后都不是。不过今天又有消息说财大是退了。人家是把该退的钱就当住宿费了。我们学校够呛,该收的钱早就收了。在退恐怕不大可能。因为传说天大南大都不打算退。
这两天商量装宽带的事情。应该问题不大噢。。