分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组
算法介绍(迭代法介绍):
代码C语言实现;
# include<stdio.h>
# include<math.h>
# define N 6
/*
*使用雅可比迭代法和高斯-赛德尔迭代法 求解线性方程组
*/
main(){
float NF2(float *x,float *y);
float A[N][N],b[N],sum=0;
float x[N],y[N]={0},x0[N];
int i,j,n=0;
//输入系数矩阵
for(i=0;i<N;i++){
for(j=0;j<N;j++){
scanf("%f",&A[i][j]);
}
}
//输入常数矩阵
for(i=0;i<N;i++){
scanf("%f",&b[i]);
}
//输入解的初值
for(i=0;i<N;i++){
scanf("%f",&x0[i]);
}
//输出系数矩阵
printf("输出该方程组的系数矩阵:\n");
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%3.1f ",A[i][j]);
}
printf("\n");
}
//输出成数矩阵
printf("输出该方程组的常数矩阵:\n");
for(i=0;i<N;i++){
printf("%3.1f\n",b[i]);
}
//输出解的迭代初值
printf("解该方程组的的迭代初值是:\n");
for(i=0;i<N;i++)
{
printf("%3.1f\n",x0[i]);
}
/*
*利用雅可比迭代法求解线性方程组
*/
for(i=0;i<N;i++)
{
x[i]=x0[i];
}
for(n=0;;n++){
//计算下一个值
for(i=0;i<N;i++){
sum=0;
for(j=0;j<N;j++){
if(j!=i){
sum=sum+A[i][j]*x[j];
}
}
y[i]=(1/A[i][i])*(b[i]-sum);
//sum=0;
}
//判断误差大小
if(NF2(x,y)>0.01){
for(i=0;i<N;i++){
x[i]=y[i];
}
}
else
break;
}
printf("经过%d次雅可比迭代解出方程组的解:\n",n+1);
for(i=0;i<N;i++){
printf("%f ",y[i]);
}
/*
*利用高斯-赛德尔迭代法求解线性方程组
*/
for(i=0;i<N;i++)
{
x[i]=x0[i];
y[i]=0;
}
for(n=0;;n++){
//计算下一个值
for(i=0;i<N;i++){
sum=0;
for(j=0;j<i;j++){
sum=sum+A[i][j]*y[j];
}
for(j=i+1;j<N;j++){
sum=sum+A[i][j]*x[j];
}
y[i]=(1/A[i][i])*(b[i]-sum);
//sum=0;
}
//判断误差大小
if(NF2(x,y)>0.01){
for(i=0;i<N;i++){
x[i]=y[i];
}
}
else
break;
}
printf("\n经过%d次高斯-赛德尔迭代解出方程组的解:\n",n+1);
for(i=0;i<N;i++){
printf("%f ",y[i]);
}
}
//求两个向量差的二范数函数
float NF2(float *x,float *y){
int i;
float z,sum1=0;
for(i=0;i<N;i++){
sum1=sum1+pow(y[i]-x[i],2);
}
z=sqrt(sum1);
return z;
}
代码运行输入输出结果;
分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组相关推荐
- 雅可比(Jacobi)及高斯-塞德尔(Gauss_Seidel)迭代法求解线性方程组的matlab现实
雅可比迭代法的实现代码: function X=Jacobi(A,B,P,delta,max1) %Input -A is a X*N nosingular matrix % -B is a N*1 ...
- 高斯—赛德尔(Gauss - Seidel)迭代法解线性方程组(Matlab程序)
%---高斯-赛德尔迭代法----- %---Gauss - Seidel iteration method clear;clc; % A=[10,-1,-2;-1,10,-2;-1,-1,5]; % ...
- 分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组(转载)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yyywww666/article/details/42805071 算法介绍(迭代法介绍): 代码C ...
- MATLAB实现雅可比与高斯塞德尔迭代
概述 用MATLAB编程实现,形成m函数文件.输入A,b矩阵,无返回值,解得x向量直接显示在命令行窗口,同时绘制出x向量的收敛曲线. A = [ 2 − 1 1 1 1 1 1 1 − 2 ] b = ...
- 计算方法:列主元消去法,LU分解法, 雅可比迭代法,高斯塞德尔迭代法 解线性方程(C++)
Matrix.h包括矩阵类Matrix的定义,Matrix.cpp包括该类成员函数的实现,LinearEqu.h包括线性方程类LinearEqu的定义,继承自Matrix类,其中solve()方法为列 ...
- [计算机数值分析]高斯-塞德尔迭代公式解线性方程组
在雅可比迭代公式的基础上,对于收敛的迭代过程,所求出的"新值"常比"老值"更准确些,因此可以用它替代老值作进一步的计算,这样的思想就是著名的高斯-塞德尔迭代公式 ...
- 基于高斯塞德尔方法的超松弛迭代法MATLAB实现
概述 用MATLAB编程实现,形成m函数文件.输入A,b矩阵,与松弛因子 ω \omega ω,无返回值.设置精度要求 ε = 1 0 − 4 \varepsilon=10^{-4} ε=10−4.所 ...
- 方程组求解matlab实现(朴素高斯求解、LU分解、雅可比迭代方法、高斯-塞德尔方法、连续过松弛(SOR))
朴素高斯求解 function x= oridinarygauss(a,b) n=length(b); for j=1:n-1for i=j+1:nmult=a(i,j)/a(j,j);for k=j ...
- 高斯-赛德尔(Gauss-Seidel)解线性方程组的Matlab实现
高斯-赛德尔(Gauss-Seidel)解线性方程组的Matlab实现 代码 运行 手算例题 迭代法解线性方程组的基本思想是构造一串收敛到解的序列,即建立一种从已有近似解计算新的近似解的规则,有不同的 ...
最新文章
- android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些
- 搭建Telnet服务器
- IMP-00002: 无法打开 D:\orcldat\test_20111024.dmp 进行读取,rman备份
- 【优达学城测评】SQLite 安装(2)
- 神奇!只用标签名称就可以做文本分类
- 固态硬盘linux提升,分析如何提升Linux的固态硬盘使用率?
- 在Vista系统中,Flash渲染功能无法使用,咋办?
- sqli-labs(29-31)
- Spring Data Jpa 复合主键
- django实现利用邮箱进行登录
- mysql gh ost 对比_GitHub开源MySQL Online DDL工具gh-ost参数解析
- 男人和女人是怎样吹牛的
- 超市管理系统-2(数据库代码以及数据库逻辑)
- 万字长文详解华为方舟编译器的荣光和使命
- 太原工业学院计算机实训中心,法学实训实验中心
- python画钢铁侠标志_pyecharts绘制复联超级英雄战斗力
- Android 解析软件包时出现问题
- PHPMyWind教程:增加上传类型
- 淘宝618列车/京东618叠蛋糕活动 自动领喵币/金币脚本
- SSL数字证书之CA根证书、CA中间证书和SSL证书