在 Pari/GP 中为路径图编写代码
Writing a code for a path graph in Pari/GP
我正在尝试为 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)
*** ^---------------------
我不确定这是否是正确的写法,我遗漏了一些微妙的东西,或者我是否应该为此做些不同的事情。任何帮助将不胜感激!
完成您想要完成的任务的最简单方法如下:
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
语句。
然而,正如我的第一个建议所示,通过使用语言的函数式能力通常很容易避免大量代码。
我正在尝试为 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)
*** ^---------------------
我不确定这是否是正确的写法,我遗漏了一些微妙的东西,或者我是否应该为此做些不同的事情。任何帮助将不胜感激!
完成您想要完成的任务的最简单方法如下:
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
语句。
然而,正如我的第一个建议所示,通过使用语言的函数式能力通常很容易避免大量代码。