用matlab软件编程:求出球面上x^2+y^2+z^2=1 上与点(3,1,-1)距离最近和最远点

wfieri
2012-10-24 · TA获得超过3679个赞
知道小有建树答主
回答量:506
采纳率:50%
帮助的人:431万
展开全部
function f = myfun(x)
f=sqrt((x(1)-3)^2+(x(2)-1)^2+(x(3)+1)^2);

function [c,ceq]=conf(x)
c=0;
ceq=1-x(1)^2-x(2)^2-x(3)^2;
这两个函数分别定义在myfun.m和conf.m中
命令行输入
[x,fval]=fmincon(@myfun,[0 0 1],[],[],[],[],[],[],@conf)

求得
x =
0.9045 0.3015 -0.3015
fval =
2.3166
所以最近点坐标[0.9045 0.3015 -0.3015],距离是2.3166
最远点的话f=-sqrt((x(1)-3)^2+(x(2)-1)^2+(x(3)+1)^2);
再[x,fval]=fmincon(@myfun,[0 0 1],[],[],[],[],[],[],@conf)
求得
x =
-0.9045 -0.3015 0.3015
fval =
-4.3166
所以最远点坐标[ -0.9045 -0.3015 0.3015],距离是4.3166

满意请采纳,不懂可追问,谢谢!
李俨姜秋寒
2012-10-30 · TA获得超过3570个赞
知道大有可为答主
回答量:3138
采纳率:26%
帮助的人:216万
展开全部
过球心o(0,0,0)及点p(3,1,-1)的直线与球面的两个交点即为所求。
可用以下代码求解
syms
x
y
z
t
q1='x-3*t'
q2='y-t'
q3='z+t'
q4='x^2+y^2+z^2-1'
[x,y,z,t]=solve(q1,q2,q3,q4)
x
=
1/11*11^(1/2)
-1/11*11^(1/2)
y
=
3/11*11^(1/2)
-3/11*11^(1/2)
z
=
1/11*11^(1/2)
-1/11*11^(1/2)
dmin=sqrt((3-x(1))^2+(1-y(1))^2+(-1-z(1))^2)
dmin
=
((3-1/11*11^(1/2))^2+(1-3/11*11^(1/2))^2+(-1-1/11*11^(1/2))^2)^(1/2)
dmax=sqrt((3-x(2))^2+(1-y(2))^2+(-1-z(2))^2)
dmax
=
((3+1/11*11^(1/2))^2+(1+3/11*11^(1/2))^2+(-1+1/11*11^(1/2))^2)^(1/2)
dmax=
eval(dmax)
dmax
=
3.8749
dmin=
eval(dmin)
dmin
=
2.9975
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式