首页 > 编程语言 >举证运算c++

举证运算c++

时间:2023-06-23 16:12:17浏览次数:36  
标签:rows 运算 int cols c++ result 举证 data Matrix

#include<iostream>
#include<vector>
#include<cmath>

using namespace std;

class Matrix {
private:
int rows;
int cols;
vector<vector<double>> data;

public:
Matrix(int rowCount, int colCount) : rows(rowCount), cols(colCount) {
data.resize(rows, vector<double>(cols, 0.0));
}

void input() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> data[i][j];
}
}
}

void display() const {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << data[i][j] << " ";
}
cout << endl;
}
}

Matrix operator+(const Matrix& other) const {
if (rows != other.rows || cols != other.cols) {
throw runtime_error("Matrix dimensions do not match");
}

Matrix result(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result.data[i][j] = data[i][j] + other.data[i][j];
}
}

return result;
}

Matrix operator-(const Matrix& other) const {
if (rows != other.rows || cols != other.cols) {
throw runtime_error("Matrix dimensions do not match");
}

Matrix result(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result.data[i][j] = data[i][j] - other.data[i][j];
}
}

return result;
}

Matrix operator*(const Matrix& other) const {
if (cols != other.rows) {
throw runtime_error("Matrix dimensions do not match");
}

Matrix result(rows, other.cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < other.cols; j++) {
for (int k = 0; k < cols; k++) {
result.data[i][j] += data[i][k] * other.data[k][j];
}
}
}

return result;
}

Matrix operator*(double scalar) const {
Matrix result(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result.data[i][j] = data[i][j] * scalar;
}
}

return result;
}

Matrix operator/(double scalar) const {
if (scalar == 0.0) {
throw runtime_error("Division by zero");
}

Matrix result(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result.data[i][j] = data[i][j] / scalar;
}
}

return result;
}

// 带变元的矩阵计算
Matrix substitute(double variable) const {
Matrix result(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result.data[i][j] = data[i][j] * variable;
}
}

return result;
}

// 计算矩阵的特征值和特征向量(仅支持2x2矩阵)
void eigenvaluesAndEigenvectors() const {
if (rows != 2 || cols != 2) {
throw runtime_error("Eigenvalue and eigenvector calculations are only supported for 2x2 matrices");
}

double a = data[0][0];
double b = data[0][1];
double c = data[1][0];
double d = data[1][1];

double discriminant = sqrt(pow((a + d), 2) - 4 * (a * d - b * c));
double lambda1 = (a + d + discriminant) / 2;
double lambda2 = (a + d - discriminant) / 2;

cout << "Eigenvalues: " << lambda1 << ", " << lambda2 << endl;

if (b != 0 || c != 0) {
double x1 = 1;
double y1 = (lambda1 - a) / b;
double x2 = 1;
double y2 = (lambda2 - a) / b;

cout << "Eigenvectors: (" << x1 << ", " << y1 << "), (" << x2 << ", " << y2 << ")" << endl;
} else {
cout << "Eigenvectors cannot be calculated" << endl;
}
}
};

int main() {
int n;
cout << "Enter the size of the matrix: ";
cin >> n;
Matrix m1(n, n), m2(n, n);

cout << "Enter elements of first matrix:" << endl;
m1.input();

cout << "Enter elements of second matrix:" << endl;
m2.input();

cout << "First matrix:" << endl;
m1.display();

cout << "Second matrix:" << endl;
m2.display();

try {
// 四则运算
Matrix resultAddition = m1 + m2;
cout << "Addition:" << endl;
resultAddition.display();

Matrix resultSubtraction = m1 - m2;
cout << "Subtraction:" << endl;
resultSubtraction.display();

Matrix resultMultiplication = m1 * m2;
cout << "Multiplication:" << endl;
resultMultiplication.display();

Matrix resultScalarMultiplication = m1 * 2.0;
cout << "Scalar Multiplication:" << endl;
resultScalarMultiplication.display();

Matrix resultScalarDivision = m1 / 2.0;
cout << "Scalar Division:" << endl;
resultScalarDivision.display();

// 带变元的计算
double variable;
cout << "Enter the value of the variable: ";
cin >> variable;
Matrix resultSubstitution = m1.substitute(variable);
cout << "Substitution:" << endl;
resultSubstitution.display();

// 特征值和特征向量计算
cout << "Eigenvalues and Eigenvectors for the first matrix:" << endl;
m1.eigenvaluesAndEigenvectors();
} catch (const exception& e) {
cerr << "Error: " << e.what() << endl;
}

return 0;
}

标签:rows,运算,int,cols,c++,result,举证,data,Matrix
From: https://www.cnblogs.com/yunbianshangdadun/p/17499249.html

相关文章

  • UE5 C++ Interface
    概述接口类有助于确保一组(可能)不相关的类实现一组通用函数接口声明声明接口类与声明普通的虚幻类相似,但仍有两个主要区别首先,接口类使用UINTERFACE宏而不是UCLASS宏,且直接从UInterface而不是UObject继承其次,UINTERFACE类不是实际的接口;它是一个空白类,它的存在只是为了向......
  • 第一阶段C++基础入门(黑马程序员)——Day2
    3运算符作用:用于执行代码的运算本章主要学习以下几类运算符:运算符类型作用算术运算符用于处理四则运算赋值运算符用于将表达式的值赋值给变量比较运算符用于表达式的比较,并返回一个真值或假值逻辑运算符用于根据表达式的值返回真值或假值3.1算术运算符作用:用于处理四则运算算术运......
  • unreal engine 5.2 c++ 自定义gameplay
    1.新建c++工程2.打开worldsetting3.修改默认GamePlay4.依次新建对应GamePlay替换默认GamePlayDefaultPawnHUDPlayerControllerGameStatePlayerStateSpectatorPawn5.添加AhellogpGameModeBase默认构造函数#include"hellogpGameModeBase.h"#include......
  • Java学习-运算符
    运算符有好多,意思也都很好理解,所以不打算再写一遍了,要知道的一点是运算符一般输出的都是布尔类型的值,所以用于判断的时候多一点。下面来写写三元运算符吧:用法格式就是这样子,可以用来两个数的比较,如果前面的括号里的条件成立,就执行后面第一个语句,如果条件不成立,就执行后买你第二......
  • 21互联网从业必读中文-C++ 模板(第二版)
    本书介绍    本书第一版大约出版于15年前。起初我们的目的是编写一本对C++工程师有帮助的C++模板权威指南。目前该项目从以下几个方面来看是成功的:它的作用得到了不少读者的认可,也多次被推荐为参考书目,并屡获好评。 第一版已经很老了,虽然其中不少内容对modernC++工......
  • C++面向对象技术与C++课程设计任务书[2023-06-23]
    C++面向对象技术与C++课程设计任务书[2023-06-23]面向对象技术与C++课程设计任务书题目1 小型学籍管理系统班级 21060101~02 指导教师 耿军雪姓名 学号 地点 G1-203 完成时间 2023/6/262023/6/30【目的与要求】1、目的:(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2)基......
  • C++面试题 --imxiangzi 看看
    目录语言基础类0.各种类型和0值比较1.指针和引用的区别?2.static和const的用法,(能说出越多越好)(重点)3.externc 作用4.堆和栈的区别6. 头文件中的ifndef/define/endif 干什么用?7. 用struct与class的区别8.派生类与虚函数概述9. 虚函数与纯虚函数区别10.深拷贝与......
  • 原创 C++的校招的面试题,看看你能答对几个?
    嗨~大家好呀,最近后台有人问小谷,C++校招的话,需要了解哪些内容,大家知道的,小谷有求必应的,那么之后我就来周期性更新一下作为一名C++开发工程师要掌握的知识,本期主要介绍一下C++基础知识吧!1、面向对象的三大特性:封装、继承、多态封装:就是把客观事物封装成抽象的类,可以使某个属性只......
  • 宇宙最全面的C++面试题v2.0
    作为一个后端人,是无论如何要对C++有一定了解底。很多同学都对C++有一定的抵触情绪,因为C++知识点繁杂全面,深度与广度俱在,准备面试需要很长的时间。本篇的主要目的是梳理知识脉络,挑选最精华的面试题,以飨读者,事半功倍!准备面试一定要有侧重点,标为❤属于高频考点,需要反复记忆。建议平......
  • C++/C 试题 (面试必看)
    本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。笔试时间90分钟。请考生认真答题,切勿轻视。一、请填写BOOL,float,......