在matlab中寻找曲线上离原点距离最近的点的坐标的思考

syms y
x=linspace(-2,2,200)
n=length(x)
g=[];        
for i=1:n
    a=x(i);
    t=vpa(solve(y/(1+a^2+y^2)-sin(a+cos(y)),y),3);
    g=[g t];
end

对于这个代码主要是想算出对应x的y,因为直接用get函数得到的x和y是按照顺序先后排列而不是一一对应。下面那个代码得出的结果是错误的。

syms x y
f=y/(x^2+y^2+1)-sin(x+cos(y))
ezplot(f,[-2 2],[-2 2])
h=get(gca,'Children');
x=get(h,'xdata');
y=get(h,'ydata');
c=x.^2+y^2;%解离原点距离   *这边如果y不转置根本运行不了*
n=find(c==min(c));%找最短
x(n)%结果
y(n)

但是可以用第二个 代码的find去做。
求min(x^2+y^2)
方程在实数区域没有根,可能在虚数区域是有根的

F =  @(y)y/(1+a^2+y^2)-sin(a+cos(y));
syms yr yi
H = F(yr+yi*1i);
HH = matlabFunction([real(H),imag(H)],'vars',{[yr,yi]});
fsolve(HH,[-.2,1.2])

这个就将根的形式写成复数的形式。
fsolve函数主要通过迭代法求根的,如果你给的是复数形式,那么就有可能得到复数形式的根

clear all;clc
syms x y

c=[];
for y=linspace(-2,2,200)
c=[c solve(y/(1+x^2+y^2)-sin(x+cos(y)),x)];
end
y=linspace(-2,2,200);x=c;

d=[x' y' (y.^2+x.^2)'];
d=double(d);
[i j]=find(d==min(d(:,3)));
d(i,:)
gg=d(i,3);
cc=sqrt(gg);
h=ezplot('y/(1+x^2+y^2)-sin(x+cos(y))',1000);
hold on;
rectangle('Position',[-cc,-cc,2*cc,2*cc],'Curvature',[1,1]),axis equal
hold on;
aa=ones(size(x))*0;
plot(x,aa);
hold on;
bb=ones(size(y))*0;
plot(bb,y);
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值