如何生成矩阵
请教:如果已知函数 f(m,n)=m^2+n^2+1; m和n为1到N上的整数,请问如何获得一个以f(m,n)为元素的N阶方阵?回复 楼主 solitarytear 的帖子
N=10; nn=.^2; mm=nn';ff=repmat(mm,1,10)+repmat(nn,10,1)+ones(10);
回复 沙发 ChaChing 的帖子
多谢您的回复,您的方法很好,用下面的方法也可以,但对于这个问题用两个for 语句计算速度是不是要慢些?N=128;
for k=1:N;
for j=1:N;
f(k,j)=k^2+j^2+1;
j=j+1;
end
k=k+1;
end
size(f)
回复 板凳 solitarytear 的帖子
自己试一下doc tic
回复 板凳 solitarytear 的帖子
楼主应该是学过fortran/C之语言的, 才会有j=j+1之习惯试试以下(j=j+1及k=k+1是多馀的)
N=128; f=zeros(N);
for k=1:N, for j=1:N, f(k,j)=k^2+j^2+1; end; end
[ 本帖最后由 ChaChing 于 2009-1-6 10:11 编辑 ]
回复 板凳 solitarytear 的帖子
个人以工程观点觉得, 若不是矩阵很大或程序很复杂, 你的写法未尝不可, 至少非常直觉方便日後易读!clear;clc
tic
N=1280;
=meshgrid(1:N,1:N);
f=m.^2+n.^2+1;
toc
clear;
tic
N=1280; f=zeros(N);
for k=1:N, for j=1:N, f(k,j)=k^2+j^2+1; end; end
toc
Elapsed time is 0.222037 seconds.
Elapsed time is 0.177106 seconds.
回复 7楼 sogooda 的帖子
通过7楼的测试发现,其实这样的循环也不慢。呵呵。三种方法的速度比较
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%方法一clear;clc
tic % 测试开始
N=1024;
for k=1:N;
for j=1:N;
f(k,j)=k^2+j^2+1;
j=j+1;
end
k=k+1;
end
toc % 测运行时间
Elapsed time is 5.811530 seconds.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%方法二(快多了)
clear;clc
tic % 测试开始
N=1024;
nn=.^2;
mm=nn';
ff=repmat(mm,1,N)+repmat(nn,N,1)+ones(N);
toc %%%
Elapsed time is 0.047724 seconds.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%方法三
clear;clc
tic % 测试开始
N=1024;
f=zeros(N);
for k=1:N
for j=1:N
f(k,j)=k^2+j^2+1;
end
end
toc %
Elapsed time is 1.258142 seconds.
9楼的三个方法
这是个很有趣的问题,方法二居然比方法一快了100多倍,但方法一和方法三实质上是一致的,但为什么差别也如此明显?
回复 10楼 solitarytear 的帖子
在这种情况下,预先分配变量大小可以提高速度。
页:
[1]