0

我正在尝试为 Pari 中 n 个顶点上的路径图的邻接矩阵编写一个矩阵。为了清楚起见,当我说图 P_n 时,我指的是具有 n 个顶点和 n-1 条边的图。

到目前为止,我已经设法针对特定情况执行此操作:

path2=matrix(2,2,i,j);for(i=1,2-1,path2[i,i+1]=1);for(i=2,2,path2[i,i-1]=1);path2

path3=matrix(3,3,i,j);for(i=1,3-1,path3[i,i+1]=1);for(i=2,3,path3[i,i-1]=1);path3

等等

但是,我想要一个可以选择路径长度的代码。类似的东西path(n)=...。当我用上面的代码尝试这个时,我得到以下信息:

path(n)=matrix(n,n,i,j);for(i=1,n-1,path(n)[i,i+1]=1);for(i=2,n,path(n)[i,i-1]=1);path(n)
  ***   expected character: ',' or ')' instead of: ...or(i=1,n-1,path(n)[i,i+1]
  ***   =1);for(i=2,n,path(n)
  ***   ^---------------------

我不确定这是否是写这篇文章的正确方法,我错过了一些微妙的东西,或者我是否应该为此做一些不同的事情。任何帮助将不胜感激!

4

1 回答 1

1

做你想要完成的最简单的方法是:

path(n)={matrix(n,n,i,j,abs(i-j)==1)}

您收到错误的原因是您似乎对变量和函数有误解。您的代码的正确实现是:

path(n)={my(adj=matrix(n,n,i,j)); for(i=1,n-1, adj[i,i+1]=1); for(i=2,n,adj[i,i-1]=1); adj}

这定义了一个名为 的函数path。在这个函数内部,声明了一个局部变量adj,然后由代码填写。在函数结束时,adj返回。请注意,函数中的最终表达式是返回的内容 - 无需使用显式return语句。

然而,正如我的第一个建议所示,通过使用语言的函数功能,通常很容易避免大量代码。

于 2019-09-09T21:13:10.533 回答