C++实现雅克比行列式 - Sna1lGo

Sna1lGo 2021-11-11 原文


C++实现雅克比行列式


//c++实现雅克比迭代式
#include<iostream>
#include<iomanip>
#include<string>
#include<vector>
using namespace std;

//函数求数组中的最大值
double MaxOfList(vector<double>x) {
	double max = x[0];
	int n = x.size();
	for (int i = 0; i < n; i++)
		if (x[i] > max) max = x[i];
	return max;
}

//雅可比迭代公式
void Jacobi(vector<vector<double> > A, vector<double> B, int n) {
	vector<double> X(n, 0);	//相当于一个初始向量取x0(0,0,0,0)
	vector<double> Y(n, 0);	//存放新的未知数值
	vector<double> D(n, 0);	//用来存放每未知数迭代前和迭代后的差值。
	int k = 0; //记录循环次数
	do {
		X = Y;//将迭代后的y赋值给x来处理新的。
		for (int i = 0; i < n; i++) {
			double tem = 0;
			for (int j = 0; j < n; j++) {
				if (i != j) tem += A[i][j] * X[j];//除了系数本身的上一个,加上其它系数对应乘上上一个嵌套并相加
			}
			Y[i] = (B[i] - tem) / A[i][i];//再用常数项来减去除了本身系数的每一个其它未知数乘以系数最后除以本未知数对应的系数
			cout << left << setw(8) << Y[i] << " ";//输出当前未知数对应的值,从x1开始。
		}
		cout << endl;
		k++;
		if (k > 100) {	//迭代了再多次也达不到趋近的范围值
			cout << "迭代失败!(可能是函数不收敛)" << endl;
			return;
		}

		for (int a = 0; a < n; a++) {
			D[a] = X[a] - Y[a];	//用来存储每次的后值减去前值的差值来用作判断,每次迭代都会重新赋值。
		}
	} while (MaxOfList(D) > 0.00001 || MaxOfList(D) < -0.00001);	//使用e来作为趋近的范围判定。

	return;
}

int main_yakebi() {
	int n;
	cout << "请输入方程组未知数的个数n:";
	cin >> n;
	cout << endl;
	vector<vector<double>>A(n, vector<double>(n, 0));//相当于创建一个二维数组A[n][n],数组的每个数初值为0
	vector<double>B(n, 0);//同上只是把二维数组改为一位数组。
	cout << "请输入方程组的系数矩阵:" << endl;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> A[i][j];	//由二维数组来存储方程式的系数
		}
	}
	cout << endl;
	cout << "请输入方程组的值向量:" << endl;
	for (int k = 0; k < n; k++) {
		cin >> B[k];	//一位数组来存储这个值
	}
	cout << endl;
	cout << "您输入的方程组为:" << endl;
	for (int a = 0; a < n; a++) {
		for (int b = 0; b < n; b++) {
			cout << A[a][b] << " ";	//二次循环访问系数矩阵
		}
		cout << "    " << B[a] << endl;//用行数来处理常数向量
	}
	cout << endl;
	cout << "由雅可比迭代公式求的方程组的解为:" << endl;//这里开始调用雅克比迭代方程式
	Jacobi(A, B, n);
	return 0;
}//c++实现雅克比迭代式
#include<iostream>
#include<iomanip>
#include<string>
#include<vector>
using namespace std;

//函数求数组中的最大值
double MaxOfList(vector<double>x) {
	double max = x[0];
	int n = x.size();
	for (int i = 0; i < n; i++)
		if (x[i] > max) max = x[i];
	return max;
}

//雅可比迭代公式
void Jacobi(vector<vector<double> > A, vector<double> B, int n) {
	vector<double> X(n, 0);	//相当于一个初始向量取x0(0,0,0,0)
	vector<double> Y(n, 0);	//存放新的未知数值
	vector<double> D(n, 0);	//用来存放每未知数迭代前和迭代后的差值。
	int k = 0; //记录循环次数
	do {
		X = Y;//将迭代后的y赋值给x来处理新的。
		for (int i = 0; i < n; i++) {
			double tem = 0;
			for (int j = 0; j < n; j++) {
				if (i != j) tem += A[i][j] * X[j];//除了系数本身的上一个,加上其它系数对应乘上上一个嵌套并相加
			}
			Y[i] = (B[i] - tem) / A[i][i];//再用常数项来减去除了本身系数的每一个其它未知数乘以系数最后除以本未知数对应的系数
			cout << left << setw(8) << Y[i] << " ";//输出当前未知数对应的值,从x1开始。
		}
		cout << endl;
		k++;
		if (k > 100) {	//迭代了再多次也达不到趋近的范围值
			cout << "迭代失败!(可能是函数不收敛)" << endl;
			return;
		}

		for (int a = 0; a < n; a++) {
			D[a] = X[a] - Y[a];	//用来存储每次的后值减去前值的差值来用作判断,每次迭代都会重新赋值。
		}
	} while (MaxOfList(D) > 0.00001 || MaxOfList(D) < -0.00001);	//使用e来作为趋近的范围判定。

	return;
}

int main_yakebi() {
	int n;
	cout << "请输入方程组未知数的个数n:";
	cin >> n;
	cout << endl;
	vector<vector<double>>A(n, vector<double>(n, 0));//相当于创建一个二维数组A[n][n],数组的每个数初值为0
	vector<double>B(n, 0);//同上只是把二维数组改为一位数组。
	cout << "请输入方程组的系数矩阵:" << endl;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> A[i][j];	//由二维数组来存储方程式的系数
		}
	}
	cout << endl;
	cout << "请输入方程组的值向量:" << endl;
	for (int k = 0; k < n; k++) {
		cin >> B[k];	//一位数组来存储这个值
	}
	cout << endl;
	cout << "您输入的方程组为:" << endl;
	for (int a = 0; a < n; a++) {
		for (int b = 0; b < n; b++) {
			cout << A[a][b] << " ";	//二次循环访问系数矩阵
		}
		cout << "    " << B[a] << endl;//用行数来处理常数向量
	}
	cout << endl;
	cout << "由雅可比迭代公式求的方程组的解为:" << endl;//这里开始调用雅克比迭代方程式
	Jacobi(A, B, n);
	return 0;
}

  

posted on
2020-11-02 18:57 
Sna1lGo 
阅读(530
评论(0
编辑 
收藏 
举报

 

版权声明:本文为Sna1lGo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Sna1lGo/p/13915859.html

C++实现雅克比行列式 - Sna1lGo的更多相关文章

  1. 实践!实现纯前端下的音频剪辑处理 – ljyyjj

    实践!实现纯前端下的音频剪辑处理 原文链接:https://juejin.im/post/5d91c2d851 […]...

  2. Intellij IDEA十大快捷键 – Yoooshiki

    Intellij IDEA十大快捷键 Intellij IDEA中有很多快捷键让人爱不释手,stackover […]...

  3. xftp xshell 个人下载官网 – 潇潇六月雨

    xftp xshell 个人下载官网 https://www.netsarang.com/zh/xftp-do […]...

  4. 自学成才的黑客(安全研究员)是从哪学到那些知识的? – lipps

    自学成才的黑客(安全研究员)是从哪学到那些知识的? 作者:Pnigos链接:https://www.zhihu […]...

  5. PHP / Laravel 月刊 #23

    最新资讯 Laravel 5.6 中文文档翻译完成,译者 60 人,耗时 10 天 Summer Dingo […]...

  6. Java中List的通俗介绍和简单实例 – ren.ren

    Java中List的通俗介绍和简单实例   List 经常用在对一组对象的存储和操作上,比如一组学生信息,一组 […]...

  7. QQ互联 – Tekkaman

    QQ互联 【移动应用接入概述】   QQ互联开放平台为第三方移动应用提供了丰富的API。第三方移动应用接入QQ […]...

  8. 入门级 – 码云(Gitee),GitHub 教程

    前言 这篇文章的目的是记录我的关于GitHub的内容,从注册、下载直到设置成功每一步都有解释,其中有一些截图或 […]...

随机推荐

  1. 如何学习Javascript

    首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门。   谈不上经验,都是一些教训。   这 […]...

  2. Windows 10 正式版原版ISO镜像

    Win10正式版32位简体中文版(含家庭版、专业版)文件名: cn_windows_10_multiple_e […]...

  3. get和post的区别

    GET和POST是什么?HTTP协议中的两种发送请求的方法。 HTTP的底层是TCP/IP。所以GET和POS […]...

  4. 探索SQL Server元数据(一)

    简介   在数据库中,我们除了存储数据外,还存储了大量的元数据。它们主要的作用就是描述数据库怎么建立、配置、以 […]...

  5. 如何使用Docker部署一个Go Web应用程序 – 张伯雨

    如何使用Docker部署一个Go Web应用程序 熟悉Docker如何提升你在构建、测试并部署Go Web应用 […]...

  6. 类的无参方法

    类是由一组具有相同属性和共同行为的实体抽象而来的。 定义类的方法: public 返回值类型 方法名(){   […]...

  7. 看看这个图片转换函数,为什么bmp转jpg时正常,jpg转jpg时,转成的图片Delphi自己不认识.

    看看这个图片转换函数,为什么bmp转jpg时正常,jpg转jpg时,转成的图片Delphi自己不认识. Del […]...

  8. JQuery动画

    jQuery-动画 三种方式显示和隐藏元素1. 默认显示和隐藏方式1. show([speed,[easing],[fn]])1. 参数:1. speed:动画的速度。三个预定义的值("slow","normal", "fast")或表...

展开目录

目录导航