现在的位置: 首页 > 综合 > 正文

模糊矩阵的合成

2013年10月14日 ⁄ 综合 ⁄ 共 1065字 ⁄ 字号 评论关闭

用matlab做了一下才十行不到的代码,matlab的确很强大。昨天晚上用matlab写了一下,后来又想用c去实现同样的效果,不像matlab有封装好的求最大值最小值函数,在c中需要自己定义,代码写的还算详细的,配合注释应该能够看懂的。

#include<stdio.h>
#define M 2
#define N 3
double a,b;
double x,y;
double min(double a,double b){
	if(a>=b)
		return b;
	else
		return a;
}
double max(double x,double y){
	if(x>=y)
		return x;
	else
		return y;
}
int main()
{
	int i,j,p,q;
	int k,m;
	double temp[M][N];
	double a[M][N];
	double b[N][M];
	double final[M][M];//合成后的矩阵为final[M][M]
	printf("请输入需要合成的A矩阵:\n");
	for(i=0;i<M;i++)
		for(j=0;j<N;j++)
			scanf("%lf",&a[i][j]);
		printf("请输入需要合成的B矩阵:\n");
		for(p=0;p<N;p++)
			for(q=0;q<M;q++)
				scanf("%lf",&b[p][q]);
			//double a[M][N]={{0.4,0.7,0},{1,0.8,0.5}};//需要合成的矩阵
			//double b[N][M]={{1,0.7},{0.4,0.6},{0,0.3}};//需要合成的矩阵
			for(i=0;i<M;i++){
				for(j=0;j<M;j++){
					for(m=0;m<=M;m++)
				//取小 printf("第一个矩阵的%d行与第二个矩阵的第%d列相比较小的值为:%f\n",i,j,temp[i][m]);
						temp[i][m]=min(a[i][m],b[m][j]);
					for(k=0;k<M;k++)
						//取大 printf("f[%d][%d]=%.2f\n",i,j,f[i][j]);
						final[i][j]=max(max(temp[i][k],temp[i][k+1]),final[i][j]);
					//printf("i=%d j=%d\n",i,j);
				}
			}
			printf("合成后的矩阵为:\n");
			for(i=0;i<M;i++){
				for(j=0;j<M;j++){
					printf("%.3f  ",final[i][j]);//输出合成后的矩阵
				}
				printf("\n");
			}
			return 0;
}


抱歉!评论已关闭.