大黄菜头 2021-07-11 20:51 采纳率: 20%
浏览 584
已采纳

matlab用syms绘制分段函数,用fplot绘制不在定义域的函数曲线

使用matlab绘制函数y=1/x的曲线图,
尝试使用了syms 的方法,和fplot的方法,
面临的问题是:fplot可以绘制分段函数,可是在x=0的左右两侧会有一个线,如图所示:

img

为了解决这个办法,分别绘制了两条曲线,使用命令:
fplot(f,[-3,3,-3,3])
fplot(@(x)1/x,[-3,0,-3,3]);hold on;
fplot(@(x)1/x,[-0,3,-3,3]);
axis([-3,3,-3,3])
得到的图好看的多了。但是右上角会出现data是两条曲线,如图所示:

img

这不符合要求。于是在增加一个命令:
legend('y=1/x');
貌似把这个曲线标注给解决了,可实际上plot的原始数据依然是两个曲线。因为点击legend的图标,已然会出现两条曲线。如图:

img

所以我的问题是:使用fplot如何把两个不连续的定义域连结起来,整成一条曲线呢?也就是如何去掉不在定义域的点呢?
对于syms的方法,可以很好的把不在定义域的点去掉,但是syms怎么画分段函数呢!

  • 写回答

2条回答 默认 最新

  • CSDN专家-Matlab_Fans 2021-07-11 21:18
    关注

    解决办法:使用nan非数进行镂空

    x = linspace(-3,3,500);
    f = @(x) 1./x;
    for ii = 1:length(x)
        if  abs(x(ii))<0.03 
            x(ii) = nan;
            y(ii) = nan;
        end
    end
    plot(x,f(x))
    legend('y=1/x')
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 7月11日
  • 创建了问题 7月11日

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试