声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1002|回复: 1

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

[复制链接]
发表于 2009-8-18 09:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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表达形式?
谢谢 高手帮我解决下
回复
分享到:

使用道具 举报

发表于 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
[x1,y1]=solve(ff1,ff2)
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-26 09:53 , Processed in 0.069083 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表