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

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;
    
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • word在试图打开文件时遇到错误解决办法,亲测可用[通俗易懂]

    word在试图打开文件时遇到错误解决办法,亲测可用[通俗易懂]现象:解决办法:文件-右键属性-接除锁定如果没有接除锁定,则使用下面这个方法:“word在试图打开文件时遇到错误”解决办法,亲测可用_加鸡腿的博客-CSDN博客_windows在试图打开文件时遇到错误打开word文档时,出现以下报错:解决办法:步骤一:步骤二:步骤三:步骤四:步骤五:步骤六:步骤七:步骤八:点击【确定】即可。…https://blog.csdn.net/qq_43437571/article/details/102962500…

  • java版微信公众号开发(二):配置token

    java版微信公众号开发(二):配置token

  • Linux服务器如何做raid1,Linux下制作raid1

    Linux服务器如何做raid1,Linux下制作raid1制作raid1raid1是Linux服务器最常用的一种硬盘冗余备份的方案,它能在硬盘损坏的情况下保证硬盘数据内的安全。需要至少两块硬盘,最好是完全相同的两块硬盘,所创建的若磁盘中有谁损坏,则备用盘自动替补上去。一、搭建Linuxraid1环境1.准备好要制作raid1的硬盘,至少两块,最好是两块同型号同容量的硬盘。2.用fdisk工具对硬盘进行分区(用sda做示例…

  • oracle创建数据库命令「建议收藏」

    oracle创建数据库命令「建议收藏」oracle创建数据库命令1.打开cmd连接系统默认数据库2.创建表空间CREATETABLESPACEDATADATAFILE‘D:\oracle\DATA\DATA.ORA’size10Gautoextendonnext1MMaxsizeunlimitedloggingextentmanagementlocalsegmentspacemanagementauto;3.创建临时空间CREATETEMPORARYTABLESPACEDATA_TE

  • 数据挖掘的流程[通俗易懂]

    数据挖掘的流程[通俗易懂]数据挖掘是指一个完整的过程,该过程从大型数据库中挖掘先前未知的,有效的,可实用的信息,并使用这些信息做出决策或丰富知识。数据挖掘环境示意图如图3-13所示。数据挖掘的流程大致如下:1.问题定义在开始数据挖掘之前,最先的也是最重要的要求就是熟悉背景知识,弄清用户的需求。缺少了背景知识,就不能明确定义要解决的问题,就不能为挖掘准备优质的数据,也很难正确地解释得到的结果。要想充分发挥数据挖掘的价值,必须对目标有一个清晰明确的定义,即决定到底想干什么。2.建立数据挖掘库要进行数据挖掘必须收集要挖掘的

发表回复

您的电子邮箱地址不会被公开。

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