求助,关于一道解一维薛定谔方程的错误。
请大家看看为什么错了,并告诉在下怎么改正。万分感谢。#include <stdio.h>
#include<math.h>
double f(double x,double e)
{
return e-(x-1)*(x-1)*(x+2)*(x+2);
}
void search()
{
long double e,pusai[1001],phi[1001],x[1001],step,dx,k1,k2,k3,k4,l1,l2,l3,l4;
int i;
pusai[0]=0;
phi[0]=1;
dx=0.002;
for(i=0;i<1001;i++)
x[i]=i*dx;
e=-16;
step=1;
while(step>0.0001)
{
for(i=0;i<1001;i++)
{
k1=phi[i];
l1=f(x[i],e);
k2=phi[i]+0.5*l1*dx;
l2=f(x[i]+0.5*dx,e);
k3=phi[i]+0.5*l2*dx;
l3=f(x[i]+0.5*k2,e);
k4=phi[i]+dx*l3*dx;
l4=f(x[i]+dx*k3,e);
pusai[i+1]=pusai[i]+1./6.*(k1+2*k2+2*k3+k4);
phi[i+1]=phi[i]+1./6.*(l1+2*l2+2*l3+l4);
}
if(fabs(pusai[1000]<e-4))
{
printf("%3.3f",pusai[1000]);
break;}
else
{
if(pusai[1000]>0) e=e+step;
else {step*=0.5;e=e-step;}
}
}
}
int main()
{ clrscr();
search();
}
我给大家大致说说算法吧,就是先设定pusai的初值为,和pusai导数phi的初值,接下来用龙阁库塔方法解微分方程,判断pusai末值是否为零,如果是,e就求对了,如果不是,改变e值,一个新的x的函数f就出来了,在用R-K方法求解末值,如此循环。
不知道问题讲清楚了没?
请大家尽量帮忙解决。谢谢!编译器是TC2.0,错误提示是float point error,overflow!
[ 本帖最后由 luming1377 于 2010-6-3 12:45 编辑 ]