cbufeng 发表于 2010-8-2 08:39

这个不等式方程组应该怎么解!

已知,x1,y1;x2,y2;x3,y3;r1,r2,r3;求x,y;
这个不等式方程组应该怎么解?
用什么MATLAB函数?

ChaChing 发表于 2010-8-2 22:54

第一/二式各表示一个圆! 两个圆有四种可能, 无交点, 一点, 两点, 无限点
判断条件为(x1,y1)与(x2,y2)的距离, d^2=(x1-x2)^2+(y1-y2)^2, 与r1/r2的关系, 分别如下
1) d>r1+r2 or d<abs(r1-r2) => 无交点 => 无解
2) d=r1+r2 or d=abs(r1-r2) => 一点
3) abs(r1-r2)<d<r1+r2 => 两点
4) d=0 and r1=r2 => 无限点
若有解(有交点), 再判断第三式是否成立即可

还有matlab应该不会有现成的函数:@)

[ 本帖最后由 ChaChing 于 2010-8-2 22:56 编辑 ]

cbufeng 发表于 2010-8-3 10:35

回复 沙发 ChaChing 的帖子

谢谢ChaChing哥提示,我就想把第三种情况解除来!
这其实也是我另个帖子说的多圆交点问题。
手算感觉太复杂啦,想用MATLAB解,但是刚接触MATLAB不久,感觉有点无从下手!

ChaChing 发表于 2010-8-3 22:57

syms x y
x1=-3; y1=0; r1=5; x2=3; y2=0; r2=5;
ff1=(x1-x)^2+(y1-y)^2-r1^2; ff2=(x2-x)^2+(y2-y)^2-r2^2;
aa=solve(ff1,ff2); xx=double(aa.x); yy=double(aa.y);
ezplot(ff1,[-10,10,-8,8]); hold on; ezplot(ff2,[-10,10,-8,8]); title('')
plot(xx,yy,'ro'); grid on; axis equal

cbufeng 发表于 2010-8-4 09:07

回复 地板 ChaChing 的帖子

Thank you! :@)让您费心啦~!
不知道,如果x1,y1,r1,x2,y2,r2都是符号量,是否也能接出x,y?

ChaChing 发表于 2010-8-4 11:06

回复 5楼 cbufeng 的帖子

个人也不确定? 楼主先试试看吧! 我也是得试!:@)

alljoyland 发表于 2010-8-4 23:21

回复 楼主 cbufeng 的帖子

理论上应该是可以求得的, 两方程,两未知数, 第三个方程只要判断就可以了.
> assume(x1,constant,y1,constant,r1,constant,x2,constant,y2,constant,r2,constant);
> solve({(x1-x)^2+(y1-y)^2-r1^2,(x2-x)^2+(y2-y)^2-r2^2},{x,y});
可以得到符号解,但是事实上恐怕要给出具体的值才能求得,符号解直接会有Rootof函数,参看allvalues.
结果太长,不贴全了,第三式子,直接与0比较即可
3
代码如下
> x1:=10;
> y1:=10;
> x2:=20;
> y2:=20;
> r1:=20;
> r2:=20;
> solve({(x1-x)^2+(y1-y)^2-r1^2,(x2-x)^2+(y2-y)^2-r2^2},{x,y});
                               x1 := 10
                               y1 := 10
                               x2 := 20
                               y2 := 20
                               r1 := 20
                               r2 := 20
                           2
{y = 5 RootOf(2 - 6 _Z + _Z , label = _L1),
                                       2
      x = 30 - 5 RootOf(2 - 6 _Z + _Z , label = _L1)}
> allvalues(%);
               1/2            1/2
{y = 15 + 5 7   , x = 15 - 5 7   },
                     1/2            1/2
      {x = 15 + 5 7   , y = 15 - 5 7   }
> xy := %;
                     1/2            1/2
xy := {y = 15 + 5 7   , x = 15 - 5 7   },
                     1/2            1/2
      {x = 15 + 5 7   , y = 15 - 5 7   }
> xy;
                               1/2            1/2
                  {y = 15 + 5 7   , x = 15 - 5 7   }
> xy;
                                       1/2
                           y = 15 + 5 7
> x:=rhs(xy);
                                        1/2
                           x := 15 + 5 7
> y:=rhs(xy);
                                        1/2
                           y := 15 - 5 7
> r3:=20;
                               r3 := 20
> x3:=15;
                               x3 := 15
> y3:=15;
                               y3 := 15
> is(((x3-x)^2+(y3-y)^2)<=r3^2);
                                 true
>

[ 本帖最后由 alljoyland 于 2010-8-4 23:47 编辑 ]

cbufeng 发表于 2010-8-5 10:46

回复 7楼 alljoyland 的帖子

谢谢大哥!:handshake
不过我MATLAB,里怎么不识别assume, allvalues,RootOf。版本不一样吗!我的是7.1.0的。帮助里也没有这些函数!

alljoyland 发表于 2010-8-7 17:45

回复 8楼 cbufeng 的帖子

mhelp才可以看到,你用maple("");就可以了
页: [1]
查看完整版本: 这个不等式方程组应该怎么解!