www.gusucode.com > 高等数学问题求解源码程序 > CH14/HomogenDE.m

    function varargout=HomogenDE(fun,coef,t)
%HOMOGENDE   齐次或可化为齐次方程的求解
% L=HOMOGENDE(FUN,COEF)  求微分方程dY/dX=FUN((a*x+b*y+c)/(a1*x+b1*y+c1))的通解
% L=HOMOGENDE(FUN,COEF,T)  求可化为齐次方程的通解,并指定FUN的自变量为T
% [L,S]=L=HOMOGENDE(...)  求可化为齐次方程的通解并返回其解的字符串形式
%
% 输入参数:
%     ---FUN:关于(a*x+b*y+c)/(a1*x+b1*y+c1)的函数
%     ---COEF:系数矩阵[a,b,c;a1,b1,c1]
%     ---T:函数FUN的自变量
% 输出参数:
%     ---L:微分方程的通解
%     ---S:微分方程解的字符串表示
%
% See also SeparableVarsDE

if nargin==2
    t=symvar(fun);
end
if length(t)>1
    error('符号变量个数有误.')
end
syms x y
D=det(coef(:,1:2));
if D==0
    v=sym('v','real');
    L=coef(2,1)/coef(1,1);
    fun=subs(fun,t,(v+coef(1,3))/(L*v+coef(2,3)));
    I=SeparableVarsDE(sym(coef(1,2)),1/(fun+coef(1,1)/coef(1,2)),x,v);
    yy=subs(I,v,coef(1,1)*x+coef(1,2)*y);
else
    u=sym('u','real');
    X=sym('X','real');
    Y=sym('Y','real');
    x0=-coef(:,1:2)\coef(:,3);
    fun=subs(fun,t,(coef(1,1)+coef(1,2)*u)/(coef(2,1)+coef(2,2)*u));
    I=SeparableVarsDE(1/X,1/(fun-u),X,u);
    I=subs(I,u,Y/X);
    yy=subs(I,{X,Y},{x-x0(1),y-x0(2)});
end
varargout{1}=yy;
if nargout==2
    varargout{2}=['Solution:',char(yy)];
end
web -broswer http://www.ilovematlab.cn/forum-221-1.html