马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
% help matlab 中solve 求解二元非线性方程与subs如何结合?
% 已知A1,B1,C1,D1,A2,B2,C2,D2都可以用符号变量z表示 现有如下两组方程式求解未知数,x,y(也用z表示)
% A1+B1*x+C1*y+D1*x*y=0 和 A2+B2*x+C2*y+D2*x*y=0 如何联立求解x,y并如何化简最终形式
clc
clear
syms z
A1=-1./(1.-1./z); A1=vpa(A1,2)
B1=(-1.+.200/z)/(1.-1./z);B1=vpa(B1,2)
C1=-1./z/(1.-1.400/z+.400/z^2);C1=vpa(C1,2)
D1=(-1./z+1.000/z^2-.1600/z^3+1.-1./z^5)/(1.-2.200/z-.3200/z^3+1.520/z^2);D1=vpa(D1,2)
A2=(-1.300+.4000/z)/(1.-1.300/z+.4000/z^2);A2=vpa(A2,2)
B2=(-1./z^4+.200/z^5)/(1.-1.300/z+.4000/z^2);B2=vpa(B2,2)
C2=1./(1.-.400/z);C2=vpa(C2,2)
D2=1./z^4/(1.-1.200/z+.3200/z^2);D2=vpa(D2,2)
%为什么下面方程式的A1,B1,C1,D1,A2,B2,C2,D2不能自动的代替成z的表达式???
[x y]=solve('A1+B1*x+C1*y+D1*x*y=0',...
'A2+B2*x+C2*y+D2*x*y=0','x','y')
% 出现很奇怪的结果! 我想可能要用到subs 但不知道如何用?
% x =
%
% -(A2+1/2*C2/(-C1*D2+D1*C2)*(A1*D2-B1*C2+C1*B2-D1*A2+(A1^2*D2^2-2*A1*D2*B1*C2-2*A1*D2*C1*B2-2*A1*D2*D1*A2+B1^2*C2^2-2*B1*C2*C1*B2-2*B1*C2*D1*A2+C1^2*B2^2-2*C1*B2*D1*A2+D1^2*A2^2+4*C1*D2*B1*A2+4*D1*C2*A1*B2)^(1/2)))/(B2+1/2*D2/(-C1*D2+D1*C2)*(A1*D2-B1*C2+C1*B2-D1*A2+(A1^2*D2^2-2*A1*D2*B1*C2-2*A1*D2*C1*B2-2*A1*D2*D1*A2+B1^2*C2^2-2*B1*C2*C1*B2-2*B1*C2*D1*A2+C1^2*B2^2-2*C1*B2*D1*A2+D1^2*A2^2+4*C1*D2*B1*A2+4*D1*C2*A1*B2)^(1/2)))
% -(A2+1/2*C2/(-C1*D2+D1*C2)*(A1*D2-B1*C2+C1*B2-D1*A2-(A1^2*D2^2-2*A1*D2*B1*C2-2*A1*D2*C1*B2-2*A1*D2*D1*A2+B1^2*C2^2-2*B1*C2*C1*B2-2*B1*C2*D1*A2+C1^2*B2^2-2*C1*B2*D1*A2+D1^2*A2^2+4*C1*D2*B1*A2+4*D1*C2*A1*B2)^(1/2)))/(B2+1/2*D2/(-C1*D2+D1*C2)*(A1*D2-B1*C2+C1*B2-D1*A2-(A1^2*D2^2-2*A1*D2*B1*C2-2*A1*D2*C1*B2-2*A1*D2*D1*A2+B1^2*C2^2-2*B1*C2*C1*B2-2*B1*C2*D1*A2+C1^2*B2^2-2*C1*B2*D1*A2+D1^2*A2^2+4*C1*D2*B1*A2+4*D1*C2*A1*B2)^(1/2)))
%
%
%
% y =
%
% 1/2/(-C1*D2+D1*C2)*(A1*D2-B1*C2+C1*B2-D1*A2+(A1^2*D2^2-2*A1*D2*B1*C2-2*A1*D2*C1*B2-2*A1*D2*D1*A2+B1^2*C2^2-2*B1*C2*C1*B2-2*B1*C2*D1*A2+C1^2*B2^2-2*C1*B2*D1*A2+D1^2*A2^2+4*C1*D2*B1*A2+4*D1*C2*A1*B2)^(1/2))
% 1/2/(-C1*D2+D1*C2)*(A1*D2-B1*C2+C1*B2-D1*A2-(A1^2*D2^2-2*A1*D2*B1*C2-2*A1*D2*C1*B2-2*A1*D2*D1*A2+B1^2*C2^2-2*B1*C2*C1*B2-2*B1*C2*D1*A2+C1^2*B2^2-2*C1*B2*D1*A2+D1^2*A2^2+4*C1*D2*B1*A2+4*D1*C2*A1*B2)^(1/2))
%
% 那么,将A1,B1,C1,D1,A2,B2,C2,D2 各自都手动代入方程: <虽然能实现求解,但是每次这样的手动复制输入很麻烦>
[x1 y1]=solve('(-1./(1.-1./z))+((-1.+.200/z)/(1.-1./z))*x1+(-1./z/(1.-1.400/z+.400/z^2))*y1+((-1./z+1.000/z^2-.1600/z^3+1.-1./z^5)/(1.-2.200/z-.3200/z^3+1.520/z^2))*x1*y1=0',...
'((-1.300+.4000/z)/(1.-1.300/z+.4000/z^2))+((-1./z^4+.200/z^5)/(1.-1.300/z+.4000/z^2))*x1+(1./(1.-.400/z))*y1+(1./z^4/(1.-1.200/z+.3200/z^2))*x1*y1=0','x1','y1')
%可以直接得到如下结果:
% x1 =
%
% -5.*z^6/(5.*z-1.)
% 10.*z^3*(5.*z-4.)/(-8.*z^2-50.+15.*z^4+30.*z^3)
%
%
%
% y1 =
%
% .20000000000000000000000000000000*(25.*z^2-30.*z+8.)*(5.*z-1.)/(-25.*z^2+25.*z-4.+25.*z^3)
% .20000000000000000000000000000000*(65.*z^5-46.*z^4+8.*z^3-50.*z+20.)/z^3/(5.*z-4.)/(2.*z-1.)
% 如何可以得到x1,y1这种精简的z表达形式?
谢谢 高手帮我解决下 |