问题补充说明: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 求解
1234567891可县些弱011121314151617181920212223242526272829303132333香宁雷木构杨唱称粉43536373来自8394041424344454647484950%你这种方式画分段函数是新手常犯的错误,注意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 = li360问答nspace(1,2,30);y2 = x2.^2;plo风t(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 = x1;y2 = x2.^2;p率块草lot(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 = zero(size(x));for fi = 1:size(x,2) y(fi) = myfun(x(fi)); %myfun为自己定义的分段函数endplot(x,y)%myfun函数清星信杂皇单如下function y = myfun(x)if x >= 0 & x <= 1 y = x;else y = x^2;endend
以上基本就是matlab中所有画分倍太设杨布的拿永青段函数的方法,其中强烈推荐方法二,但是当分段较多时,这种方法不是很直观。当分段较多时,推荐使用方法三,分别将符合各段的自变量提出,然后分别求出y。进行绘图。当分段不是不多也不少时,推荐使用方法一分段定义x,然后求出y绘图。均为个人经验总结。
你这道题使用方法二解法如下:
123456789%%clearclcx = -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 11 4 2 5 19x-y图如下:
可以看出当分段较多时,该方法虽然运算较快,但不是很直观。这时可以考虑使用方法四,即for循环校段的方式,分别求出y,然后绘图,这里不再演示了。
标签:matlab,程序