标题:求助,关于一道解一维薛定谔方程的错误。
只看楼主
luming1377
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-3-11
 问题点数:0 回复次数:0 
求助,关于一道解一维薛定谔方程的错误。
请大家看看为什么错了,并告诉在下怎么改正。万分感谢。
#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 编辑 ]
搜索更多相关主题的帖子: double search include return 薛定谔 
2010-06-02 00:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-308986-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047725 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved