?? juzhenlianchengj.txt
字號:
2. 計算矩陣連乘積
在科學計算中經常要計算矩陣的乘積。矩陣A和B可乘的條件是矩陣A的列數等于矩陣B的行數。若A是一個p×q的矩陣,B是一個q×r的矩陣,則其乘積C=AB是一個p×r的矩陣。由該公式知計算C=AB總共需要pqr次的數乘。其標準計算公式為:
現在的問題是,給定n個矩陣{A1,A2,…,An}。其中Ai與Ai+1是可乘的,i=1,2,…,n-1。要求計算出這n個矩陣的連乘積A1A2…An。
遞歸公式:
程序如下:
#include<stdio.h>
int main()
{
int p[101],i,j,k,r,t,n;
int m[101][101]; //為了跟講解時保持一致數組從1開始
int s[101][101]; //記錄從第i到第j個矩陣連乘的斷開位置
scanf("%d",&n);
for(i=0;i<=n;i++)
scanf("%d",&p[i]); //讀入p[i]的值(注意:p[0]到p[n]共n+1項)
for(i=1;i<=n;i++) //初始化m[i][i]=0
m[i][i]=0;
for(r=1;r<n;r++) //r為i、j相差的值
for(i=1;i<n;i++) //i為行
{
j=i+r; //j為列
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; //給m[i][j]賦初值
s[i][j]=i;
for(k=i+1;k<j;k++)
{
t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(t<m[i][j])
{
m[i][j]=t; //m[i][j]取最小值
s[i][j]=k;
}
}
}
printf("%d",m[1][n]);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -