各位:小弟有事请教啊,帮我看一下,下面是用迭代法求线性方程组的解,结果老是不正确,请高手帮看一下,问题出在哪里啊?
代码如下:import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class JacobiTest {public static void main(String args[]) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
final int MAX=10;
float d,e,sum;
float A[][] = new float[10][10];
float X[] = new float[10];
float Y[] = new float[10];
int n = 0,N,i,k,j;
System.out.println("输入迭代次数N=");
N = Integer.parseInt(reader.readLine());
System.out.println("输入方程元数n=");
n = Integer.parseInt(reader.readLine());
for(i=1;i<=n;i++)// 矩阵输入A:b
{
for(j=1;j<=n;j++)
{
System.out.println("a["+ i +"][" + j + "]=");
A[i][j] = Float.parseFloat(reader.readLine());
}
System.out.println("b["+i+"]=");
A[i][j] = Float.parseFloat(reader.readLine());
System.out.println("=========>A["+i+"][" + j + "]=" + A[i][j]);
}
System.out.println("输入误差限e=");
e = Float.parseFloat(reader.readLine());
System.out.println("=========给X赋初值==========");
for(i=1;i<=n;i++)// 给X赋初值
{
System.out.println("X[" + i + "]=");
//String aa = reader.readLine();
X[i] = Float.parseFloat(reader.readLine());
}
for(i=1;i<=n;i++)// 判断主对角线元素是否为0
{
if(A[i][i]==0)
{
System.out.println("算法失败!");
System.exit(1);
}
}
for(k=1;;k++)
{
for(i=1,d=0;i<=n;i++)
{
sum=0;
for(j=1;j<=n;j++)
{
if(j==i)continue;
sum -=(A[i][j]*X[j]);
}
Y[i]=(A[i][n+1]+sum)/A[i][i];
float d1=(float)Math.abs(Y[i]-X[i]);
if(d1>d){
d=d1;
}
} if(d<e)
{
for(i=1;i<=n;i++)
System.out.println(Y[i] + " ");
System.exit(1);
}
if(k==N)
{
System.out.println("迭代失败!");
System.exit(1);
}
for(i=1;i<=n;i++)
X[i]=Y[i];
}
}
}
代码如下:import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class JacobiTest {public static void main(String args[]) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
final int MAX=10;
float d,e,sum;
float A[][] = new float[10][10];
float X[] = new float[10];
float Y[] = new float[10];
int n = 0,N,i,k,j;
System.out.println("输入迭代次数N=");
N = Integer.parseInt(reader.readLine());
System.out.println("输入方程元数n=");
n = Integer.parseInt(reader.readLine());
for(i=1;i<=n;i++)// 矩阵输入A:b
{
for(j=1;j<=n;j++)
{
System.out.println("a["+ i +"][" + j + "]=");
A[i][j] = Float.parseFloat(reader.readLine());
}
System.out.println("b["+i+"]=");
A[i][j] = Float.parseFloat(reader.readLine());
System.out.println("=========>A["+i+"][" + j + "]=" + A[i][j]);
}
System.out.println("输入误差限e=");
e = Float.parseFloat(reader.readLine());
System.out.println("=========给X赋初值==========");
for(i=1;i<=n;i++)// 给X赋初值
{
System.out.println("X[" + i + "]=");
//String aa = reader.readLine();
X[i] = Float.parseFloat(reader.readLine());
}
for(i=1;i<=n;i++)// 判断主对角线元素是否为0
{
if(A[i][i]==0)
{
System.out.println("算法失败!");
System.exit(1);
}
}
for(k=1;;k++)
{
for(i=1,d=0;i<=n;i++)
{
sum=0;
for(j=1;j<=n;j++)
{
if(j==i)continue;
sum -=(A[i][j]*X[j]);
}
Y[i]=(A[i][n+1]+sum)/A[i][i];
float d1=(float)Math.abs(Y[i]-X[i]);
if(d1>d){
d=d1;
}
} if(d<e)
{
for(i=1;i<=n;i++)
System.out.println(Y[i] + " ");
System.exit(1);
}
if(k==N)
{
System.out.println("迭代失败!");
System.exit(1);
}
for(i=1;i<=n;i++)
X[i]=Y[i];
}
}
}
程序又没有注释:比作个老师还要辛苦!