C语言实现雅克比迭代法求根

article/2025/4/22 3:28:18

C语言实现雅克比迭代法求根

雅克比迭代法求根

  • C语言实现雅克比迭代法求根
  • 问题描述
  • 算法思想
  • C语言程序
  • 实验结果

问题描述

设方程组 A x = b Ax = b Ax=b的系数矩阵 A A A非奇异 ,且 a i i ≠ 0 {a_{ii}} \ne 0 aii=0 A A A分裂为: A = D + L + U A = D + L + U A=D+L+U
D = d i a g ( a 11 , a 22 , ⋯ a n n ) D = diag({a_{11}},{a_{22}}, \cdots {a_{nn}}) D=diag(a11,a22,ann), L L L U U U分别是将 A A A对角元素置为 0 0 0的下三角和上三角矩阵,进行一系列转化形成迭代格式可求解方程组。

算法思想

将方程组
∑ i = 1 i = n a i j x i = b i , i = 1 , 2... , n \sum_{i=1}^{i=n}{{a_{ij}}{x_i}} = {b_i}, {i = 1,2...,n} i=1i=naijxi=bi,i=1,2...,n
乘以 1 a i i \frac{1}{{{a_{ii}}}} aii1,得到等价方程组
x i = 1 a i i ( b i − ∑ i = 1 i = n b i − a i j x i ) {x_i} = \frac{1}{{{a_{ii}}}}({b_i} - \sum_{i=1}^{i=n}{b_i}- {{a_{ij}}{x_i}} ) xi=aii1(bii=1i=nbiaijxi)
简记为 x = B x + f x=Bx+f x=Bx+f.
其中, B = I − D − 1 = − D − 1 ( L + U ) , f = D − 1 b {B = I - {D^{-1}}}=-D^{-1}(L+U),f=D^{-1}b B=ID1=D1(L+U),f=D1b
我们称 φ ( x ) = B x + f \varphi (x) = Bx + f φ(x)=Bx+f为迭代函数,任取初始向量 x = x ( 0 ) x = {x^{(0)}} x=x(0),按照 x ( k + 1 ) = B x ( k ) + f {x^{(k + 1)}} = B{x^{(k)}} + f x(k+1)=Bx(k)+f形成的迭代格式,称这种迭代格式为雅克比迭代法。

C语言程序

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define MaxSize 100
double A[MaxSize][MaxSize];
double B[MaxSize];
double C[MaxSize][MaxSize];
double D[MaxSize][MaxSize];//储存D逆
double E[MaxSize][MaxSize];//储存-(D-1)*(L+U)
double F[MaxSize];//(D-1)*B
double X[MaxSize];
double X1[MaxSize];
double Y[MaxSize];
#define e 1e-6//10的负6次方
int n;//矩阵尺寸大小
//所有迭代格式X(k+1)=B*X(k)+F,B范数<1,必收敛,B范数>1,未必发散
//雅克比迭代只适用于A[i][i]非0
void InitMatrix()
{int i,j;for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j){D[i][j]=1/A[i][i];E[i][j]=0;}if(i<j)E[i][j]=A[i][j];if(i>j)E[i][j]=A[i][j];}}void Jacobi()
{int i,j,k,r;double sum1,sum2,sum4=0;for(i=0;i<n;i++)for(j=0;j<n;j++){sum1=0;for(k=0;k<n;k++)//矩阵运算{sum1=sum1+D[i][k]*E[k][j];}E[i][j]=-sum1;//(D-1)*(L+U)}//求E的F范数,判断是否收敛//E的F范数>1,不一定发散;但是E的F范数<1,一定收敛for(i=0;i<n;i++)for(j=0;j<n;j++)sum4=sum4+pow(E[i][j],2);if(sqrt(sum4)<1)printf("/*****B矩阵F范数<1,必有数值解!*****/\n");elseprintf("/*****B矩阵F范数>1,不一定有数值解!*****/\n");for(i=0;i<n;i++){sum2=0;for(k=0;k<n;k++){sum2=sum2+D[i][k]*B[k];}F[i]=sum2;//(D-1)*B}//X迭代for(r=1;r<100;r++){int flag=0;double sum3;for(i=0;i<n;i++)X1[i]=X[i];//储存上一次迭代运算结果,必须在此处储存for(i=0;i<n;i++){sum3=0;for(k=0;k<n;k++){sum3=sum3+E[i][k]*X1[k];}X[i]=F[i]+sum3;//更新X[i]}for(j=0;j<n;j++)if(fabs(X[j]-X1[j])<e)//abs整型求绝对值,fabs浮点型求绝对值flag++;if(flag==n){printf("迭代第%d次满足精度!\n",r);break;}printf("第%d次迭代向量X:\n",r);for(i=0;i<n;i++)printf("%lf\n",X[i]);}}void input()
{int i,j;printf("请输入系数矩阵A:\n");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%lf",&A[i][j]);printf("请输入向量B:\n");for(i=0;i<n;i++)scanf("%lf",&B[i]);printf("请输入初始向量X:\n");for(i=0;i<n;i++)scanf("%lf",&X[i]);
}
void print()
{int i,j;printf("方程组的近似解:\n");for(i=0;i<n;i++)printf("%lf\n",X[i]);
}int main()
{void InitMatrix();void Jacobi();void input();void print();printf("请输入矩阵行数:\n");scanf("%d",&n);printf("\n");input();InitMatrix();Jacobi();print();return 0;
}

实验结果

{ x 1 + 2 x 2 − 2 x 3 = 1 x 1 + x 2 + x 3 = 3 2 x 1 + 2 x 2 + x 3 = 5 \begin{cases} {{x_1} + 2{x_2} - 2{x_3} = 1}\\ {{x_1} + {x_2} + {x_3} = 3}\\ {2{x_1} + 2{x_2} + {x_3} = 5} \end{cases} x1+2x22x3=1x1+x2+x3=32x1+2x2+x3=5
初始向量为: x ( 0 ) = ( 0 , 0 , 0 ) T {x^{(0)}} = {(0,0,0)^T} x(0)=(0,0,0)T
在这里插入图片描述


http://chatgpt.dhexx.cn/article/5ZhEoNZQ.shtml

相关文章

雅克比迭代法和高斯-塞德尔迭代法

https://wenku.baidu.com/view/ac6a0d89d0d233d4b04e6905.html 另外附上迭代收敛的条件&#xff1a; 且越小&#xff0c;收敛的越快。

雅可比迭代法

雅可比迭代法 设有线性方程组 &#xff08;1&#xff09; 其矩阵形式为 设系数矩阵A为非奇异矩阵&#xff0c;且 从式(1)的第个方程中解出&#xff0c;得其等价形式 (2) 取初始向量 对式(2)应用迭代法&#xff0c;建立相应的迭代公式 (3) 也可记为矩阵形式 (4) 若将系数…

数值分析-雅克比迭代法

雅克比迭代法 雅克比迭代法就是众多迭代法中比较早且较简单的一种&#xff0c;其命名也是为纪念普鲁士著名数学家雅可比。雅克比迭代法的计算公式简单&#xff0c;每迭代一次只需计算一次矩阵和向量的乘法&#xff0c;且计算过程中原始矩阵A始终不变&#xff0c;比较容易并行计…

雅克比迭代算法

From https://blog.csdn.net/weixin_33895016/article/details/86031039 雅克比迭代&#xff0c;一般用来对线性方程组&#xff0c;进行求解。形如&#xff1a; a11∗x1a12∗x2a13∗x3b1a11∗x1a12∗x2a13∗x3b1   a21∗x1a22∗x2a23∗x3b2a21∗x1a22∗x2a23∗x3b2   a31…

雅克比(Jacobi)迭代法求解线性方程组

长博文不利于翻阅&#xff0c;于是又将Jacobi迭代法单独出来了。 这篇博文把高斯—赛德尔迭代法和雅克比迭代法都放到一起了&#xff0c;个人觉得看着有点累。&#xff08;迭代法求解线性方程组&#xff09;&#xff0c;不过还是要看的&#xff0c;因为它引出了迭代法。 进入…

MATLAB Jacobi迭代法 求解线性方程组

文章目录 前言一、Jacobi迭代法是什么&#xff1f;二、对应的编程思想以及公式推导 1.Jacobi迭代法 公式推导2.Jacobi迭代法求解线性方程组 例子3.Jacobi迭代法 编程实现总结 前言 雅克比&#xff08;Jacobi&#xff09;迭代法求解线性方程组 一、Jacobi迭代法是什么&#xff1…

紧张的337小时,终于等来了宇宙条字节跳动offer

作者&#xff1a;不穿格子衫的Java程序猿 来源&#xff1a;https://url.cn/5IiC4LJ 坐标北京&#xff0c;某211本科毕业生&#xff0c;之前学校活动有去过字节跳动公司总部参观&#xff0c;所以一直以来就蛮想进入字节工作的&#xff0c;被字节的企业文化和工作氛围所影响。字节…

元宇宙(Metaverse)了解一下

元宇宙(Metaverse)了解一下 “元宇宙”这个29年前就被提出的概念&#xff0c;随着近几年吸纳了日臻成熟的AI、游戏引擎、AR/VR、区块链等技术成果后&#xff0c;突然间就吸引了创业者、资本和市场的注意力。 什么是元宇宙&#xff1f; 元宇宙(Metaverse)概念起源于科幻小说&…

元宇宙时空——元宇宙是什么

未来已来的元宇宙&#xff0c;它究竟是什么&#xff0c;将带给我们生活、学习、工作怎样的改变&#xff0c;想必是很多人的好奇和疑惑。通过对元宇宙三部曲的阅读&#xff08;《元宇宙》《元宇宙通证》《元宇宙大投资》&#xff09;&#xff0c;这些答案慢慢浮出水面&#xff0…

宇宙条总包60W的前端岗,压中原题了!(附答案)

大家都知道某条已经大规模扩招半年了&#xff01; 半年来&#xff0c;身边的亲戚&#xff0c;朋友&#xff0c;同事不是入职了某条&#xff0c;就是在去往某条面试的路上&#xff01; 我身边的一朋友更是百折不挠&#xff0c;去年就开始疯狂地投简历&#xff01;时刻准备跳槽&a…

宇宙条的工作总结:第一次做面试官经历分享

去年7月份应届入职&#xff0c;已经成为社会人13个月了。这期间发生了很多事情&#xff0c;近期相关的工作总结也会逐渐和大家见面。这次先和大家分享一次面试实习生的经历。 因为是不是正式秋招的面试&#xff0c;实习生面试大部分是相对简单些&#xff1a;不会故意问一些比较…

去宇宙条面试被问:HashMap 为什么线程不安全?

我们都知道HashMap是线程不安全的&#xff0c;在多线程环境中不建议使用&#xff0c;但是其线程不安全主要体现在什么地方呢&#xff0c;本文将对该问题进行解密。 1 jdk1.7中的HashMap 在jdk1.8中对HashMap做了很多优化&#xff0c;这里先分析在jdk1.7中的问题&#xff0c;相信…

最近大火的「元宇宙」是什么?

作者&#xff1a;腾讯技术工程特约撰稿人 李佳华 本文将介绍元宇宙的由来和底层技术&#xff0c;探讨海内外资本在这条赛道上的布局&#xff0c;元宇宙将会对哪些行业产生变革的影响&#xff0c;这些影响背后凸显了元宇宙的哪些价值&#xff0c;以及元宇宙逐步实现的过程中监管…

浅谈元宇宙投资

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 什么是元宇宙元宇宙与区块链区块链的含义区块链面临的技术困境区块链的…

宇宙条面试:这样跟面试官说代理,面试官对我竖起了大拇指!

什么是代理 代理模式是常用的java设计模式&#xff0c;他的特征是代理类与委托类有同样的接口&#xff0c;代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类&#xff0c;以及事后处理消息等。代理类与委托类之间通常会存在关联关系&#xff0c;一个代理类的对象…

【元宇宙系列】游戏与元宇宙(上)——元宇宙的胚胎发育期

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 文章目录 游戏&#xff0c;元宇宙的胚胎发育期棉花产业带动了工业革命游戏孕育了元宇宙 游戏是人类文明的起点。席勒说&#xff1a;“只有当人在充分意义上是人的时候&a…

一个读者大佬精心总结的阿里、腾讯、宇宙条大厂 Offer 面经和硬核面试攻略

作者&#xff1a;见习格子衫 去年11 月底&#xff0c;在经历了充分的思想斗争后&#xff0c;我终于下定决心寄出了三方&#xff0c;历时三个多月的秋招也终于尘埃落定。过去的三个多月里&#xff0c;面试时间可能只有一个月左右&#xff0c;剩下的两个多月的时间都在等待结果和…

热乎的宇宙条总部面经,已拿offer,速来围观

本文来自作者陈同学的分享&#xff0c;哈工大机械专业研究生。 说起我字节跳动的面试经历可以说一波三折的&#xff0c;我在字节有经历过「十轮」的面试经历。 我和字节跳动的渊源可以追溯到去年2019的10月份&#xff0c;当时我的水平很菜&#xff0c;由于怕进入字节的招聘系统…

巴比特 | 元宇宙每日必读:粤港澳大湾区出台首个“元宇宙10条”,“三个五百万”将扶持哪些赛道?...

摘要&#xff1a;4月6日&#xff0c;广州市黄埔区、广州开发区举行元宇宙创新发展新闻发布会&#xff0c;正式发布《广州市黄埔区、广州开发区促进元宇宙创新发展办法》&#xff08;以下简称“元宇宙10条”&#xff09;。“元宇宙10条”扶持范围涵盖技术创新、应用示范、知识产…

各厂内推整理 (新增宇宙条)| 第四期

点击上方“朱小厮的博客”&#xff0c;选择“设为星标” 从去年开始&#xff0c;整个互联网行业的态势就不容乐观&#xff0c;很多公司都停止了招聘甚至出现了大面积的裁员潮&#xff0c;找工作变得越来越困难。 皮皮应几位道友相邀&#xff0c;在几个月前建立了一个内推群&…