关于规律性矩阵的生成

使用matlab进行矩阵的生成,其中涉及到了向量元素的寻址问题,使用向量的方法可以快速的进行赋值。
任务:
关于规律性矩阵的生成_第1张图片

寻找规律后进行向量元素的赋值,这里使用循环来赋值。

m=5;
M=zeros(2*m-1,2*m-1);
for i = 1:m
    M(i,1:m-i)=i;
    M(i,m+1-i:m)=1:i;
end
M(1:m,m:2*m-1)=fliplr(M(1:m,1:m))
M(m:2*m-1,1:2*m-1)=flipud(M(1:m,1:2*m-1))

其中的fliplr和flipup分别是左右翻转和上下翻转的函数,可以快速的进行翻转操作。
生成结果:
关于规律性矩阵的生成_第2张图片

后自己以c语言进行练习,相比于matlab,老夫的操作就繁琐一些,还需要进行更多的编成练习:

#include
#define M 7
int main()
{
	int i, j, s, count, count2;
	int a[M][2 * M - 1];
	for (i = 0; i < M; i++)
	{
		for (j = 0; j < M - 1 - i; j++)
		{
			a[i][j] = i + 1;
		}
		count = 0;
		for (j = M - 1 - i; j < M; j++)
		{
			s = 1;
			s = s + count;
			a[i][j] = s;
			count++;
		}
		count2 = 0;
		for (j = M; j < M + i; j++)
		{
			a[i][j] = i - count2;
			count2++;
		}
		for (j = M + i; j < 2 * M - 1; j++)
		{
			a[i][j] = i + 1;
		}
	}
	for (i = 0; i <  M ; i++)
	{
		for (j = 0; j < 2 * M - 1; j++)
		{ 
			printf("%2d", a[i][j]);
		}
		printf("\n");

	}
	for (i = M-2; i >= 0; i--)
	{
		for (j = 0; j < 2 * M - 1; j++)
		{
			printf("%2d", a[i][j]);
		}printf("\n");
	}
	return 0;
}

关于规律性矩阵的生成_第3张图片

老夫愚笨,仍需练习。

你可能感兴趣的:(练习,matlab)