根据呼文军[1]等建立的购房决策数学模型式(1)[1],通过对影响购房的多个因素进行科学地分析、比较,从若干备选购房方案中做出最佳的选择。

                          Q=P*WT                                     (1)

在文章的“实例分析”中,假设某位青年教师需要通过决策方案购买房屋,综合该教师所在城市的房源进行筛选,最终选择在A、B、C、D四个小区中做最后的备选方案,确定影响购房的因素有五个:①房屋价格;②房屋面积;③与单位的距离;④房屋设计;⑤房屋周边情况。

房源情况表如下:

影响因素做多元回归分析的方法_开发语言

第1步:根据4个小区(备选方案)房源情况建立了评价矩阵B:

影响因素做多元回归分析的方法_c语言_02

第2步:根据第1步建立的评价矩阵求出理想方案,房价和位置为逆向指标,故选最小值为最优值;房屋面积、品牌、环境设施情况为正向指标,故选最大值为最优值,最优值矩阵C为:

影响因素做多元回归分析的方法_最小值_03

第3步:根据评价矩阵B和的评价矩阵和最优值矩阵C定义建立了同一度矩阵P

影响因素做多元回归分析的方法_开发语言_04

P矩阵中各元素为对应评价B矩阵元素除以相应列的最优值(最优质为最大值),或最优值除以对应元素(最优质为最小值)

第4步:根据五种影响购房因素的权重计算出权系矩阵W

影响因素做多元回归分析的方法_c语言_05

第5步:根据式(1)计算得到4个备选方案与理想方案的接近Q

影响因素做多元回归分析的方法_开发语言_06

Q中越大的值就是越接近理想方案的选择,最大值为0.9148即B小区为最佳备选购房方案。

假设已知房源情况表、权系矩阵W,编程计算找出最佳备选购房方案。

要求输入PW矩阵数据,计算Q值,在Q中找出最大值对应的备选方案中的小区。(数据处理中保留4位小数)

输入输出示例:

影响因素做多元回归分析的方法_c语言_07

 代码实现:

#include<stdio.h>
void ZYZ(float  b[][5],float c[]){
    for(int i=0;i<4;i++){
        for(int j=0;j<5;j++){
        	if(i==0){
        		c[j]=b[i][j];
        		continue;
        	}
            if(j==0||j==2){
                if(c[j]>b[i][j]){
                    c[j]=b[i][j];
                }
            }else{
                if(c[j]<b[i][j]){
                    c[j]=b[i][j];
                }
            }
        }
    }
}
void TYD(float b[][5],float c[],float p[][5]){
    for(int i=0;i<4;i++){
        for(int j=0;j<5;j++){
            if(j==0||j==2){
               p[i][j]=c[j]/b[i][j];
            }else{
                p[i][j]=b[i][j]/c[j];
            }
        }
    }
}
void Q(float p[][5],float w[][1],float q[][1],int *index){
    for(int i=0;i<4;i++){
        for(int j=0;j<5;j++){
            q[i][0]+=p[i][j]*w[j][0];
            if(q[*index][0]<q[i][0]){
            	*index=i+1;
			}
        }
    }
}
int main(){
    int index=0;
    float b[4][5],c[5],p[4][5],w[5][1],q[5][1];
 	 printf("请输入房源情况表:");
    for(int i=0;i<4;i++){
        for(int j=0;j<5;j++){
            scanf("%f",&b[i][j]);
        }
    }
    printf("请输入权系矩阵W:");
     for(int i=0;i<5;i++){
        scanf("%f",&w[i][0]);
    }
    ZYZ(b,c);
    TYD(b,c,p);
	Q(p,w,q,&index);
	printf("\n");
	for(int i=0;i<4;i++){
		printf("第%d套房源与理想方案接近程度:%.4f\n",i+1,q[i][0]);
	}
	printf("\n第%d套房源为最佳房源",index);
    return 0;
}