编写C++使矩阵转置

编写C++使矩阵转置,第1张

/看你的程序,解决思路是c语言的方式,我试了下你的程序,我用gcc编译,显示第9行出错,估计是编译时没法确定m,n的大小,没法创建数组吧,

既然用c++了,建议把矩阵定义成一个类,输入输出采用重载 *** 作符的办法

就矩阵转置问题,我写了一个c++的,可供参考/

#include<iostream>

#include<vector>

using namespace std;

class matrix

{

    private:

        int nrow,ncol;

        vector<int> data;

    public:

        friend istream& operator>>(istream& ,matrix&);

        friend ostream& operator<<(ostream& ,matrix&);

        matrix reverse(){

            matrix rm;

            rmnrow=ncol;

            rmncol=nrow;

            for(int i=0;i<ncol;i++)

                for(int j=0;j<nrow;j++)

                    rmdatapush_back(data[jncol+i]);

            return rm;

        }

        matrix(){

            nrow=0;

            ncol=0;

            dataclear();

        }

        void resize(int m,int n){

            nrow=m;

            ncol=n;

        }

};

istream& operator>>(istream& is,matrix& m){

    int tem;

    mdataclear();

    for(int i=0;i<mnrow;i++)

        for(int j=0;j<mncol;j++){

            is>>tem;

            mdatapush_back(tem);

        }

    return is;

}

ostream& operator<<(ostream& os,matrix& m){

    for(int i=0;i<mnrow;i++){

        for(int j=0;j<mncol;j++)

            cout<<mdata[imncol+j]<<"\t";

        cout<<"\n";

    }

    return os;

}

int main()

{

    matrix m1,m2;

    int m,n;

    cout<<"请输入矩阵的行数和列数:\n";

    cin>>m>>n;

    m1resize(m,n);

    cout<<"请输入矩阵:\n";

    cin>>m1;

    m2=m1reverse();

    cout<<"转置前的矩阵:\n";

    cout<<m1;

    cout<<"转置后的矩阵:\n";

    cout<<m2;

}

matlab中,矩阵A的转置表示成 A'附注matlab中常用的矩阵运算,矩阵加、减(+,-)运算。

内容拓展:

一、矩阵的其它运算

(1)inv — 矩阵求逆;

(2)det — 行列式的值;

(3)eig — 矩阵的特征值;

(4)diag — 对角矩阵;

(5) ’ — 矩阵转置;

(6)sqrt — 矩阵开方;

二、matlab

1、MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

2、MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

3、MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

Private Sub Form_Click()

Dim n, m, i, j, Matrix(), Cache() As Integer

n = CInt(InputBox("请输入矩阵行数N", "矩阵置换"))

m = CInt(InputBox("请输入矩阵列数M", "矩阵置换"))

ReDim Matrix(n - 1, m - 1)

ReDim Cache(m - 1, n - 1)

'录入

For i = 0 To n - 1

For j = 0 To m - 1

Matrix(i, j) = CInt(InputBox("请输入矩阵项(" & (i + 1) & "," & (j + 1) & ")", "矩阵置换"))

Next

Next

'转置

For i = 0 To n - 1

For j = 0 To m - 1

Cache(j, i) = Matrix(i, j)

Next

Next

'输出转置前的矩阵

Print "转置前的矩阵为:"

For i = 0 To n - 1

For j = 0 To m - 1

Print Matrix(i, j);

Next

Print

Next

Print

'输出转置后的矩阵

Print "转置后的矩阵为:"

For i = 0 To m - 1

For j = 0 To n - 1

Print Cache(i, j);

Next

Print

Next

End Sub

我的代码逻辑是:

矩阵行指针初值指向每行首地址,迭代依次取所有行指针指向值组成新行,所有行指针自增。最终组合新的矩阵。

#include <stdioh>

#include <malloch>

int getList(int row,int clo);//获取矩阵地址空间

void setNum(int nList,int n);//填写数值

void prtList(int nList,int row,int clo);//打印矩阵

int zz(int nList,int row,int clo);//转置函数

int main()

{

    int row,clo,nList=NULL,nListSave=NULL;

    printf("输入矩阵行列数:");

    scanf("%d%d",&row,&clo);

    nList=getList(row,clo);

    setNum(nList,rowclo);

    printf("输入的矩阵为:\n");

    prtList(nList,row,clo);

    printf("转置后的矩阵为:\n");

    nListSave=zz(nList,row,clo);

    free(nList);

    nList=nListSave;

    prtList(nList,clo,row);

    return 0;

}

int zz(int nList,int row,int clo)

{

    int nSave=NULL,listSave=NULL,listp=nList,p=NULL,i,j;

    nSave=(int )malloc(sizeof(int)rowclo);

    listSave=(int )malloc(sizeof(int)clo);//倒置后的矩阵

    p=nSave;

    for(j=0;j<clo;j++)

    {

        for(i=0;i<row;i++)

        {

            p++=listp[i];

            listp[i]=listp[i]+1;

        }

    }

    for(i=0;i<clo;i++)

        listSave[i]=&nSave[irow];

    for(i=0;i<row;i++)

        free(nList[i]);//释放原矩阵行空间

    return  listSave;

}

void prtList(int nList,int row,int clo)

{

    int i,j;

    for(i=0;i<row;i++)

    {

        for(j=0;j<clo;j++)

            printf("%d ",nList[i][j]);

        printf("\n");

    }

}

void setNum(int nList,int n)

{

    int p=nList[0];

    printf("填写矩阵中%d个数值:\n",n);

    while(n-->0)

        scanf("%d",p++);

}

int getList(int row,int clo)

{

    int nums,nList,i;

    nums=(int )malloc(sizeof(int)rowclo);

    nList=(int )malloc(sizeof(int)row);

    for(i=0;i<row;i++)

        nList[i]=&nums[iclo];

    return nList;

}

#include "stdioh"

int main(){

int i,j,t,a[3][2],b[2][3];

//读入矩阵A

for(i=0;i<3;i++){

for(j=0;j<2;j++){

scanf("%d",&t);

a[i][j]=t;

}

}

//转置矩阵

for(i=0;i<3;i++){

for(j=0;j<2;j++){

b[j][i]=a[i][j];

}

}

//输出结果

for(i=0;i<3;i++){

for(j=0;j<2;j++){

printf("a[%d][%d]=%d b[%d][%d]=%d\n",i,j,a[i][j],j,i,b[j][i]);

}

}

return 1;

}

#include <stdioh>

void main()

{

int i,j,a[3][5];

printf("请输入15个数\n");

for(i=0; i<3; i++)

{

for(j=0; j<5; j++)

{

scanf("%d",&a[i][j]);

}

}

printf("原矩阵为\n");

for(i=0; i<3; i++)

{

for(j=0; j<5; j++)

{

printf("%d\t",a[i][j]);

}

printf("\n");

}

printf("转置以后的结果\n");

for(j=0; j<5; j++)

{

for(i=0; i<3; i++)

{

printf("%d\t",a[i][j]);

}

printf("\n");

}

}

以上就是关于编写C++使矩阵转置全部的内容,包括:编写C++使矩阵转置、matlab 怎么表示一个矩阵的转置、编写VB程序,实现矩阵转置,即将一个nⅹm的矩阵的行和列互换。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9318455.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存