matlab 圆和直线的交点,用matlab求直线和椭圆的交点坐标!

我的2009的,我是过2011的返回的也是和你一样的

不过这两种表达式应该是一样的

我分别代过数值去检验,得到的结果是一样的

但是我找不到办法用matlab将你得到的表达式转变成我得到的

不过查了一下资料,用手推算应该可以证明两者是一样的

以下是我查到最有用的一段

log函数在实数域中不能对负数和零进行计算,

MATLAB中的log函数则可以接受负数输入,并将其作为复数进行处理。

而log(0)返回-inf

对于复数元素x+i*y,其自然对数等于log(abs(x+i*y))+i*atan2(y,x)。

也就是说复数x+i*y的自然对数得到的结果是:

实部是原复数的模的自然对数,虚部是原来的幅角

所以用复数域定义的自然对数log,是可以表示atan2的

可能是这样,所以新版本的matlab对符号运算优化了一下

求角度应该atan2的,但是atan2不能用于符号运算,所以旧版本就无能为力

而新版本用log函数表示,就解决了这个问题

我版本的atan((b*kx + a*ky*tan(t0/2))/(a*ky - b*kx*tan(t0/2)))写为atan2

atan2(b*kx + a*ky*tan(t0/2) ,a*ky - b*kx*tan(t0/2));

让b*kx + a*ky*tan(t0/2)=Y,a*ky - b*kx*tan(t0/2)=X,再让Z=sqrt(X^2+Y^2)

atan2(Y,X)于atan2(Y/Z,X/Z)是一致的,只是将模归一化了,那么

log((X+Y*i)/Z)= log( (X^2+Y^2)/Z^2)+i*atan2(Y/Z,X/Z)

=log(1)+i*atan2(Y/Z,X/Z)=0+i*atan2(Y/Z,X/Z)=i*atan2(Y,X)

所以atan2(Y,X)=-i*log((X+Y*i)/Z)

也就是atan2可以由模归一化后的X+Yi的自然对数乘以-i获得

另一方面可以通过将tan化为cos/sin 而cos和sin函数又可以通过欧拉公式exp函数表示

最终tan(t0/2)可以化为用exp(i*t0)表示

tan(t0/2)=(i - i*exp(i*t0))/(exp(i*t0) + 1)

篇幅有限推导过程就不写了,最后这两个结果应该是等价的

考虑到atan没有像给出atan2那样正确的结果,

所以新版本给的用log表示的结果应该更不会有问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值