我试图在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)
*** ^---------------------
我不确定这是否是写这篇文章的正确方法,并且我遗漏了一些细微的东西,或者我是否应该为此做一些不同的事情。任何帮助将不胜感激!
答案 0 :(得分: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
语句。
但是,正如我的第一个建议所显示的那样,使用该语言的功能通常可以很容易地避免大量代码。