一阶微分方程

常数变易法

考虑以下一阶线性微分方程

dydx=P(x)y+Q(x)

先解齐次方程

dydx=P(x)ydyy=P(x)dxlny=P1(x)+Cy=Cexp(P1(x))

其中

P1(x)=P(x)dx

根据常数变易法,对于原非齐次方程有

y=C(x)exp(P1(x))

即将 C 改为关于 x 的函数 C(x)

y 代回原方程即可解出 C(x)

这个方法可以拓展到非线性微分方程。

P6613

考虑以下方程

dF(x)dxA(x)eF(x)1+B(x)(modxn)

y=F(x),先解齐次方程

dydx=A(x)exp(y1)dyexp(y1)=A(x)dxexp(1y)dy=A(x)dxexp(1y)=A1(x)Cexp(1y)=CA1(x)1y=ln(CA1(x))y=1ln(CA1(x))y=1+ln1CA1(x)

其中

A1(x)=A(x)dx

根据常数变易法,对于原非齐次方程有

y=1ln(C(x)A1(x))y=1+ln1C(x)A1(x)

代回原方程

dydx=A(x)exp(y1)+B(x)C(x)A(x)C(x)A1(x)=A(x)C(x)A1(x)+B(x)C(x)C(x)A1(x)=B(x)C(x)=B(x)C(x)+A1(x)B(x)

z=C(x)

z=B(x)z+A1(x)B(x)

解此方程,求出通解

z=C1(x)exp(B1(x))

其中

B1(x)=B(x)dx

代入得

z=B(x)z+A1(x)B(x)C1(x)exp(B1(x))C1(x)exp(B1(x))B(x)=B(x)C1(x)exp(B1(x))+A1(x)B(x)C1(x)exp(B1(x))=A1(x)B(x)C1(x)=A1(x)B(x)exp(B1(x))dx+C

继续回代

C(x)=(A1(x)B(x)exp(B1(x))dx+C)exp(B1(x))

F(x)=1ln((A1(x)B(x)exp(B1(x))dx+C)exp(B1(x))A1(x))=1+B1(x)ln(A1(x)B(x)exp(B1(x))dxA1(x)exp(B1(x))+C)

x=0F(x)=1,故取 C=1

注意到

B(x)exp(B1(x))=exp(B1(x))

以及

A1(x)exp(B1(x))=(A1(x)exp(B1(x)))A(x)exp(B1(x))

所以

F(x)=1+B1(x)ln(1A(x)exp(B1(x))dx)

直接计算即可。

Code

int main(){
	int n;
	scanf("%d",&n);
	n++;
	for(int i=0;i<=n-1;i++){
		scanf("%llu",&a[i]);
	}
	for(int i=0;i<=n-1;i++){
		scanf("%llu",&b[i]);
		b1[i]=b[i];
	}
	inv[1]=1;
	for(int i=2;i<=n;i++){
		inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
	}
	ITG(b1,n);
	EXP(b1,c,n);
	CPY(ans,b1,n);
	ans[0]=(ans[0]+1)%mod;
	CLR(b1,n);
	MUL(a,c,n<<1);
	CLR(a+n,n);
	ITG(a,n);
	a[0]=(1-a[0]+mod)%mod;
	for(int i=1;i<=n-1;i++){
		a[i]=(mod-a[i])%mod;
	}
	LN(a,c,n);
	DEC(ans,c,n);
	for(int i=0;i<=n-1;i++){
		printf("%llu ",ans[i]);
	}
}
posted @   zhicheng123  阅读(101)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示