题目:利用矩阵操作,计算投入产出问题(一) 跪求

2. 基本要求:
(1)要求用模块化设计和C++的思想来完成程序的设计;
(2)要求分别编写矩阵求和、求转置阵和求矩阵的列和的函数模块,分别存到不同的.CPP文件中;
(3)在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成。
(4)程序调试通过后,完成程序文档的整理,加必要的注释。
3. 创新要求
在基本要求达到后,进行创新设计,如利用输入文本文件提供矩阵的数据等。
1. 问题描述:
(1)在现代经济活动中,利用经济数学方法研究整个国民经济、某个地区及企业在再生产过程中的平衡关系,了解各部门从事经济活动的各种消耗与结果是十分重要的。其中各部门的总投入和总产出要达到平衡是一项重要的因素。
(2)一般地,价值型投入产出表如下图所示。
产 出
投 入 中间产品 最终产品 总产品量
1 2 … n 消费 积累 出口 小计





值 1
2

n
固定资产折旧 a11 a12 … a1n y1 x1
a21 a22 … a2n y2 x2
… … … … … …
an1 an2 … ann yn xn
d1 d2 … dn




值 劳动报酬
纯 收 入
小 计 v1 v2 … v n
m1 m2 … mn
z1 z2 … zn
总 投 入 x1 x2 … xn
*注:aij表示第j部门在生产过程中消耗第i部门所为产品数量.
(3)根据投入产出平衡思想解决如下问题:
在问题中若已知某地区在某一生产周期内各部门之间的生产消耗关系矩阵A,固定资产折旧向量D及新创造价值向量Z分别为:

{18 37 65 43
A= 26 35 84 73
69 24 21 35
47 82 51 37}

D = (15 20 10 17) ,Z=(250 380 662 384)
求出: 总投入向量 X=( x1 x2 x3 x4)
最终产出向量 Y=( y1 y2 y3 y4)
直接消耗系数矩阵 B=(bij)(其中 bij=aij/xj)
2. 问题的解决方案:
⑴ 编写输入函数,提供已知数组的数据;
⑵ 编写计算sum(A)的函数,sum(A)表示A矩阵各列的和,要求存入数组ASUM中。
⑶ 然后,编写计算X=sum(A)+D+Z的函数;
⑷ 再编写计算sum(A’)的函数,A’代表A矩阵的转置阵,sum(A’)表示计算A’的各列和,要求存入数组A1SUM中;
⑸ 编写函数计算Y1=X-sum(A’)。
⑹ 编写函数求 Y=Y1’,Y1’代表Y阵的转置阵。
⑺ 编写求B(i,j)=A(i,j)/X(j)的函数
⑻ 编写输出函数,选择适当的形式数出计算出的各个矩阵。
⑼ 主函数调用上述函数,完成计算任务。

第1个回答  2012-06-10
1
#include<iostream.h>
#include"all.h"
void main()
{
double A[4][4],ASUM[4],A1SUM[4],B[4][4],D[4],X[4],Z[4],Y1[4],Y[4][1];
cout<<"请输入生产消耗关系矩阵A:"<<endl;
enter1(A,4);
cout<<"请输入固定资产折旧向量D:"<<endl;
enter2(D,4);
cout<<"新创造价值向量Z:"<<endl;
enter2(Z,4);
sum1(A,ASUM,4);//计算sum(A),并存入数组ASUM中
sub1(X,ASUM,D,Z,4);//计算X=ASUM+D+Z
sum2(A,A1SUM,4);//计算A1SUM=sum(A')
sub2(X,A1SUM,Y1,4);
mul(B,A,X,4);//计算直接消耗系数矩阵B
tra(Y,Y1);
cout<<"总投入向量X:"<<endl;
output2(X,4);
cout<<"最终产出向量Y:"<<endl;
output3(Y);
cout<<"直接消耗系数矩阵B:"<<endl;
output1(B,4);
}
2
#include<iostream.h>
void enter1(double a[][4],int n)//输入函数1,功能是请输入生产消耗关系矩阵A
{
for(int i=0;i<n;i++)
{
for(int j=0;j<4;j++)
cin>>a[i][j];
cout<<endl;
}
}
void enter2(double a[],int n)//输入函数2,功能是输入新创造价值向量Z或固定资产折旧矩阵D
{
for(int i=0;i<n;i++)
cin>>a[i];
}

3
#include<iostream.h>
void sum1(double a[][4],double b[],int n)//用于求A1=sum(A), 即A 矩阵各列的和
{
for(int i=0;i<4;i++)
{
b[i]=0;
for(int j=0;j<n;j++)
b[i]+=a[j][i];
}
}
void sum2(double a[][4],double b[],int n)//用于求A2=sum(A')
{
for(int i=0;i<n;i++)
{
b[i]=0;
for(int j=0;j<4;j++)
b[i]+=a[i][j];
}
}
4

#include<iostream.h>
void sub1(double a[],double b[],double c[],double d[],int n)//用于求X=Z+ASUM+D
{
for(int i=0;i<n;i++)
a[i]=b[i]+c[i]+d[i];
}
void sub2(double a[],double b[],double c[],int n)//用于计算Y1=X-A2
{
for(int i=0;i<n;i++)
c[i]=a[i]-b[i];
}

5

#include<iostream.h>
void tra(double a[4][1],double b[4])//用于求Y=Y1'
{
for(int i=0;i<4;i++)
a[i][0]=b[i];
}
6
#include<iostream.h>
void mul(double a[][4],double b[][4],double c[4],int n)//用于求直接消耗系数矩阵B(i,j)=A(i,j)/X(j)
{
for(int i=0;i<n;i++)
for(int j=0;j<4;j++)
a[i][j]=b[i][j]/c[j];
}
7
#include<iostream.h>
void output1(double a[][4],int n)//输出函数一,
{
for(int i=0;i<n;i++)
{
for(int j=0;j<4;j++)
cout<<a[i][j]<<"\t";
cout<<endl;
}
}
void output2(double a[],int n)
{
for(int i=0;i<4;i++)
cout<<a[i]<<"\t";
cout<<endl;
}
void output3(double a[4][1])//输出函数二,
{
for(int i=0;i<4;i++)
cout<<a[i][0]<<endl;
}
8
void enter1(double a[][4],int n);
void enter2(double a[],int n);
void sum1(double a[][4],double b[],int n);
void sub1(double a[],double b[],double c[],double d[],int n);
void sum2(double a[][4],double b[],int n);
void sub2(double a[],double b[],double c[],int n);
void mul(double a[][4],double b[][4],double c[],int n);
void tra(double a[4][1],double b[4]);
void output1(double a[][4],int n);
void output2(double a[],int n);
void output3(double a[4][1]);
第2个回答  2011-05-29
这个可以做,但是需要时间的!麻烦的的很!
第3个回答  2011-05-27
追问

请帮帮忙吧 您就拉兄弟一把吧 希望各位高手尽可能写详细点,不胜感激