作业帮 > 综合 > 作业

为什么在matlab里面用下面的程序:x=linspace(-pi/2,pi/2,20); >> y=tan(x); >

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/27 08:02:12
为什么在matlab里面用下面的程序:x=linspace(-pi/2,pi/2,20); >> y=tan(x); >> plot(a,y)
画出来的是折线,无论x去多少点.

不知道是不是matlab自身的设置问题
原因是,tan(pi/2)对应的值是无穷大,虽然因数值计算的精度所限,不是真正的无穷大,但比起其它值大很多(几个数量级),所以中间段看起来就几乎没有区别了.应该把-pi/2和pi/2给分别微调一下,例如:

x=linspace(-pi/2+1e-2,pi/2-1e-2,200);
y=tan(x);
plot(x,y)
再问: 谢谢,但是画的图也不是很理想,和真正的tan曲线还是存在很大差距,不知道用plot函数还有其他方法吗?

再答: 之前回答的重心是告诉你画出的图效果不满意的原因,你完全也可以把x的范围再调小一些,例如 x=linspace(-pi/2+0.1,pi/2-0.1,200);y=tan(x);plot(x,y) 或者,画完图设置坐标轴的范围达到希望的效果,例如在前面的画图命令后面加上 axis(-pi/2 pi/2 -8 8]) 当然,画这类函数最简单实用的方法是用ezplot函数。其实ezplot的做法也是通过一个简单的算法来确定一个适当的坐标范围的,代码大致如下(不同版本可能有差异): ymin = u(1); ymax = u(npts); if npts > 4 del = u(fix(7*npts/8)) - u(fix(npts/8)); ymin = max(u(1)-del/8,u(fix(npts/8))-del); ymax = min(u(npts)+del/8,u(fix(7*npts/8))+del); end 其中,u是曲线的y轴数据,npts是数据点数。这种做法在多数情况下还是比较有效的,但有些情况下确定的坐标范围效果也不理想。 ezplot可以画多条曲线,但不是象plot那样的语法。一种方法是,把函数写成数组形式,例如 ezplot('[cos(x); sin(x)]',[-pi/2 pi/2]) 另一种方法是使用hold on命令,例如 ezplot('tan(x)',[-pi/2 pi/2]) hold on; ezplot('cos(x)',[-pi/2 pi/2]) 不建议使用后一种方法,其不足是:(1)各线条颜色相同,不好区分;(2)坐标范围根据最新一个ezplot命令确定,效果往往不理想。
再问: 谢谢。。。