声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1785|回复: 10

[编程技巧] 如何生成矩阵

[复制链接]
发表于 2009-1-5 21:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请教:如果已知函数 f(m,n)=m^2+n^2+1; m和n为1到N上的整数,请问如何获得一个以f(m,n)为元素的N阶方阵?
回复
分享到:

使用道具 举报

发表于 2009-1-5 21:56 | 显示全部楼层

回复 楼主 solitarytear 的帖子

N=10; nn=[1:10].^2; mm=nn';
ff=repmat(mm,1,10)+repmat(nn,10,1)+ones(10);
 楼主| 发表于 2009-1-5 22:49 | 显示全部楼层

回复 沙发 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)
发表于 2009-1-5 23:03 | 显示全部楼层

回复 板凳 solitarytear 的帖子

自己试一下
doc tic
发表于 2009-1-6 10:06 | 显示全部楼层

回复 板凳 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 编辑 ]

评分

1

查看全部评分

发表于 2009-1-6 10:12 | 显示全部楼层

回复 板凳 solitarytear 的帖子

个人以工程观点觉得, 若不是矩阵很大或程序很复杂, 你的写法未尝不可, 至少非常直觉方便日後易读!

评分

1

查看全部评分

发表于 2009-1-6 10:44 | 显示全部楼层

  1. clear;clc
  2. tic
  3. N=1280;
  4. [m,n]=meshgrid(1:N,1:N);
  5. f=m.^2+n.^2+1;
  6. toc

  7. clear;
  8. tic
  9. N=1280; f=zeros(N);
  10. for k=1:N, for j=1:N, f(k,j)=k^2+j^2+1; end; end
  11. toc
复制代码
Elapsed time is 0.222037 seconds.
Elapsed time is 0.177106 seconds.

评分

1

查看全部评分

发表于 2009-1-6 10:46 | 显示全部楼层

回复 7楼 sogooda 的帖子

通过7楼的测试发现,其实这样的循环也不慢。呵呵。
 楼主| 发表于 2009-1-6 11:05 | 显示全部楼层

三种方法的速度比较

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  方法一
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=[1:N].^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.

评分

1

查看全部评分

 楼主| 发表于 2009-1-6 11:11 | 显示全部楼层

9楼的三个方法

这是个很有趣的问题,方法二居然比方法一快了100多倍,
但方法一和方法三实质上是一致的,但为什么差别也如此明显?
发表于 2009-1-6 14:05 | 显示全部楼层

回复 10楼 solitarytear 的帖子

在这种情况下,预先分配变量大小可以提高速度。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 01:28 , Processed in 0.148493 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表