[算法][雅可比迭代解方程组]

简介:


复制代码
 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 #define maxn 50
 5 int n;//维数
 6 double a[maxn][maxn];//系数矩阵
 7 double b[maxn];//b向量
 8 double kc=0.000001;//精度控制常数
 9 double x[maxn];//x向量
10 double y[maxn];
11 double e;
12 int N0;//最大迭代次数
13 //e=||x-(k+1)-x(k)||.inf.;当e<kc时计算终止;N0为最大迭代次数;
14 //t用于暂时存放Xi的原值,以便计算Xi-(k)-Xi(k-1)
15 int i,j,k;
16 bool read(){
17     cout<<"|----------------------------------------|\n";
18     cout<<"请输入矩阵规模n:= ";
19     cin>>n;
20     cout<<"请输入系数矩阵A:= \n";
21     for(i=1;i<=n;i++)//输入a[][]
22         for(j=1;j<=n;j++)
23             cin>>a[i][j];
24     cout<<"请输入b向量b:= \n";
25     for(i=1;i<=n;i++)cin>>b[i];//输入b[]
26     cout<<"请输入x向量的初始值x:= \n";
27     for(i=1;i<=n;i++)cin>>x[i];//输入x[]初始值
28     cout<<"请输入估计最大迭代次数N0:= \n";
29     cin>>N0;
30     return 1;
31 }
32 int main(){
33     while(read()){
34         for(k=1;k<=N0;k++){
35             e=-1;
36             for(i=1;i<=n;i++){
37                 y[i]=b[i];
38                 for(j=1;j<=n;j++)if(i!=j){
39                     y[i]-=a[i][j]*x[j];
40                 }
41                 y[i]/=a[i][i];
42                 if(fabs(x[i]-y[i])>e)e=fabs(x[i]-y[i]);    
43             }if(e<kc){//输出
44                 cout<<"|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n";
45                 cout<<"最大迭代次数 k = "<<k<<'\n';
46                 for(i=1;i<=n;i++)cout<<"x["<<i<<"]="<<y[i]<<'\n';
47                 goto END;
48             }else{
49                 for(i=1;i<=n;i++)x[i]=y[i];    
50             }
51         }    
52         cout<<"|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n";
53         cout<<"失败\n";
54         END:;
55         cout<<"|----------------------------------------|\n\n";
56     }return 0;
57 }
58 /*
59 6
60 
61 4 -1 0 -1 0 0
62 -1 4 -1 0 -1 0
63 0 -1 4 -1 0 -1
64 -1 0 -1 4 -1 0
65 0 -1 0 -1 4 -1
66 0 0 -1 0 -1 4
67 
68 0 5 -2 5 -2 6
69 
70 0 0 0 0 0 0
71 
72 50
73 */
复制代码
相关文章
|
7月前
|
存储 缓存 算法
【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!
【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!
|
3月前
|
资源调度 算法
基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
本课题研究基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,并对比UKF、EKF、迭代UKF和迭代EKF的控制效果。倒立摆作为典型的非线性系统,适用于评估不同滤波方法的性能。UKF采用无迹变换逼近非线性函数,避免了EKF中的截断误差;EKF则通过泰勒级数展开近似非线性函数;迭代EKF和迭代UKF通过多次迭代提高状态估计精度。系统使用MATLAB 2022a进行仿真和分析,结果显示UKF和迭代UKF在非线性强的系统中表现更佳,但计算复杂度较高;EKF和迭代EKF则更适合维数较高或计算受限的场景。
|
4月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
81 0
|
6月前
|
存储 算法 数据挖掘
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
|
6月前
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
|
6月前
|
存储 SQL 算法
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
|
6月前
|
存储 SQL 算法
LeetCode 题目 94:五种算法递归|迭代|莫里斯|线索二叉树|栈的迭代二叉树 实现中序遍历
LeetCode 题目 94:五种算法递归|迭代|莫里斯|线索二叉树|栈的迭代二叉树 实现中序遍历
|
6月前
|
机器学习/深度学习 存储 算法
LeetCode题目 90:五种算法 回溯\迭代\位掩码\字典树\动态规划实现 子集ll
LeetCode题目 90:五种算法 回溯\迭代\位掩码\字典树\动态规划实现 子集ll
|
6月前
|
算法
数据结构和算法学习记录——认识二叉搜索树及二叉搜索树的查找操作(递归以及迭代实现-查找操作、查找最大和最小元素)
数据结构和算法学习记录——认识二叉搜索树及二叉搜索树的查找操作(递归以及迭代实现-查找操作、查找最大和最小元素)
58 0
|
7月前
|
机器学习/深度学习 监控 算法
【软件设计师】常见的算法设计方法——迭代法
【软件设计师】常见的算法设计方法——迭代法