国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - C++矩陣運(yùn)算的實(shí)現(xiàn)簡(jiǎn)單

C++矩陣運(yùn)算的實(shí)現(xiàn)簡(jiǎn)單

2021-12-29 13:55victor_JZ C/C++

本文主要介紹了C++矩陣運(yùn)算的實(shí)現(xiàn)簡(jiǎn)單,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

利用C++實(shí)現(xiàn)矩陣的構(gòu)造,通過運(yùn)算符的重載實(shí)現(xiàn)矩陣的乘法、加法等。并且實(shí)現(xiàn)矩陣形狀的打印,矩陣的打印。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include<iostream>
#include<memory>
#include<assert.h>
#include<stdlib.h>
using namespace std;
 
class Matrix{
    public:
        Matrix(int row, int col);   //構(gòu)造函數(shù)
        Matrix(int row, int col, int num);//構(gòu)造函數(shù)重載
        ~Matrix();                  //析構(gòu)函數(shù)
        Matrix(const Matrix & other); //賦值函數(shù)
        Matrix operator*(const Matrix& other);      //矩陣相乘
        Matrix operator+(const Matrix& other);      //矩陣相加
        Matrix operator-(const Matrix& other);      //矩陣相減
        int **a = nullptr;          //初始化一共空指針
        int row, col;
        void shape();               //打印矩陣形狀
        void Ma_pri();              //打印矩陣
};
 
int main(){
    Matrix a(2,1);      //構(gòu)造一個(gè)(2,1)矩陣
    Matrix b(1,2);      //構(gòu)造一個(gè)(1,2)矩陣
    a.a[0][0] = 4;      //初始化矩陣
    a.a[1][0] = 2;
    b.a[0][0] = 3;
    b.a[0][1] = 5;
    a.shape();          //矩陣形狀打印
    b.shape();
    Matrix c = a*b;     //矩陣相乘
    c.shape();
    c.Ma_pri();         //矩陣打印
    Matrix d(3,3,1);
    d.Ma_pri();
    system("pause");
    return 0;
}
 
 
Matrix::Matrix(int row, int col){
    this->row = row;
    this->col = col;
    this->a = new int*[row];
    for(int i=0;i<this->row;i++){
        a[i] = new int[this->col];
    }
}
 
 
Matrix::Matrix(int row, int col, int num){
    this->row = row;
    this->col = col;
    this->a = new int*[row];
    for(int i=0;i<this->row;i++){
        a[i] = new int[this->col];
    }
    for(int i = 0; i < this->row; i++){
        for(int j =0; j <this->row; j++){
            this->a[i][j] = num;
        }
    }
}
 
 
 
Matrix::~Matrix(){
    for(int i=0;i<this->row;i++){
        if(a[i] != nullptr){
            delete[] a[i];
            a[i] = nullptr;
        }
    }
    if(a != nullptr){
        delete[] a;
        a = nullptr;
    }
}
 
Matrix::Matrix(const Matrix& other){
    row = other.row;
    col = other.col;
    a = new int*[row];
    for(int i=0;i<row;i++){
        a[i] = new int[col];
        memcpy(a[i], other.a[i],sizeof(int)*col);
    }
}
 
Matrix Matrix::operator*(const Matrix& other){
    if(this->col != other.row){
        cout<<"shape error"<<endl;
        exit(0);
    }
    Matrix m(this->row,other.col);
    for(int i=0; i<this->row; i++){
        for(int j=0;j<other.col;j++){
            int sum = 0;
            for(int k=0;k<this->col;k++){
                sum += this->a[i][k] * other.a[k][j];
            }
            m.a[i][j] = sum;
        }
    }
    return m;
}
 
Matrix Matrix::operator+(const Matrix& other){
    if(this->col != other.col or this->row != other.row){
        cout<<"shape error"<<endl;
        exit(0);
    }
    Matrix m(this->row,this->col);
    for(int i = 0;i < this->row; i++){
        for(int j = 0; j < this-> col; j++){
            m.a[i][j] = this->a[i][j] + other.a[i][j];
        }
    }
    return m;
}
Matrix Matrix::operator-(const Matrix& other){
    if(this->col != other.col or this->row != other.row){
        cout<<"shape error"<<endl;
        exit(0);
    }
    Matrix m(this->row,this->col);
    for(int i = 0;i < this->row; i++){
        for(int j = 0; j < this-> col; j++){
            m.a[i][j] = this->a[i][j] - other.a[i][j];
        }
    }
    return m;
}
 
void Matrix::shape(){
    cout<<"("<<this->row<<","<<this->col<<")"<<endl;
}
 
void Matrix::Ma_pri(){
    for(int i = 0; i < this->row; i++){
        for(int j =0; j <this->row; j++){
            cout<<this->a[i][j]<<" ";
        }
        cout<<endl;
    }
}

矩陣求逆算法及程序?qū)崿F(xiàn)

 在做課題時(shí),遇到了求多項(xiàng)式問題,利用了求逆方法。矩陣求逆一般使用簡(jiǎn)單的算法,還有快速算法 如全選主元高斯-約旦消元法,但本文程序主要寫了簡(jiǎn)單的矩陣求逆算法定義法之伴隨矩陣求逆公式如下,其中A可逆:A^{-1}=\frac{A^*}{|A|},其中A^*是A的伴隨矩陣。。

  1.給定一個(gè)方陣,非奇異(不是也可,程序有考慮);

  2.由矩陣得到其行列式,求其值如|A|;

  3.求其伴隨矩陣A^*;

  4.得到其逆矩陣。

主要函數(shù)如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//得到給定矩陣src的逆矩陣保存到des中。
bool GetMatrixInverse(double src[N][N],int n,double des[N][N])
{
    double flag=getA(src,n);
    double t[N][N];
    if(flag==0)
    {
        return false;
    }
    else
    {
        getAStart(src,n,t);
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                des[i][j]=t[i][j]/flag;
            }
 
        }
    }
 
 
    return true;
 
}

計(jì)算|A|:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//按第一行展開計(jì)算|A|
double getA(double arcs[N][N],int n)
{
    if(n==1)
    {
        return arcs[0][0];
    }
    double ans = 0;
    double temp[N][N]={0.0};
    int i,j,k;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1;j++)
        {
            for(k=0;k<n-1;k++)
            {
                temp[j][k] = arcs[j+1][(k>=i)?k+1:k];
 
            }
        }
        double t = getA(temp,n-1);
        if(i%2==0)
        {
            ans += arcs[0][i]*t;
        }
        else
        {
            ans -=  arcs[0][i]*t;
        }
    }
    return ans;
}

計(jì)算伴隨矩陣:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//計(jì)算每一行每一列的每個(gè)元素所對(duì)應(yīng)的余子式,組成A*
void  getAStart(double arcs[N][N],int n,double ans[N][N])
{
    if(n==1)
    {
        ans[0][0] = 1;
        return;
    }
    int i,j,k,t;
    double temp[N][N];
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            for(k=0;k<n-1;k++)
            {
                for(t=0;t<n-1;t++)
                {
                    temp[k][t] = arcs[k>=i?k+1:k][t>=j?t+1:t];
                }
            }
 
 
            ans[j][i]  =  getA(temp,n-1);
            if((i+j)%2 == 1)
            {
                ans[j][i] = - ans[j][i];
            }
        }
    }
}

到此這篇關(guān)于C++矩陣運(yùn)算的實(shí)現(xiàn)簡(jiǎn)單的文章就介紹到這了,更多相關(guān)C++ 矩陣運(yùn)算內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/victor_JZ/article/details/120069521

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久久亚洲调教 | 成年人在线免费观看网站 | 在线观看欧美一区 | 国产视频aaa | 久久人人爽人人爽 | 中文字幕一区二区三区久久 | 特级西西人体444www高清大胆 | 在线一区视频 | 国产精品区一区二区三含羞草 | 亚洲aⅴ天堂av在线电影软件 | 精品久久久久久亚洲精品 | 精品成人免费一区二区在线播放 | 国产欧美久久久久久 | 日韩素人一区二区三区 | 国产精品久久综合 | 高清一区在线 | 一级毛片免费观看久 | 久草福利在线视频 | 日韩中文字幕在线播放 | 三级在线视频 | 欧美国产在线观看 | 成人日韩在线观看 | 日韩视频在线一区二区 | 亚洲日韩中文字幕一区 | 国产精品无码久久久久 | 在线视频国产一区 | 久久99深爱久久99精品 | 91精品国产综合久久香蕉922 | 免费色在线| 午夜欧美一区二区三区在线播放 | 国产麻豆一区二区三区 | 四虎影视在线 | 成人在线免费网站 | 香蕉av777xxx色综合一区 | 久久伊人精品网 | 成人一区二区三区久久精品嫩草 | 日日夜夜香蕉 | 国产一区二区在线视频 | 成人涩涩日本国产一区 | 精品久久一二三区 | 色偷偷噜噜噜亚洲男人的天堂 |