国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[C++/PTA] 矩陣的乘法運(yùn)算

這篇具有很好參考價(jià)值的文章主要介紹了[C++/PTA] 矩陣的乘法運(yùn)算。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目要求

線性代數(shù)中的矩陣可以表示為一個(gè)row*column的二維數(shù)組,當(dāng)row和column均為1時(shí),退化為一個(gè)數(shù),當(dāng)row為1時(shí),為一個(gè)行向量,當(dāng)column為1時(shí),為一個(gè)列向量。
建立一個(gè)整數(shù)矩陣類matrix,其私有數(shù)據(jù)成員如下:

int row;
int column;
int **mat;

建立該整數(shù)矩陣類matrix構(gòu)造函數(shù);
建立一個(gè) *(乘號)的運(yùn)算符重載,以便于對兩個(gè)輸入矩陣進(jìn)行乘法運(yùn)算;
建立輸出函數(shù)void display(),對整數(shù)矩陣按行進(jìn)行列對齊輸出,格式化輸出語句如下:

cout<<setw(10)<<mat[i][j];
//需要#include <iomanip>

主函數(shù)里定義三個(gè)整數(shù)矩陣類對象m1、m2、m3.
###輸入格式:
分別輸入兩個(gè)矩陣,分別為整數(shù)矩陣類對象m1和m2。
每個(gè)矩陣輸入如下:
第一行兩個(gè)整數(shù) r c,分別給出矩陣的行數(shù)和列數(shù)
接下來輸入r行,對應(yīng)整數(shù)矩陣的每一行
每行輸入c個(gè)整數(shù),對應(yīng)當(dāng)前行的c個(gè)列元素
###輸出格式:
整數(shù)矩陣按行進(jìn)行列對齊(寬度為10)后輸出
判斷m1和m2是否可以執(zhí)行矩陣相乘運(yùn)算。
若可以,執(zhí)行m3=m1*m2運(yùn)算之后,調(diào)用display函數(shù),對m3進(jìn)行輸出。
若不可以,輸出"Invalid Matrix multiplication!"
提示:輸入或輸出的整數(shù)矩陣,保證滿足row>=1和column>=1。

輸入樣例:

4  5
1 0 0 0 5
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
5  5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 8 9
5 6 7 8 9

輸出樣例:

    26        32        38        44        50
     4         6         8        10        12
     9        12        15        18        21
    16        20        24        32        36

解題思路

首先創(chuàng)建一個(gè)矩陣類 matrix,然后定義矩陣的行數(shù) row、列數(shù) column 和矩陣元素 mat,并在類中定義矩陣的構(gòu)造函數(shù)、輸入函數(shù) get()、輸出函數(shù) display()、判斷兩個(gè)矩陣能否相乘的友元函數(shù) judge() 和矩陣乘法運(yùn)算符operator*()

  1. 定義矩陣類 matrix,其中包含矩陣的行數(shù) row、列數(shù) column 和元素 mat。矩陣的構(gòu)造函數(shù)可以不用定義什么操作,因?yàn)槟J(rèn)初始化時(shí)行列數(shù)都為0,指向元素的指針也為空,不會影響后續(xù)使用。

  2. 在類中定義輸入函數(shù) get(),用于輸入矩陣的行數(shù)、列數(shù)和元素,并將其存儲到類的私有成員變量中。在函數(shù)內(nèi)部可以使用二維數(shù)組動態(tài)分配內(nèi)存,確保輸入的數(shù)據(jù)能夠正確存儲。

  3. 在類中定義輸出函數(shù) display(),用于輸出矩陣的元素。在輸出時(shí)可以使用 setw() 控制輸出寬度,使矩陣能夠更加美觀地顯示出來。

  4. 在類外定義判斷兩個(gè)矩陣能否相乘的友元函數(shù) judge(),用于判斷兩個(gè)矩陣是否符合矩陣乘法的條件。即第一個(gè)矩陣的列數(shù)必須等于第二個(gè)矩陣的行數(shù)才能相乘,否則無法進(jìn)行矩陣乘法。
    注意,如果其中一個(gè)矩陣是 1×11×1 矩陣,那么它也可以和任何一個(gè)矩陣相乘。

  5. 在類外定義矩陣乘法運(yùn)算符 operator*(),使用友元函數(shù)的形式重載運(yùn)算符。在運(yùn)算符內(nèi)部,首先判斷第一個(gè)矩陣是否是 1×11×1 矩陣,如果是,則直接針對第二個(gè)矩陣進(jìn)行乘法操作;否則,根據(jù)矩陣乘法的定義循環(huán)遍歷計(jì)算每個(gè)元素的值,并存儲到一個(gè)新的矩陣中。

  6. 在主函數(shù) main() 中,首先通過輸入?yún)?shù)創(chuàng)建兩個(gè)矩陣對象 m1 和 m2,然后調(diào)用 judge() 函數(shù)判斷它們是否能夠相乘。如果可以,則調(diào)用矩陣乘法運(yùn)算符 operator*() 計(jì)算它們的乘積,并將結(jié)果保存到另一個(gè)矩陣對象 m3 中,最后使用 display() 函數(shù)輸出 m3 的元素。

代碼

#include<iostream>
#include<iomanip>
using namespace std;
class matrix{
 private:
  int row;     
  int column;
  int **mat;       
 public:
  matrix(int a=0,int b=0):row(a),column(b){};   
  void get(int ,int);     
  void display();        
  friend bool judge(const matrix &a,const matrix &b);   
    friend matrix operator*(const matrix &a,const matrix &b);  
};
void matrix::get(int a,int b){  
 int v,q;
 row=a;                
 column=b;
 mat=new int*[a];
 for(v=0;v<a;v++){       
  mat[v]=new int[b];
 }
 for(v=0;v<row;v++){
  for(q=0;q<column;q++){
   cin>>mat[v][q];
  }
 }
}
bool judge(const matrix &a,const matrix &b){
 if(a.column==b.row||a.column==1&&a.row==1){   
  return true;                              
 }else{                                     
     return false;
 }
}
void matrix::display(){
    int v,q;
    for(v=0;v<row;v++){
     for(q=0;q<column;q++){
      cout<<setw(10)<<mat[v][q];
  }
  cout<<endl;         
 }
}
matrix operator*(const matrix &a,const matrix &b){
 matrix c;
 int v=0,q=0,k=0,l=0,sum=0;
 if(a.column==1&&a.row==1){     
  c.row=b.row;
  c.column=b.column;
  c.mat=new int*[b.row];
 for(v=0;v<b.row;v++){
  c.mat[v]=new int[b.column];
 }
 for(v=0;v<b.row;v++){
  for(q=0;q<b.column;q++){    
   c.mat[v][q]=a.mat[0][0]*b.mat[v][q];
  }
 }
 }else{
 c.row=a.row;       
 c.column=b.column;
 c.mat=new int*[a.row];
 for(v=0;v<a.row;v++){
  c.mat[v]=new int[b.column];
 }
 for(v=0;v<a.row;v++){
  for(q=0;q<b.column;q++){   
   for(k=0;k<a.column;k++){
   sum+=a.mat[v][k]*b.mat[k][q]; 
   }
   c.mat[v][q]=sum;
   sum=0;
  }
 }
 }
 return c;
}
int main(){         
 matrix m1,m2,m3;
 int a,b;
 cin>>a>>b;
 m1.get(a,b);
 cin>>a>>b;
 m2.get(a,b);
 if(judge(m1,m2)){
  m3=m1*m2;
  m3.display();
 }else{
  cout<<"Invalid Matrix multiplication!"<<endl;
 }
 return 0;
}

總結(jié)

該題考察矩陣乘法的基本概念,例如如何判斷兩個(gè)矩陣是否能夠相乘,如何實(shí)現(xiàn)矩陣乘法的核心計(jì)算操作等,讀者可躬身實(shí)踐。
我是秋說,我們下次見。文章來源地址http://www.zghlxwxcb.cn/news/detail-764174.html

到了這里,關(guān)于[C++/PTA] 矩陣的乘法運(yùn)算的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 14-矩陣相乘及其運(yùn)算法則

    14-矩陣相乘及其運(yùn)算法則

    矩陣與向量的乘法 在這一篇文章中我們就將基于上一篇重新審視矩陣的這個(gè)視點(diǎn)來理解矩陣的乘法,那么在這一篇,我們主要來看一下矩陣和向量的乘法。這里這個(gè)線性方程組是上一小節(jié)給大家舉的模擬的一個(gè)非常簡單的小型經(jīng)濟(jì)系統(tǒng)的例子,我們可以把這個(gè)經(jīng)濟(jì)系統(tǒng)其實(shí)本

    2024年02月13日
    瀏覽(17)
  • 【C++刷題集】-- day5

    【C++刷題集】-- day5

    目錄 選擇題 單選 編程題 統(tǒng)計(jì)回文? 【題目解析】 【解題思路?- 窮舉】 【優(yōu)化】 連續(xù)最大和? 【題目解析】 【解題思路】 【空間優(yōu)化】 1、 在上下文和頭文件均正常情況下,以下程序的輸出結(jié)果是? ( ) 1 無任何輸出 2 陷入死循環(huán) 正確答案: 解析: do while循環(huán)是先執(zhí)行

    2024年02月14日
    瀏覽(17)
  • C語言數(shù)據(jù)結(jié)構(gòu)課設(shè):矩陣的運(yùn)算(轉(zhuǎn)置.求和.求差.矩陣相乘.求逆.數(shù)乘),文件讀取矩陣

    ? #include stdio.h #include string.h #includestdlib.h #includemath.h // 定義一個(gè)結(jié)構(gòu)體類型,表示一個(gè)矩陣 typedef struct matrix { ? ? int nrow; // 矩陣的行數(shù) ? ? int ncol; // 矩陣的列數(shù) ? ? double data[10][10]; // 矩陣的數(shù)據(jù),最大為 10 x 10 } matrix; // 定義一個(gè)函數(shù),用于顯示一個(gè)矩陣的內(nèi)容? void dis

    2024年03月27日
    瀏覽(18)
  • 矩陣乘法實(shí)現(xiàn)卷積運(yùn)算

    矩陣乘法實(shí)現(xiàn)卷積運(yùn)算

    ????????矩陣根據(jù)卷積核的大小進(jìn)行,從左到右、從上到i 下 的移動,對應(yīng)數(shù)據(jù)相乘再相加得到的數(shù)據(jù)為該區(qū)域的值。 ??????? ??????? ? ? ? ? 原理:根據(jù)對于相乘相加的機(jī)制,發(fā)現(xiàn)通過對卷積核填零構(gòu)成和輸入矩陣大小一致的矩陣,然后展平拼接起來,

    2024年02月12日
    瀏覽(16)
  • 矩陣與向量的運(yùn)算:矩陣的加法、數(shù)乘與乘法

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) \\\"矩陣與向量的運(yùn)算\\\"是機(jī)器學(xué)習(xí)領(lǐng)域的一個(gè)基礎(chǔ)課。在實(shí)際應(yīng)用中,許多算法都需要涉及到矩陣運(yùn)算。理解并掌握這種運(yùn)算對于解決復(fù)雜的問題和優(yōu)化模型性能至關(guān)重要。本文將帶您快速了解矩陣的概念,以及如何進(jìn)行矩陣運(yùn)算。 \\\"行列式\\\"是指

    2024年02月11日
    瀏覽(19)
  • 在simulink中進(jìn)行矩陣的乘法運(yùn)算

    在simulink中進(jìn)行矩陣的乘法運(yùn)算

    雙擊 product 選擇為 Matirx 要使用 Reshape 將矩陣排列成矩陣模式 Matlab 的是按列讀取向量,按列放置向量 1*4 向量或者 4*1 向量,MATLAB 都只認(rèn)為是 4 維向量,而不是分別的行向量或者列向量 使用矩陣乘法,必須 reshape 重塑矩陣維度

    2024年02月11日
    瀏覽(16)
  • MATLAB數(shù)值計(jì)算——矩陣運(yùn)算乘法、除法、乘方

    MATLAB數(shù)值計(jì)算——矩陣運(yùn)算乘法、除法、乘方

    矩陣是線性代數(shù)的基本單元 矩陣含有M行N列數(shù)值 矩陣中的元素可以是實(shí)數(shù)或復(fù)數(shù) 矩陣相關(guān)的基本運(yùn)算:加、減、內(nèi)積、逆矩陣、轉(zhuǎn)置、線性方程式、特征值、特征向量、矩陣分解 運(yùn)算符: 注:矩陣的乘法運(yùn)算中沒有乘法交換律 運(yùn)算符: * 注: x=B/A是方程x A=B的解。即x=A的逆

    2024年01月16日
    瀏覽(25)
  • C++兩個(gè)矩陣相乘代碼(內(nèi)附有矩陣相乘的條件與規(guī)則,以及對代碼的詳細(xì)解答)

    ? ? ?再復(fù)制粘貼代碼之前可以先了解學(xué)習(xí)一下什么是矩陣相乘,矩陣相乘的條件與規(guī)則又是什么。 點(diǎn)擊一下鏈接即可進(jìn)入學(xué)習(xí): ? ?? ? ? ? ? ? ? ? ? ?#矩陣相乘的學(xué)習(xí)鏈接 ? ? ? ? ?以下是兩個(gè)矩陣相乘的代碼塊(輸入版) 補(bǔ)充①:對于for循環(huán)了解還不夠透徹的可以進(jìn)

    2024年02月11日
    瀏覽(20)
  • 基于因特爾OneAPI實(shí)現(xiàn)矩陣并行乘法運(yùn)算

    OneAPI介紹 Intel oneAPI 是一個(gè)跨行業(yè)、開放、基于標(biāo)準(zhǔn)的統(tǒng)一的編程模型,旨在提供一個(gè)適用于各類計(jì)算架構(gòu)的統(tǒng)一編程模型和應(yīng)用程序接口。其核心思想是使開發(fā)者只需編寫一次代碼,便可在跨平臺的異構(gòu)系統(tǒng)上運(yùn)行,支持的底層硬件架構(gòu)包括 CPU、GPU、FPGA、神經(jīng)網(wǎng)絡(luò)處理器以

    2024年02月04日
    瀏覽(13)
  • 線性代數(shù):矩陣運(yùn)算(加減、數(shù)乘、乘法、冪、除、轉(zhuǎn)置)

    線性代數(shù):矩陣運(yùn)算(加減、數(shù)乘、乘法、冪、除、轉(zhuǎn)置)

    目錄 加減 數(shù)乘 ?矩陣與矩陣相乘 ?矩陣的冪 矩陣轉(zhuǎn)置? 方陣的行列式? 方陣的行列式,證明:|AB| = |A| |B| ? ? ? ?

    2024年01月22日
    瀏覽(55)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包