Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您如何找到';M';由';M';输入中心的子矩阵';N';由';N';矩阵?(在Matlab中)_Matlab - Fatal编程技术网

您如何找到';M';由';M';输入中心的子矩阵';N';由';N';矩阵?(在Matlab中)

您如何找到';M';由';M';输入中心的子矩阵';N';由';N';矩阵?(在Matlab中),matlab,Matlab,如何在Matlab中编写一个函数,以在nxn输入矩阵的中心输出mxm子矩阵?函数应该有两个输入参数:nxn输入矩阵(2D数组)和要从输入矩阵中提取的方子矩阵M的大小。唯一的输出应该是位于输入矩阵中心的M x M子矩阵。该函数应该用于循环以提取子矩阵,而不是使用冒号符号或任何内置函数来提取这部分代码。该函数应适用于任意平方输入矩阵,其中N≥ 3.如果N是偶数,那么M应该是偶数。如果N是奇数,那么M应该是奇数 用于循环和偏移索引 前言: 在这里,我想把这个问题想象成修剪矩阵。本例中我表示的修剪量为t

如何在Matlab中编写一个函数,以在nxn输入矩阵的中心输出mxm子矩阵?函数应该有两个输入参数:nxn输入矩阵(2D数组)和要从输入矩阵中提取的方子矩阵M的大小。唯一的输出应该是位于输入矩阵中心的M x M子矩阵。该函数应该用于循环以提取子矩阵,而不是使用冒号符号或任何内置函数来提取这部分代码。该函数应适用于任意平方输入矩阵,其中N≥ 3.如果N是偶数,那么M应该是偶数。如果N是奇数,那么M应该是奇数

用于循环和偏移索引 前言: 在这里,我想把这个问题想象成修剪矩阵。本例中我表示的修剪量为
trim\u amount
Trim_Amount
指示子矩阵的大小以及开始读取/保存子矩阵的起点

由于修剪量始终取自每一侧,因此可以预期子矩阵的尺寸如下所示:

子矩阵宽度=M-(2×修剪量)

2×微调量将始终导致偶数,因此可以这样说:

如果M是偶数→ M-(偶数)→ 偶数
如果M是奇数→ M-(偶数)→ 奇数


测试输出结果: 我建议仔细阅读代码,以过滤任何意外问题

完整脚本: 使用MATLAB R2019b运行

使用For循环和偏移索引 前言: 在这里,我想把这个问题想象成修剪矩阵。本例中我表示的修剪量为
trim\u amount
Trim_Amount
指示子矩阵的大小以及开始读取/保存子矩阵的起点

由于修剪量始终取自每一侧,因此可以预期子矩阵的尺寸如下所示:

子矩阵宽度=M-(2×修剪量)

2×微调量将始终导致偶数,因此可以这样说:

如果M是偶数→ M-(偶数)→ 偶数
如果M是奇数→ M-(偶数)→ 奇数


测试输出结果: 我建议仔细阅读代码,以过滤任何意外问题

完整脚本:
使用MATLAB R2019b运行

如果需要,请展示您的尝试并询问有关代码的特定信息。另外,您真的需要使用循环吗?如果没有循环,做起来会容易得多,我的部分任务是用于循环,我真的不知道从哪里开始。我从创建流程图开始。我会在一分钟内附上它。很抱歉,你不知道如何处理它,但这里的问题应该更具体。我建议您先对行使用循环,然后对列使用循环,在内部主体循环中,您从输入中读取一个值,并将其写入输出中的一个条目Hank you@Luismendos解决此任务的一些有用函数可能包括
size()
rand()
用于生成随机测试矩阵。如果需要,请展示您的尝试并询问有关代码的特定信息。另外,您真的需要使用循环吗?如果没有循环,做起来会容易得多,我的部分任务是用于循环,我真的不知道从哪里开始。我从创建流程图开始。我会在一分钟内附上它。很抱歉,你不知道如何处理它,但这里的问题应该更具体。我建议您对行使用循环,然后对列使用循环,在内部主体循环中,您从输入中读取一个值,并将其写入输出中的一个条目Hank you@Luismendo一些用于解决此任务的有用函数可能包括用于生成随机测试矩阵的
size()
rand()
Dimension = 7;
Matrix = round(100*rand(Dimension));
Trim_Amount = 1;

[Sub_Matrix] = Grab_Sub_Matrix(Matrix,Trim_Amount);
Matrix
Sub_Matrix
    
%Function definition%
function [Sub_Matrix] = Grab_Sub_Matrix(Matrix,Trim_Amount) 

%Minimum of M must be 5 since N >= 3%
[M,~] = size(Matrix);


%Ensuring the trimming factor does not go over possible range%
Max_Trimming_Factor = M - 3;
if(Trim_Amount > Max_Trimming_Factor)
Trim_Amount = Max_Trimming_Factor;
end


%Fill in the boundaries%
Row_Start_Limit = Trim_Amount + 1;
Column_Start_Limit = Trim_Amount + 1;

%Creating sub-matrix based on amount of trimming%
Sub_Matrix = zeros(M-(2*Trim_Amount),M-(2*Trim_Amount));

for Row = 1: length(Sub_Matrix)
   for Column = 1: length(Sub_Matrix) 
    
%    fprintf("(%d,%d)\n",Row,Column);  
   Sub_Matrix(Row,Column) = Matrix(Row + Row_Start_Limit-1,Column + Column_Start_Limit-1);
    
   end
end

end