wavesea 发表于 2009-8-18 09:32

help matlab 中solve 求解二元非线性方程与subs如何结合?火急

% 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的表达式???
=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 各自都手动代入方程:      <虽然能实现求解,但是每次这样的手动复制输入很麻烦>            
=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表达形式?
谢谢 高手帮我解决下

ChaChing 发表于 2009-8-18 21:43

试了下! 但答案好像与LZ给的不同!?
syms x y
ff1=A1+B1*x+C1*y+D1*x*y
ff2=A2+B2*x+C2*y+D2*x*y
=solve(ff1,ff2)
页: [1]
查看完整版本: help matlab 中solve 求解二元非线性方程与subs如何结合?火急