xjzuo 发表于 2006-9-21 18:42

请教高手: 这样的方程怎么求解?

已知kx,ky都属于,它们构成一个二维网格,格点数取N=16X16,每一个(kx,ky)对应网格上一点;
又知 Jk=0.2*(cos(kx)+cos(ky)); wk=sqrt((mu-Jk)^2-1);
现在要求求解方程2*N=sum((mu-Jk)*coth(wk)/wk),解出mu的值.

注:其中sum表示对kx,ky求和.

还请高手帮忙指点一下.

[ 本帖最后由 xjzuo 于 2006-9-21 18:46 编辑 ]

AaronSpark 发表于 2006-9-22 06:56

mu表示的是一个向量?还是一个数值?

如果是后者可以尝试用fsolve求解,不过这个对初值有一定的要求,需要选择合适的初值

function y=fun(mu)
kx=0:pi/15:pi;
ky=0:pi/15:pi;
jk=0.2*(cos(kx)+cos(ky));
wk=sqrt((mu*ones(size(jk))-jk).^2-1);
y=sum((mu*ones(size(jk))-jk).*coth(wk)./wk)-2*16*16;

x = fsolve(@fun,0,optimset('Display','iter'))

不过你这个函数非常的诡异
好像据大部分情况下的mu都是满足要求的

xjzuo 发表于 2006-9-22 09:11

请教高手

非常感谢ABBYABBIE的回答!
Mu是一个数值,而且应该是唯一的一个数值.
我想是不是可以这样处理:

先  kkx=linspace(0,pi,16);
   kky=linspace(0,pi,16);
然后再网格化:
    =meshgrid(kkx,kky);
然后再进行计算。

还请高手帮忙指点一下。

[ 本帖最后由 xjzuo 于 2006-9-22 09:59 编辑 ]

xjzuo 发表于 2006-9-23 08:33

这样的方程怎么求解?

按ABBYABBIE的代码,检查了一下jk=0.2*(cos(kx)+cos(ky)),结果是一维向量而非矩阵.
我用meshgrid网格化后,计算了一下,发现很不稳定,初值的影响很大,这与事实不符.
另外,mu应当大于1.4,但计算结果多数小于1.4.Why?
还请高手帮忙分析一下.
页: [1]
查看完整版本: 请教高手: 这样的方程怎么求解?