
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作图的时候也老是显示
我是新手 请各位大虾指导我下 谢谢啦 展开
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作图的时候也老是显示
我是新手 请各位大虾指导我下 谢谢啦 展开
2个回答
展开全部
对 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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的函数不支持矩阵参数。你的运算只针对普通运算,在函数内对矩阵迭代。改成这样就可以了。
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
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
返回否。其他的依次类推。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询