关于规律性矩阵的生成
使用matlab进行矩阵的生成,其中涉及到了向量元素的寻址问题,使用向量的方法可以快速的进行赋值。
任务:
寻找规律后进行向量元素的赋值,这里使用循环来赋值。
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分别是左右翻转和上下翻转的函数,可以快速的进行翻转操作。
生成结果:
后自己以c语言进行练习,相比于matlab,老夫的操作就繁琐一些,还需要进行更多的编成练习:
#include<stdio.h>
#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;
}
老夫愚笨,仍需练习。