【求助】关于Table的问题
mathematica吧
全部回复
仅看楼主
level 3
想要对一个函数table,然后他的数值取自于随机数和列表。
但是最后的结果并不是一个纯数值表。
n = 5;
\[Lambda]s =
Symbol["\[Lambda]" <> ToString[#]] & /@ Range[n](*number of sites*);
xs = Append[\[Lambda]s, \[Beta]];
tvalues = Range[0., 1., 0.01] (*set of t values*);
randnum = RandomReal[1, {10, n + 1}]
Clear[eq, eqnst]
eq[t, xs] =
Block[{U = 1., \[Mu] = 0.5, \[Epsilon] = (-2 t - 0.5), EE, summand},
EE[k_] := (-2 t ( Cos[(2 \[Pi] (k - 1))/n])) - \[Mu];
summand[\[Lambda]_,
k_] := (U/(2 n)) (Cosh[\[Lambda]]^2 Sinh[\[Lambda]]^2 +
2 Sinh[\[Lambda]]^4 +
2 \[Beta]^2 Cosh[\[Lambda]] Sinh[\[Lambda]] +
4 \[Beta]^2 Sinh[\[Lambda]]^2 ) + Sinh[\[Lambda]]^2 EE[k];
Total[MapIndexed[
summand[#, #2[[
1]]] &, \[Lambda]s]] + ( \[Beta]^2 \[Epsilon]) + (U/(2 n)) (\
\[Beta]^4)
];
Table[eq[t, xs], {t, tvalues}, {xs, randnum}]
结果如下,尝试过将eq变为eq[t,λ1,λ2,λ3,λ4,λ5,\beta],但是结果一样,不知道该如何解决。 xs也就是λ和\beta的值均源于随机数。
链接是代码的共享,方便大佬查阅,密码是1314
https://stuouceducn-my.sharepoint.com/:u:/g/personal/qiantian_stu_ouc_edu_cn/ES40y-bsKNlFmjhWa8lXESwBQIQTm-hfQu24IsjEmckQSA?e=BG27ml
2020年05月18日 05点05分 1
level 7
最直接的方法是把eq的定义改成
eq[t_,{\[Lambda]1_,\[Lambda]2_,\[Lambda]3_,\[Lambda]4_,\[Lambda]5_,\[Beta]_}]=Block[……]
不过按题目的意思要支持变长的变量个数,这样改应该不对。
实际上完全不用拼变量名,这种习惯也不太好,完整的代码如下:
n=5;
tvalues=Range[0.,1.,0.01] (*set of t values*);
randnum=RandomReal[1,{10,n+1}];
eq[t_,{\[Lambda]l__,\[Beta]_}]:=Block[{U=1.,\[Mu]=0.5,\[Epsilon]=(-2 t-0.5),EE,summand},
EE[k_]:=(-2 t (Cos[(2 \[Pi] (k-1))/n]))-\[Mu];
summand[\[Lambda]_,k_]:=(U/(2 n)) (Cosh[\[Lambda]]^2 Sinh[\[Lambda]]^2+2 Sinh[\[Lambda]]^4+2 \[Beta]^2 Cosh[\[Lambda]] Sinh[\[Lambda]]+4 \[Beta]^2 Sinh[\[Lambda]]^2)+Sinh[\[Lambda]]^2 EE[k];
Total[MapIndexed[summand[#,#2[[1]]]&,{\[Lambda]l}]]+(\[Beta]^2 \[Epsilon])+(U/(2 n)) (\[Beta]^4)]
Table[eq[t,xs],{t,tvalues},{xs,randnum}]
2020年05月18日 11点05分 2
我试了下还是不行,出来的结果还是一样,并且summand[\[Lambda]_, k_] :中lamda是红色的,不知道为什么,定义出错吗?
2020年05月18日 13点05分
你好,我目前除了结果,但是在eq定义的时候,必须如下定义eq,无法简化成你那样,不知道哪里出现了问题。 eq[t_, {\[Lambda]1_, \[Lambda]2_, \[Lambda]3_, \[Lambda]4_, \ \[Lambda]5_, \[Beta]_}]
2020年05月18日 16点05分
可以了,是我少了一个下划线,惭愧[真棒]
2020年05月18日 20点05分
level 3
你好,我目前除了结果,但是在eq定义的时候,必须如下定义eq,无法简化成你那样,不知道哪里出现了问题。 eq[t_, {\[Lambda]1_, \[Lambda]2_, \[Lambda]3_, \[Lambda]4_, \ \[Lambda]5_, \[Beta]_}]
2020年05月18日 16点05分 3
1