线性代数行列式的计算方法(通过代数余子式计算)

permutation.h/***********************************//*NonstandardPermutationheaderCopyright(C)2021—@情久小羊,#FreeThereisnodataerrorcheck*//***********************************/#pragmaonce#include<initializer_list>#include<xutil.

大家好,又见面了,我是你们的朋友全栈君。

 permutation.h

/***********************************/
/*
Nonstandard Permutation header
Copyright (C) 2021---@情久小羊,#Free
There is no data error check
*/
/***********************************/
#pragma once
#include<initializer_list>
#include <xutility>
#include <xstring>
#include<vector>
#include <stdexcept>
using std::vector;
using std::initializer_list;
class Permutation {
	int rank;//n阶行列式
	vector<vector<int>>data;
public:
	Permutation(int rank, vector<vector<int>> data) {
		if (data.size() != rank)throw std::range_error("行列式大小异常");
		for (int i = 0; i < data.size(); ++i) {
			if (data.at(i).size() != rank)throw std::range_error("行列式大小异常");
		}
		this->data = data;
		this->rank = rank;
	}
	Permutation(int rank, initializer_list<int>data_list) {
		if (data_list.size() != rank * rank)throw std::range_error("行列式大小异常");
		vector<int>v;
		for (auto i = data_list.begin(); i != data_list.end(); ++i) {
			v.push_back(*i);
			if (v.size() == rank) {
				this->data.push_back(v);
				v.clear();
			}
		}
		this->rank = rank;
	}
	void print_permutation() {
		for (auto i = this->data.begin(); i != this->data.end(); ++i) {
			for (auto j = i->begin(); j != i->end(); ++j) {
				cout << *j << " ";
			}
			cout << '\n';
		}
	}
	//计算余子式
	Permutation cal_Cofactor(int row,int col) {
		vector<int>row_data; vector<vector<int>>temp_data;
		for (int i = 0; i < this->rank; ++i) {
			if (i == row - 1)continue;
			for (int j = 0; j < this->rank; ++j) {
				if (j == col - 1)continue;
				row_data.push_back(this->data.at(i).at(j));
			}
			temp_data.push_back(row_data);
			row_data.clear();
		}
		return Permutation(this->rank - 1, temp_data);
	}
	//递归通过代数余子式计算
	int calculate() {
		int n = 0;
		if (this->rank == 1)return this->data.at(0).at(0);
		for (int i = 0; i < this->rank; ++i) {
			n += this->data.at(0).at(i) * pow(-1, i + 2) * this->cal_Cofactor(1, i + 1).calculate();
		}
		return n;
	}
};

 \left| \begin{array}{cccc} x_{11} & x_{12} & \cdots& x_{1n} \\ x_{2_1} & x_{22} & \cdots &x_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ 3 & 3 & \cdots & x_{nn} \end{array} \right|

\sum_{i=1}^nx_{1i}A_{1i}\\

然后继续递归得到结果

 main.cpp

#include"permutation.h"
int main() {
   cout<< Permutation(4,
        { 3, -1, 0, 7,
          1, 0, 1, 5,
          2, 3, -3, 1,
          0, 0, 1, -2}).calculate()<<'\n';

    cout << "~~~~~~~~~~~~~~~~~~~~~~" << '\n';
    Permutation(1, { 1 }).print_permutation();
    return 0;
    
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126576.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++类中静态变量和静态方法使用介绍

    C++类中静态变量和静态方法使用介绍刷剑指offer第64题涉及到类内静态成员与方法的知识,有点模糊,找了两篇博客整理一下。转自:https://www.cnblogs.com/sixue/p/3997324.html    最近一直看c++相关的项目,但总是会被c++类中的静态成员变量与静态成员函数的理解感觉很是模糊,不明白为什么类中要是用静态成员变量.于是在网上搜集了一些资料,自己再稍微总结下。静态成员的概…

    2022年5月27日
  • 新浪微博爬虫分享(一天可抓取 1300 万条数据)「建议收藏」

    From:https://blog.csdn.net/bone_ace/article/details/50903178微博爬虫单机每日千万级的数据微博爬虫总结:https://blog.csdn.net/nghuyong/article/details/81251948Python爬虫——新浪微博(网页版):https://blog.csdn.net/qq_37267015/ar…

    2022年4月15日
  • eclipse 本地maven_配置maven本地仓库

    eclipse 本地maven_配置maven本地仓库Q1:eclipse集成好的maven怎么配置本地仓库步骤如下:1、下载maven的bin,在apache官方网站可以下载。2、下载下来之后,解压,找个路径放进去,把bin的位置设在环境变量里,新建环境变量MAVEN_HOME。3、在PATH里加入maven的bin的路径。4、配置完毕后,在Windows命令提示符下,输入mvn-v测试一下。5、配置成功后开始在Eclipse中配置Maven,…

    2022年9月17日
  • TCP三次握手和四次挥手详解(面试常见问题)

    TCP三次握手和四次挥手详解(面试常见问题)  大概两个月前,一位朋友在面试360集团时,在面试过程中被问及TCP三次握手和四次挥手的相关知识,他当时只知道大概,但当时面试官问他TCP三次握手过程中发送的数字是多少,他一下子就懵住了,因为这也是他第一次参加面试,准备的并不充分,也根本没想到会问到具体发送的数字,结果显而易见,最后被刷了。由此可见,TCP三次握手和四次挥手在面试中是面试官非常喜欢的问题,所以掌握这个知识是十分重要的。  T…

    2022年6月16日
  • pycharm2021.12 过期了怎么激活(注册激活)

    (pycharm2021.12 过期了怎么激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~23EQQJJI0G-eyJsaWNlb…

    2022年3月30日
  • ASP NET MVC Web开发教程

    ASP NET MVC Web开发教程ASPNETMVCWeb开发教程使用ASPNETMVC和C#快速学习Web开发。从绝对基础到忍者!像专业人士一样学习C#和MVC课程英文名:CompleteASPNETMVCWebDevelopment-NewbietoNinja!此视频教程共4.0小时,中英双语字幕,画质清晰无水印,源码附件全百度网盘地址:https://pan.baidu.com/s/1tarxUTa-F0KOPeXXmocLLg?pwd=7evf课程介绍:https://www.aihor

    2022年7月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号