java实现 Jacobi(雅可比)迭代求解方程组

神秘的渊虹 2014-11-14 03:30:14
主要是动态数组那里我不明白怎么搞定 问题多多 找到了一个C++编写的程序
本人想用java来实现 希望有高手能帮我讲代码写出来 或者指点一下 感激不尽了!
本人刚刚接触Java 还不怎么熟悉
主要是以下代码 不知道用java如何实现:(主要是二维数组的动态声明 以及添加 和 遍历)

void Jacobi(vector<vector<double> > A,vector<double> B,int n){
vector<double> X(n,0);
vector<double> Y(n,0);
vector<double> D(n,0);
int k=0; //记录循环次数
do{
X=Y;
for(int i=0;i<n;i++){
double tem=0;
for(int j=0;j<n;j++){
if(i!=j) tem += A[i][j]*X[j];
}
Y[i]=(B[i]-tem)/A[i][i];
cout<<left<<setw(8)<<Y[i]<<" ";
}
cout<<endl;
k++;
if(k>100){
cout<<"迭代失败!(可能是函数不收敛)"<<endl;
return ;
}

for(int a=0;a<n;a++){
D[a]=X[a]-Y[a];
}
}while( MaxOfList(D)>0.00001 || MaxOfList(D)<-0.00001);

return ;
}
//以下是C++完整代码 希望有大神帮我改成java的 感激不尽!!!!

#include<iostream>
#include<iomanip>
#include<string>
#include<vector>
using namespace std;

//函数求数组中的最大值
double MaxOfList(vector<double>x){
double max=x[0];
int n=x.size();
for(int i=0;i<n;i++)
if(x[i]>max) max=x[i];
return max;
}

//雅可比迭代公式
void Jacobi(vector<vector<double> > A,vector<double> B,int n){
vector<double> X(n,0);
vector<double> Y(n,0);
vector<double> D(n,0);
int k=0; //记录循环次数
do{
X=Y;
for(int i=0;i<n;i++){
double tem=0;
for(int j=0;j<n;j++){
if(i!=j) tem += A[i][j]*X[j];
}
Y[i]=(B[i]-tem)/A[i][i];
cout<<left<<setw(8)<<Y[i]<<" ";
}
cout<<endl;
k++;
if(k>100){
cout<<"迭代失败!(可能是函数不收敛)"<<endl;
return ;
}

for(int a=0;a<n;a++){
D[a]=X[a]-Y[a];
}
}while( MaxOfList(D)>0.00001 || MaxOfList(D)<-0.00001);

return ;
}

int main(){

int n;
cout<<"请输入方程组未知数的个数n:";
cin>>n;
cout<<endl;

vector<vector<double> >A(n,vector<double>(n,0));
vector<double>B(n,0);

cout<<"请输入方程组的系数矩阵:"<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>A[i][j];
}
}
cout<<endl;

cout<<"请输入方程组的值向量:"<<endl;
for(int k=0;k<n;k++){
cin>>B[k];
}
cout<<endl;

cout<<"您输入的方程组为:"<<endl;
for(int a=0;a<n;a++){
for(int b=0;b<n;b++){
cout<<A[a][b]<<" ";
}
cout<<" "<<B[a]<<endl;
}
cout<<endl;
cout<<"由雅可比迭代公式求的方程组的解为:"<<endl;
Jacobi(A,B,n);
return 0;
}
...全文
502 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
神秘的渊虹 2014-11-14
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
大神 能帮帮忙么?
神秘的渊虹 2014-11-14
  • 打赏
  • 举报
回复
怎么没人帮我解决呢???
神秘的渊虹 2014-11-14
  • 打赏
  • 举报
回复
不懂我的意思么
tony4geek 2014-11-14
  • 打赏
  • 举报
回复

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧