| 查看: 541 | 回复: 4 | |||
| 当前主题已经存档。 | |||
gengbiaolu铜虫 (正式写手)
|
[交流]
【求助】我现在有一个C++的程序,但是我看不懂,求一高人帮我将它转成Matlab程序。 已有4人参与
|
||
|
我现在有一个C++的程序,但是我看不懂,求一高人帮我将它转成Matlab程序。 /*********************************************************** * 薛订鄂方程数值模拟 * * 2009.10.25 * ***********************************************************/ #include #include #include #include #include #include #include using namespace std; #define pi 3.1415926 /*----------* | 常量定义 | *-----------*/ const double A=0.02; //振幅---自己根据情况定 const int L=60; //格子长度---自己根据情况定 const double beita=1.0; //特征非线性因子---自己根据情况定 const double C=1.0; const double Lamada=1.6*C; //Lamada与C的关系---自己根据情况定 const int n=L; //Total Lattice site numbers const double dt=1.0e-3; //时间步长选取(不清楚是无量纲还是有量纲)---自己根据情况定 const double eps=1.0e-5; //判断达到近似稳定条件--上下两层误差范围 /*------------* | 子函数声明 | *-------------*/ void initialization1(double *a,int n,double number0); /*--------* | 主函数 | *---------*/ void main() {//0 int i,j; ofstream result("psi-norm1.txt" ; //psi-1范数随n变化输出文件double *E; //格子点处能量赋值---自己根据情况定 E=new double[n]; for(i=0;i // E=(4.0/(n-1))*i-2.0; // E=1.0; E=beita+Lamada*cos(2.0*pi*(i-29)*0.5*(sqrt(5.0)+1)); } double *a,*b; //psi-实部和虚部变量分别声称 a=new double[n]; //指针动态申请 b=new double[n]; initialization1(a,n,0.006); //变量初始化-也为0时刻初始值---自己根据情况定 initialization1(b,n,0.006); double *psi2; //psi-2范数变量声称 psi2=new double[n]; initialization1(psi2,n,0.0); double T=1.0e+10; //时间限制 double time=0.0; //开始计时 int num=0; //推进步数 while(time num=num+1; time=time+dt; double *Da,*Db; //改进Euler法中求f(xn,yn) Da=new double[n]; Db=new double[n]; initialization1(Da,n,0.0); initialization1(Db,n,0.0); double *az,*bz; //改进Euler法中求y(n+1)-中间过渡量 az=new double[n]; bz=new double[n]; initialization1(az,n,0.0); initialization1(bz,n,0.0); double *Daz,*Dbz; //改进Euler法中求f(x(n+1),y(n+1)) Daz=new double[n]; Dbz=new double[n]; initialization1(Daz,n,0.0); initialization1(Dbz,n,0.0); for(i=1;i Da=Da+E*b+beita*psi2*b+b[i+1]+b[i-1]; //文献1离散方式 Db=Db-E*a-beita*psi2*a-a[i+1]-a[i-1]; // Da=Da-E*b-C*(b[i+1]+b[i-1]); //文献2离散方式 // Db=Db+E*a+C*(a[i+1]+a[i-1]); az=a+dt*Da; bz=b+dt*Db; }//2 // az[0]=2.0*A+bz[1]; //文献1边界条件处理---自己根据情况定 az[0]=bz[1]; //自己给定边界条件 bz[0]=-az[1]; az[n-1]=bz[n-2]; bz[n-1]=-az[n-2]; for(i=1;i psi2=az*az+bz*bz; Daz=Daz+E*bz+beita*psi2*bz+bz[i+1]+bz[i-1]; Dbz=Dbz-E*az-beita*psi2*az-az[i+1]-az[i-1]; // Daz=Daz-E*bz-C*(bz[i+1]+bz[i-1]); //文献2离散方式 // Dbz=Dbz+E*az+C*(az[i+1]+az[i-1]); }//2 double *aaz,*bbz; //物理量更新时中间传值变量声称 aaz=new double[n]; bbz=new double[n]; initialization1(aaz,n,0.0); initialization1(bbz,n,0.0); for(i=1;i aaz=a+0.5*dt*(Da+Daz); bbz=b+0.5*dt*(Db+Dbz); }//2 // aaz[0]=2.0*A+bbz[1]; //文献1边界条件处理---自己根据情况定 aaz[0]=bbz[1]; //自己给定边界条件 bbz[0]=-aaz[1]; aaz[n-1]=bbz[n-2]; bbz[n-1]=-aaz[n-2]; double error=0.0; //求下一时刻与上一时刻物理量绝对误差 for(i=0;i error=error+sqrt((aaz-a)*(aaz-a)+(bbz-b)*(bbz-b)); } for(i=0;i a=aaz; b=bbz; } for(i=0;i delete[] Da;delete[] Db; //指针删除 delete[] az;delete[] bz; delete[] Daz;delete[] Dbz; delete[] aaz;delete[] bbz; cout<<"推进步数为"< if(num%10000==0) //每隔10000步输出|PSI|n与粒子位置关系 {//2 result<<"zone f=point"< result< }//2 if(error<=eps||num%20000000==0) //达到近似稳定状态或运行到2000万步后结果输出、程序运行结束 {//2 result<<"zone f=point"< result< cout<<"达到近似稳定后需要推进步数为-------"< }//2 }//1 }//0 /*------------* | 子函数定义 | *-------------*/ //赋初始值 void initialization1(double *a,int n,double number0) { int i; for(i=0;i } |
» 猜你喜欢
论文终于录用啦!满足毕业条件了
已经有27人回复
假如你的研究生提出不合理要求
已经有3人回复
所感
已经有3人回复
要不要辞职读博?
已经有7人回复
不自信的我
已经有11人回复
北核录用
已经有3人回复
实验室接单子
已经有3人回复
磺酰氟产物,毕不了业了!
已经有8人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有10人回复
26申博(荧光探针方向,有机合成)
已经有4人回复
mopsite
木虫 (著名写手)
- 应助: 2 (幼儿园)
- 金币: 8677.7
- 散金: 424
- 红花: 2
- 帖子: 2544
- 在线: 615小时
- 虫号: 172296
- 注册: 2006-01-19
- 专业: 传热传质学
2楼2010-04-06 09:46:27
gengbiaolu
铜虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 8.7
- 散金: 90
- 红花: 2
- 帖子: 458
- 在线: 70.2小时
- 虫号: 762835
- 注册: 2009-05-04
- 专业: 原子和分子物理
3楼2010-04-06 17:34:14
★ ★
adu886886(金币+2):辛苦了,谢谢交流 2010-04-12 08:11
gengbiaolu(金币+15):辛苦了,谢谢! 2010-04-14 08:53
adu886886(金币+2):辛苦了,谢谢交流 2010-04-12 08:11
gengbiaolu(金币+15):辛苦了,谢谢! 2010-04-14 08:53
|
代码如下: [ Last edited by anyuezhiji on 2010-4-12 at 00:43 ] |

4楼2010-04-12 00:34:25
5楼2010-04-12 12:56:58












; //psi-1范数随n变化输出文件
回复此楼