matlab程序
的有关信息介绍如下:问题补充说明:clearx=-5:2:5;if x<0&x~=-3y=x.^3-x.*5;elseif x>0&x<5&x~=2&x~=3y=x.^2-x.*5+6;elsey=x.^2-x-1;endy为什么这个代码执行算出的y都是y=x.^2-x-1 求解
12345678910111213141516171819202122232425262728293031323334353637383940414243444来自54647484950%你这种方式画分段函数是新手常犯的错误,注意x<a,这种形式不是一个一个对x元素判断的。%如果x是一个矩阵失副简冲植(向量),那么x<a,会返回一个同维0,1矩阵,其中满足条件的元素为1.%而if x < a 除非返回矩阵中的元素全为一,爱否成吸提马造否则结果不会为真,这也就是你肯定执行%else的原因%下面我以0<=x<=1,y=x,1<=x<=2,y=x^2为例画分段函数友力罪理哪或稳战,你对应着改就行clearclc%方法一,分段分别画,然后用hold on将图像保持在同一个axes中%保持在同一个坐标轴中还可以用set(gca,'Nextplot','Add')命令x1 = linspace(0,1,30);y1 = x1;x2 = linspace(1,2,30);y2 = x2.^2;plot(360问答x1,y1)hold on%或者% set(gca,'Nextplot','Add')plot(x2,y2)%方法二,巧用判断条件x = linspace(0空支沙华留础,2,60);y = x.*(x>=0).门额精久*(x<=1) + x.^2.*(x>1)质论但头拉功得.*(x<=2);plot(x,y)%方法三,使用矩结搞磁评首树想酒好阵索引x = linspace(0,2,60);x1 = x(x>=0&x<=1);x2 = x(x>=1&x<=2);y1 = x妒约改酸维供象1;y2 = x2.^2;plot(x1,y1)set(gca,'Nextplot','Add');plot(x2,y2)%注意这时第一个线段最后一个元素和第二个线段第一个元素没连在一起,如果需要连%使用如下语句line([x1(end) x2(1)],[y1(end) y2(1)])%方法四,将原分段函数编为一个m函数,然后使用for循环求出函数值,最后画图%这种方法虽然易懂,但速度慢不推荐x = linspace(0,2,60);y = zer利明突广解算兵o(size(x));for fi = 1:size(x,2) y(fi) = myfun(x(fi)); %myfun为自己定义的分段函数endplot(x,y)%myfun函数清单如下function y = myfun(x)i否密汉经而于所几甚f x >= 0 & x <= 1 y = x;else y = x^2;endend
以上基本就是matlab中所有画分段函数的方法,其中强烈推荐方法二,但是当分段较多时,这种方法不是很直观。当分段较多时,推荐使用方法三,分别将符合各段的自变量提出,然后分别求出y。进行绘图。当分段不是不多也不少时,推荐使用方法一分段定义x,然后求出y绘图。均为个人经验总结。
你这道题使用方法二解法如下:
123456789%%clea蒸必式缺呀否析rclcx = -5:2:5;y = (x.^3-x.*5).氧八应元培汉第*(x<0).*(x~=-3) + (x.^2-x.*5+6).*(x>0).*(x<5).*(x~=2)... .死物吧乱境十议右派干*(x~=3) + (x.^2-x-1).*((x==-3)|(x==2)|(x==3)|(x==5))plot(x,y)y = -100 1结也挥味丰范活较1 4 2 5 19x-y图如下:
可以看出当分段较多时,该方法虽然运算较快,但不是很直观。这时可以考虑使用方法四,即for循环的方式,分别求出y,然后绘图,这里不再演示了。