matlab分段函数的问题(初学者)

我写的代码functionv=va(t)ift<0v=0;elseift<=8v=10*t.^2-5*t;elseift<=16v=624-5*t;elseift<=26... 我写的代码
function v=va(t)if t<0
v=0;

elseif t<=8
v=10*t.^2-5*t;
elseif t<=16
v=624-5*t;
elseif t<=26
v=36*t+12*(t-16).^2;
else
v=2136*exp(-0.1*(t-26));
end
是想写一个分段函数
但是为什么当我把变数t带进去的时候会发生

这种情况?当t小于9的时候还蛮老实的用正确的函数,但是若是t=9的时候连小于8的那些数字也跟着一起用范围9那个函数计算了? 苦恼啊 我的if语句哪里有问题?
而且我用plot作图的时候也老是显示

我是新手 请各位大虾指导我下 谢谢啦
展开
 我来答
tianxiawulang
2012-09-15 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:3190万
展开全部

对 if 语句的条件,如果是一个向量,则必须所有元素非零才为真。

所以,

  • if t<0,为假,不执行

  • elseif t<=8,为假,不执行

  • elseif t<=16,,为真,执行该部分代码,即 v=624-5*t

     

 

这就是你得到图中结果的原因。

追问
我的变量里面有1 2 3 4 5 6 7 8是属于第二个范围内也不执行运算吗?
追答
当然会执行 t> t=[1:8]'
t =
1
2
3
4
5
6
7
8
>> va(t)
ans =
5
30
75
140
225
330
455
600
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不知详解
2012-09-15 · 知道合伙人软件行家
不知详解
知道合伙人软件行家
采纳数:609 获赞数:2257
自学计算机。

向TA提问 私信TA
展开全部
因为你的函数不支持矩阵参数。你的运算只针对普通运算,在函数内对矩阵迭代。改成这样就可以了。
function [v]=va(t)
all=[]
for ind = 1:size(t)(1)
x=t(ind)
if x<0
ja=0;
elseif x<=8
ja=10*x.^2-5*x
elseif x<=16
ja=624-5*x;
elseif x<=26
ja=36*x+12*(x-16).^2;
else
ja=2136*exp(-0.1*(x-26));
end
all=[all;ja]
end
v=all
end
a=[-2:1:13]'
va(a)

------
还有你绘图命令不对哦。应该 是:
plot(a,va(a));
分别传入x 和 y 的矩阵值。
plot([1 2 3],[5 6 7],'+')
会画出3个点1,5 2,6 3,7
追问
如果按照我的思路来写这个分段方程要怎么写呢?
用那个if语句不能直接把条件给限制好吗?
追答
我没改变你的if啊。你要在函数中处理传入参数是矩阵的情况,否则条件语句有错。

t=[-1 0 1 2]
if t < 0
返回否。其他的依次类推。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式