如何用C++復(fù)數(shù)類(lèi)實(shí)現(xiàn)矩陣運(yùn)算

c++
小樊
83
2024-09-12 18:56:52

在 C++ 中,你可以使用 std::complex 類(lèi)來(lái)表示復(fù)數(shù)

#include <iostream>
#include <vector>
#include <complex>

using namespace std;

typedef complex<double> Complex;
typedef vector<vector<Complex>> Matrix;

Matrix multiply(const Matrix &A, const Matrix &B) {
    int rows_A = A.size();
    int cols_A = A[0].size();
    int rows_B = B.size();
    int cols_B = B[0].size();

    if (cols_A != rows_B) {
        throw invalid_argument("矩陣 A 的列數(shù)必須等于矩陣 B 的行數(shù)");
    }

    Matrix result(rows_A, vector<Complex>(cols_B, Complex(0, 0)));

    for (int i = 0; i < rows_A; ++i) {
        for (int j = 0; j < cols_B; ++j) {
            for (int k = 0; k < cols_A; ++k) {
                result[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    return result;
}

int main() {
    Matrix A = {
        {Complex(1, 2), Complex(3, 4)},
        {Complex(5, 6), Complex(7, 8)}
    };

    Matrix B = {
        {Complex(9, 10), Complex(11, 12)},
        {Complex(13, 14), Complex(15, 16)}
    };

    Matrix result = multiply(A, B);

    for (const auto &row : result) {
        for (const auto &elem : row) {
            cout << elem << " ";
        }
        cout << endl;
    }

    return 0;
}

這個(gè)程序首先定義了一個(gè) Matrix 類(lèi)型,它是一個(gè)二維向量,其元素為 Complex 類(lèi)型。然后,我們實(shí)現(xiàn)了一個(gè)名為 multiply 的函數(shù),它接受兩個(gè)矩陣作為參數(shù)并返回它們的乘積。最后,在 main 函數(shù)中,我們創(chuàng)建了兩個(gè)矩陣并計(jì)算它們的乘積。

注意:這個(gè)程序沒(méi)有進(jìn)行任何錯(cuò)誤檢查,例如檢查矩陣是否為空或具有相同的行數(shù)和列數(shù)。在實(shí)際應(yīng)用中,你可能需要添加這些檢查以確保程序的健壯性。

0