【数值计算方法】雅可比解线性方程

2024-05-29 13:20

本文主要是介绍【数值计算方法】雅可比解线性方程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

废话少说,直接上干货。

#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;        //矩阵尺寸大小// 初始化矩阵
void InitMatrix()
{int i, j;for (i = 0; i < n; i++){for (j = 0; j < n; j++){if (i == j)D[i][j] = A[i][j];elseC[i][j] = A[i][j];}}
}// 雅可比迭代求解线性方程组
int Jacobi()
{int k;double sum, max_diff;for (k = 0; ; k++) {max_diff = 0.0;for (int i = 0; i < n; i++){sum = 0.0;for (int j = 0; j < n; j++){if (j != i)sum += A[i][j] * X[j];}X1[i] = (B[i] - sum) / A[i][i];double diff = fabs(X1[i] - X[i]);if (diff > max_diff)max_diff = diff;}for (int i = 0; i < n; i++)X[i] = X1[i];if (max_diff < e) // 满足精度要求退出循环break;}return k; // 返回迭代次数
}// 输入系数矩阵和向量
void input()
{int i, j;printf("请输入系数矩阵A:\n");for (i = 0; i < n; i++)for (j = 0; j < n; j++)scanf_s("%lf", &A[i][j]);printf("请输入向量B:\n");for (i = 0; i < n; i++)scanf_s("%lf", &B[i]);printf("请输入初始向量X:\n");for (i = 0; i < n; i++)scanf_s("%lf", &X[i]);
}// 打印方程组的近似解
void print()
{int i;printf("方程组的近似解:\n");for (i = 0; i < n; i++)printf("%lf\n", X[i]);
}int main()
{printf("请输入矩阵行数:\n");scanf_s("%d", &n);printf("\n");input();InitMatrix();int N =Jacobi();print();printf("迭代次数为:%d",N);return 0;
}

这篇关于【数值计算方法】雅可比解线性方程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1013743

相关文章

IBS和IBD的区别和计算方法介绍

大家好,我是邓飞。 今天介绍一下IBS和IBD的区别: IBS(肠易激综合症)和IBD(炎症性肠病)是两种不同的消化系统疾病,主要区别如下: IBS(Irritable Bowel Syndrome):是一种功能性肠道疾病,主要表现为腹痛、腹胀、腹泻或便秘,症状通常与饮食、压力和心理因素相关,没有明显的器质性病变。 IBD(Inflammatory Bowel Disease):是一组

组合c(m,n)的计算方法

问题:求解组合数C(n,m),即从n个相同物品中取出m个的方案数,由于结果可能非常大,对结果模10007即可。       共四种方案。ps:注意使用限制。 方案1: 暴力求解,C(n,m)=n*(n-1)*...*(n-m+1)/m!,n<=15 ; int Combination(int n, int m) { const int M = 10007; int

交换两个变量数值的3种方法

前言:交换两个数值可不是"a = b,b = a"。这样做的话,a先等于了b的值;当“b = a”后,因为此时a已经等于b的值了,这个语句就相当于执行了b = b。最终的数值关系就成了a == b,b == b。 下面教给大家3种交换变量数值的方法: 目录 1. 中介法 2. 消和法 3. 异或法 4. 总结 1. 中介法 中介法(又称 临时变量法 或 酱油法),其中心

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

鸿蒙图表MPChart自定义样式(五)左y轴显示数值,右y轴显示百分比

左y轴数值不变,右y轴改成百分比,需要通过自定义RightAxisFormatter实现IAxisValueFormatter接口,将右y轴的数值改成百分比文本,RightAxisFormatter类如下: class RightAxisFormatter implements IAxisValueFormatter {maxNumber: number = 0;constructor(ma

(转)mysql按字段排序 按照字段的数值大小排序,而非 ascii码排序

参考:http://www.cnblogs.com/codefly-sun/p/5898738.html     如果是varchar类型, 排序后是这样的: 就是对mysql数值字符串类型进行排序,在默认情况下使用order by 字段名称 desc/asc 进行排序的时候,mysql进行的排序规则是按照ASCII码进行排序的,并不会自动的识别出这些数据是数值   ,百度了一下,

牛客《剑指Offer》 -- 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 特别注意负数的情况,出现负数,将其转化为正数然后求倒数。 class Solution {public:double Power(double base, int exponent) {double total = 1;bool flag = false

Java类和对象之构造方法与对象创建之计算数学中的分数值

Java类和对象之构造方法与对象创建之计算数学中的分数值 // 创建一个名为 Fraction 的公开类public class Fraction{// 定义分数的两个属性 :分子和分母/*** 定义一个方法,该方法实现计算该分数的值,携带两个参数,分别为传来的分子和分母的值* 如果分母为0,不换行输出:分母不能为0* 如果分母不为0,将该分数的值四舍五入保留两位小数后输出* 输出格式为:该

【游戏安全】CheatEngine基础使用——如何对不同类型的数值进行搜索?如何破解数值加密找到想修改的数值?

游戏安全 不同数值类型的搜索破解简单数值加密 不同数值类型的搜索 可以在游戏中看到很精确的物品数量,但是在CE中却什么都扫不到。 这是因为他的数值类型可能并不是四字节的,在游戏中这个数值的机制是一个慢慢增长的数值,所以他很有可能是浮点数,增长0.几,满1再加1显示,但是隐去了小数点后的数字,所以要更换数值类型再进行扫描测试。 将单浮点数和双浮点数都测试一下。 更换为单浮点数

【嵌入式】内存未对齐导致程序崩溃(铺获信号量SIGBUS,数值7)

背景 嵌入式平台上,和A组配合,需要把A组提供的二进制文件在调用A组提供接口时传入,因为有多个bin文件,自测的时候选择了其中一个,运行正常。递交给qa测试了。然后qa反馈必现崩溃。懵了。复现的时候还用的之前的bin文件,无法复现。最后看信号量数值和打印日志判断是在调用接口的地方,然后对了下长度,发现奇数。而自己用的偶数大小的bin文件。然后修改4字节对齐后正常了。 问题现象 日志打印提示: