matlab程序

matlab程序,第1张

%你这种方式画分段函数是新手常犯的错误,注意x<a,这种形式不是一个一个对x元素判断的。

%如果x是一个矩阵(向量),那么x<a,会返回一个同维0,1矩阵,其中满足条件的元素为1.

%而if x < a 除非返回矩阵中的元素全为一,否则结果不会为真,这也就是你肯定执行

%else的原因

%下面我以0<=x<=1,y=x,1<=x<=2,y=x^2为例画分段函数,你对应着改就行

clear

clc

%方法一,分段分别画,然后用hold on将图像保持在同一个axes中

%保持在同一个坐标轴中还可以用set(gca,'Nextplot','Add')命令

x1 = linspace(0,1,30)

y1 = x1

x2 = linspace(1,2,30)

y2 = x2.^2

plot(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

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 = zero(size(x))

for fi = 1:size(x,2)

    y(fi) = myfun(x(fi))       %myfun为自己定义的分段函数

end

plot(x,y)

%myfun函数清单如下

function y = myfun(x)

if x >= 0 & x <= 1

    y = x

else

    y = x^2

end

end

以上基本就是matlab中所有画分段函数的方法,其中强烈推荐方法二,但是当分段较多时,这种方法不是很直观。当分段较多时,推荐使用方法三,分别将符合各段的自变量提出,然后分别求出y。进行绘图。当分段不是不多也不少时,推荐使用方法一分段定义x,然后求出y绘图。均为个人经验总结。

你这道题使用方法二解法如下:

%%

clear

clc

x = -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    19

x-y图如下:

可以看出当分段较多时,该方法虽然运算较快,但不是很直观。这时可以考虑使用方法四,即for循环的方式,分别求出y,然后绘图,这里不再演示了。

在matlab下的workspace里打comtool,点file-open project将我们先前建好的comtest.cbl工程文件打开,再点component--package component就实现了打包,此时到comtest/distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的_install.bat就可以实现安装


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7891623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存