这个不等式方程组应该怎么解!
已知,x1,y1;x2,y2;x3,y3;r1,r2,r3;求x,y;这个不等式方程组应该怎么解?
用什么MATLAB函数? 第一/二式各表示一个圆! 两个圆有四种可能, 无交点, 一点, 两点, 无限点
判断条件为(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 编辑 ]
回复 沙发 ChaChing 的帖子
谢谢ChaChing哥提示,我就想把第三种情况解除来!这其实也是我另个帖子说的多圆交点问题。
手算感觉太复杂啦,想用MATLAB解,但是刚接触MATLAB不久,感觉有点无从下手! 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
回复 地板 ChaChing 的帖子
Thank you! :@)让您费心啦~!不知道,如果x1,y1,r1,x2,y2,r2都是符号量,是否也能接出x,y?
回复 5楼 cbufeng 的帖子
个人也不确定? 楼主先试试看吧! 我也是得试!:@)回复 楼主 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 编辑 ]
回复 7楼 alljoyland 的帖子
谢谢大哥!:handshake不过我MATLAB,里怎么不识别assume, allvalues,RootOf。版本不一样吗!我的是7.1.0的。帮助里也没有这些函数!
回复 8楼 cbufeng 的帖子
mhelp才可以看到,你用maple("");就可以了
页:
[1]