24小时热门版块排行榜    

查看: 1048  |  回复: 3

lijunjiexm

铁虫 (小有名气)

[求助] 求助一简单matlab程序的出错问题,谢谢

如下m文件,为什么在命令窗口运行 出现错误提示:
>> A=mesh2d2(10)
??? Index exceeds matrix dimensions.
Error in ==> mesh2d2 at 8
A = sparse (ii(keep), jj(keep), xx(keep));
>>
请大家指点,谢谢!

%%%%%%%%%%%%%%%%%%%%%%%
function A = mesh2d2 (n)
% create an n-by-n 2D mesh for the 2nd difference operator
nn = 1:n^2 ;
ii = [nn-n ; nn-1 ; nn ; nn+1 ; nn+n] ;
jj = repmat (nn, 5, 1) ;
xx = repmat ([-1 -14-1-1]',1, n^2) ;
keep = find (ii >= 1 & ii <= n^2 & jj >= 1 & jj <= n^2) ;
A = sparse (ii(keep), jj(keep), xx(keep));
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★
余泽成(金币+2): 谢谢参与应助! 2011-11-26 23:43:22
??? Index exceeds matrix dimensions.
下标越界错误

在mesh2d2中的第八行之前,第七行之后的分号去掉
运行一次,把keep这个下标打印出来看,是不是没有find到,keep是0啊
导致在做稀疏矩阵A的时候ii(keep)访问矩阵的0号元素(不存在),因为matlab的矩阵下标从1开始的
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2011-11-26 17:53:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

peony1303

金虫 (初入文坛)

【答案】应助回帖

★ ★
余泽成(金币+2): 谢谢参与应助! 2011-11-26 23:43:34
把最后一行“A = sparse (ii(keep), jj(keep), xx(keep)); ”转换成
A = sparse (ii(keep));
A = sparse (jj(keep));
A = sparse (xx(keep));
再试试看。sparse函数转化只能一个个来吧。

另外,你xx = repmat ([-1 -14-1-1]',1, n^2) ;是想生成2*100个元素的矩阵,不过按照你的程序应该生成5*100矩阵吧。猜测而已。[-1 -14-1-1]应为[-1 -1 4 -1 -1]吧??
Welcomeyou,welcomeme!!
3楼2011-11-26 23:11:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

peony1303

金虫 (初入文坛)

【答案】应助回帖

★ ★
余泽成(金币+2): 谢谢参与应助! 2011-11-26 23:43:44
function A = mesh2d2 (n)
% create an n-by-n 2D mesh for the 2nd difference operator
nn = 1:n^2 ;
ii = [nn-n ; nn-1 ; nn ; nn+1 ; nn+n] ;
jj = repmat (nn, 5, 1) ;
xx = repmat ([-1 -14-1-1]',1, n^2) ;
[keep1,keep2]= find (ii >= 1 & ii <= n^2 & jj >= 1 & jj <= n^2) ;
keep=[keep1 keep2];
% A = sparse (ii(keep), jj(keep), xx(keep));
A1 = sparse (ii(keep));
A2 = sparse (jj(keep));
A3 = sparse (xx(keep));
Welcomeyou,welcomeme!!
4楼2011-11-26 23:20:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lijunjiexm 的主题更新
信息提示
请填处理意见