c语言如何计算出迭代次数,计算方法——C语言实现——迭代法求解线性方程组...
最近在上计算方法这门课,要求是用MATLAB做练习题,但是我觉得C语言也很棒棒啊~
题目:
和直接法不同,迭代法是一种逐次逼近的方法,将复杂问题简单化,求比较大的方程组时一般都不会用直接法。迭代法有好几种,这里使用了Jacobi迭代与Gausse_Seidel迭代法。
使用VS2017,代码如下:
//使用Jacobi迭代法与Gausse_Seidel迭代法计算线性方程组
#include "stdafx.h"
#include#include "math.h"
//根据用户输入的行列数,生成二维矩阵A L U D 向量 b x y ,并全部初始化为0
double **A, *b, *x, *y, **L, **U,**D;
double calculate_e = 0.0001;//默认精度为10^-4
unsigned int RANK = 4;
unsigned int makematrix()
{
unsigned int r, c;
printf("请输入矩阵行列数,用空格隔开:");
scanf_s("%d %d", &r, &c);
A = (double**)malloc(sizeof(double*)*r);//创建一个指针数组,把指针数组的地址赋值给a ,*r是乘以r的意思
for (int i = 0; i < r; i++)
A[i] = (double*)malloc(sizeof(double)*c);//给第二维分配空间
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++)
A[i][j] = 0.0;
}
b = (double*)malloc(sizeof(double)*r);
for (int i = 0; i < r; i++)
{
b[i] = 0.0;
}
x = (double*)malloc(sizeof(double)*c);
for (int i = 0; i < c; i++)
{
x[i] = 0.0;
}
L = (double**)malloc(sizeof(double*)*r);//创建一个指针数组,把指针数组的地址赋值给a ,*r是乘以r的意思
for (int i = 0; i < r; i++)
L[i] = (double*)malloc(sizeof(double)*c);//给第二维分配空间
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++)
L[i][j] = 0.0;
}
U = (double**)malloc(sizeof(double*)*r);//创建一个指针数组,把指针数组的地址赋值给a ,*r是乘以r的意思
for (int i = 0; i < r; i++)
U[i] = (double*)malloc(sizeof(double)*c);//给第二维分配空间
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++)
U[i][j] = 0.0;
}
D = (double**)malloc(sizeof(double*)*r);//创建一个指针数组,把指针数组的地址赋值给a ,*r是乘以r的意思
for (int i = 0; i < r; i++)
D[i] = (double*)malloc(sizeof(double)*c);//给第二维分配空间
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++)
D[i][j] = 0.0;
}
y = (double*)malloc(sizeof(double)*c);
for (int i = 0; i < c; i++)
{
y[i] = 0.0;
}
return r;
}
//提示用户输入一个方阵的内容 还有常数向量 计算精度
void getmatrix(void)//输入矩阵并呈现
{
printf("请按行从左到右依次输入系数矩阵A,不同元素用空格隔开\n");
for (int i = 0; i < RANK; i++)
{
for (int j = 0; jget_add)? fabs(x[i] - y[i]): get_add;
}
if (fabs(get_add) <= calculate_e)
{
printf ("迭代次数为:%d",k + 1);
break;
}
if (k == 99)//失效
{
return false;
}
}
for (int i = 0; i < RANK; i++) //交换xy
{
double temp;
temp = x[i];
x[i] = y[i];
y[i] = temp;
}
printf("求解x,解得:\n");
for (int i = 0; iget_add) ? (x[i] - y[i]) : get_add;
}
if (fabs(get_add) <= calculate_e)
{
printf("迭代次数为:%d", k + 1);
break;
}
if (k == 99)//失效
{
return false;
}
}
printf("求解x,解得:\n");
for (int i = 0; i
按设计的提示为所欲为 老老实实输入题目的系数矩阵和常数向量后,得到运行结果:
可以看到,通过不断迭代可以达到非常高的精度。
c语言如何计算出迭代次数,计算方法——C语言实现——迭代法求解线性方程组...相关推荐
- 数值计算方法(六)——迭代法求解线性方程组
雅克比迭代公式 公式: 代码实现: 双重循环实现迭代过程 /***@name Jacobi_iteration:雅克比迭代方法求解向量*@param1 x:初始解向量x*@param2 x1:迭代结果 ...
- 【计算方法】雅克比迭代法-高斯赛德尔迭代法求解线性方程组(c语言实现)
计算方法–用雅克比迭代法和高斯赛德尔迭代法求解线性方程组 AX = b 雅克比迭代法的数学基础 x = Gx + b x = (A ^ -1) b A = L + D + U(L是一个下三角阵,他的对 ...
- 分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组(转载)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yyywww666/article/details/42805071 算法介绍(迭代法介绍): 代码C ...
- 分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组
算法介绍(迭代法介绍): 代码C语言实现; # include<stdio.h> # include<math.h> # define N 6 /* *使用雅可比迭代法和高斯- ...
- 学会c语言开发出很多,学会了C语言可以开发出很多东西吗?
C语言相比其他高级语言,就像内功和剑法一样.只会C语言可能并不能写出一个看起来就很厉害的程序,但C语言是你学好其他一切语言的基础.有了C语言的底子,再学别的语言就很容易上手了. 你能想到的,C语言都能 ...
- C语言编程计算差商表,计算方法C语言编程计算方法C语言编程.doc
计算方法C语言编程第二章2已知方程在区间[1,2]内有一根,试问用二分法求根,使其具有5位有效数字至少应二分多少次?[程序设计]#includemain(){int n=0; float x1=1.0 ...
- c语言找出成绩的最大,C语言 求每个学生、每门课的平均成绩并找出最大值
C语言 求每个学生.每门课的平均成绩并找出最大值 for(i=0;i { y=0; for(j=0;j { y=y+a[j][i]; } c[i]=y/3; printf("第%d门课的平均 ...
- c语言寄出知识txt,三级C语言.txt
三级C语言.txt 玛丽莲梦兔 987次浏览 2020年08月02日 08:13 最佳经验 本文由作者推荐 喊口令技巧-日晷怎么读常量: 整型: 100 25 -3 0 长整型: 65000 25 1 ...
- c语言调试出错误怎么改,C语言调试常见错误及修改方法(附习题)
<C语言调试常见错误及修改方法(附习题)>由会员分享,可在线阅读,更多相关<C语言调试常见错误及修改方法(附习题)(12页珍藏版)>请在人人文库网上搜索. 1.1.调试C程序时 ...
最新文章
- 怎么帮java转换成类图_有把java代码直接转成uml类图的工具吗 – 手机爱问
- CCR源码分析-CCR架构
- .NET Core很酷,你不得不知
- 如何让MFC程序关闭按钮失效,也无法右击任务栏关闭窗口来关闭?
- 平行空间怎么设置32位_高低床怎么设置不占空间
- linux at模块,使用kgdb调试linux内核及内核模块
- 纵观 30 年 5000 多部国产电视剧,豆瓣评分最低的演员原来是……
- No portmap or rpcbind service is running on this host
- static在实例Extends、Overload中理解
- bp神经网络模型的优缺点,bp神经网络缺点及克服
- 中台战略:企业数字化转型利器
- 渝粤题库 陕西师范大学 《中国古代文学(四)》作业
- 关于no ‘read’ permission
- Tiled2Unity报错处理办法
- Annotation 介绍
- 计算机开机界面图片怎么修改,怎么修改Win7开机登录界面壁纸 Win7开机登录界面壁纸修改图文教程...
- QMI8658 - 姿态传感器学习笔记 - Ⅰ
- 计算机的击键方法教学教案,初中七年级信息技术上册教案:键盘操作与练习
- BeautifulSoup类的使用-爬取电影票房排行
- 让数据使用自由而安全,安华金和“三驾马车”驱动数据安全治理