用C++实现p2'
整体步骤
a=(s>=0) & (s<=1);
b=(s>1);
ps=a.*sin(2*pi*s)/(2*pi)+b.*(s-1); % compute first order derivative of the double-well potential p2 in eqaution (16)
dps=((ps~=0).*ps+(ps==0))./((s~=0).*s+(s==0)); % compute d_p(s)=p'(s)/s in equation (10). As s-->0, we have d_p(s)-->1 according to equation (18)
C++
ImageF f=(1/2/sigma)*(cos(pi*x/sigma)+1);这样是对的,把1放在后面
而ImageF f=(1/2/sigma)*(1+cos(pi*x/sigma));是错的,找不到对应的操作
原因
下面的函数
ImageF operator+(ImageF x,float s)
{
/*
数组+标量s:每个元素都加s
*/
}
是按这个顺序定义的
定义一个符号函数
ImageF regFunction(ImageF s,int m,int n)
{
//if((s>=0) && (s<=1))
return s;
}这样就可以计算
距离正则化的
ImageF distReg_p2(ImageF phi)
{
ImageF *phi_x=new ImageF();
ImageF *phi_y=new ImageF();
*phi_x=gradientx(phi);
*phi_y=gradienty(phi);
//ImageF s=ImageFSqrt(((*phi_x)*(*phi_x)) + ((*phi_y)*(*phi_y)));
ImageF s=ImageFSqrt(*phi_x,*phi_y);
ImageF a=regFunction(s,0,1);
ImageF b=regFunction(s,0,1);//此处的函数需该
ImageF ps=a*sin(2*pi*s)/(2*pi)+b*(s-1);
ImageF dps=regFunction(ps,0,0)*ps+regFunction(ps,0,0)/(regFunction(s,0,0)+regFunction(s,0,0));
ImageF f=div(dps**phi_x-*phi_x,dps**phi_y-*phi_y)+4*del2(phi);
//ImageF b=(s>1);
}
C++实现双势阱函数及其导数计算
本文详细介绍了使用C++编程语言实现双势阱函数的计算过程,并着重探讨了如何通过数学公式计算该函数的第一阶导数。同时,文章还深入解释了图像函数的正确形式与错误形式的区别,以及如何定义符号函数和计算距离正则化的图像函数。通过这些内容,读者可以更好地理解双势阱函数的性质及其在物理学和数值计算中的应用。
724

被折叠的 条评论
为什么被折叠?



