For loop 我正在学习一个基于多项式函数(8x+;3x^2+;3x^3)mod N创建行向量a的代码
我对这个循环如何得到结果a有点困惑。 为什么A被定义为A=[];最后A和c合并了吗For loop 我正在学习一个基于多项式函数(8x+;3x^2+;3x^3)mod N创建行向量a的代码,for-loop,polynomials,For Loop,Polynomials,我对这个循环如何得到结果a有点困惑。 为什么A被定义为A=[];最后A和c合并了吗 你能帮我理解一下这个代码的工作原理吗?设置A=[]只是将A初始化为一个空矩阵(或向量),以后可以添加内容。当你有A=[ac]它将c附加到A。这是将多项式值c添加到A的位置,用于1:N中的每个术语 请注意,最佳做法不是将元素附加到循环中的向量,而是使用a=zero(1,N)预先分配元素,这只会创建a一次。然后可以使用A(ix)=c在每次迭代中添加值c。这会更有效,但如果N较小,则不会产生太大影响。这有助于在您的问题
你能帮我理解一下这个代码的工作原理吗?设置
A=[]
只是将A
初始化为一个空矩阵(或向量),以后可以添加内容。当你有A=[ac]代码>它将c
附加到A
。这是将多项式值c
添加到A
的位置,用于1:N
中的每个术语
请注意,最佳做法不是将元素附加到循环中的向量,而是使用a=zero(1,N)
预先分配元素,这只会创建a
一次。然后可以使用A(ix)=c
在每次迭代中添加值c
。这会更有效,但如果N
较小,则不会产生太大影响。这有助于在您的问题中添加相关的语言标记(似乎是Matlab)。先生,在计算c=c+mod(coeff(i)*temp,N);。什么c=模(c,N);是否?c=mod(c,N)
将确保c
介于0
和N
之间。尽管mod(coeff(i)*temp,N)
已经确保添加到c
的是模N
,但自从添加后,它可以将c
推过模,这就是再次使用mod
的原因。如果我定义了一个简单的矩阵并想要排列它的原始位置<代码>mat=[1 2 3;4 5 6;7 8 9]代码>B=重塑(mat)代码>B=[1 4 7 2 5 8 3 6 9]代码>根据矩阵索引,B的元素将按A定义的位置排列。mat_new=B(A)代码>matu_new=[5 3 8 4 2 7 6 1 9]代码>dec=mat\u new代码>dec(A)=dec
%dec=[1 4 7 2 5 8 3 6 9]。dec(A)=dec
如何将原始矩阵取回?因为这与原始帖子无关,所以最好创建一个新问题。其他人可能有同样的问题,他们不太可能在评论中找到。先生,我已经创建了一个,但没有得到任何回应。这是链接:
coeff = [8 3 3]; %%poly_function
A = []; N=9;
for ix = 1:N;
c = 0;
for i = 1:3
temp=1;
for k=1:i
temp=mod(temp*ix,N);
end
c = c + mod(coeff(i)*temp ,N);
c = mod(c, N);
if c == 0; c = N; end
end
A = [A c]; %%A = [5 7 6 2 4 3 8 1 9]
end