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

我写的代码
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作图的时候也老是显示

我是新手 请各位大虾指导我下 谢谢啦

第1个回答  2012-09-15

对 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

第2个回答  2012-09-15
因为你的函数不支持矩阵参数。你的运算只针对普通运算,在函数内对矩阵迭代。改成这样就可以了。
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
返回否。其他的依次类推。

本回答被网友采纳

matlab分段函数的问题(初学者)
对 if 语句的条件,如果是一个向量,则必须所有元素非零才为真。所以,if t<0,为假,不执行 elseif t<=8,为假,不执行 elseif t<=16,,为真,执行该部分代码,即 v=624-5*t 这就是你得到图中结果的原因。

怎样求matlab中分段函数的函数值?
如果函数只分了两段的话可以用switch模块,如果分三段的话可以用if模块,但是使用if模块的时候需要跟merge模块以及If Action Subsystem模块结合,还有一种方式就是用matlab fcn模块,如图所示:例子:已知函数f(x)= 求f(3)的值。解:由3∈(-∞,6),知f(3)=f(3+2)=f(5),又5∈(-∞,6...

matlab画分段函数?
1、由于x值不明确,所以无法用分段函数求出Br值;2、设置afa为数组,好像是没有理由的,我认为afa应该是一个数 3、输出sum(Br)值,应储存到BBB数组里,而不是赋值给BBB变量(因为最后显示只有一个数)修改代码后,可以得到如下图形。

请教各位怎样用matlab定义一个分段函数
在MATLAB中定义一个分段函数的关键是明确其表达式并划分各个区间。首先,确定函数的x取值范围,例如0到3,这是分段函数的基础。接下来,对于y值的计算,我们需要为每个区间定义特定的函数表达式。这些表达式会乘以x在该区间内的逻辑值(1表示在范围内,0表示不在),确保按照区间划分进行计算。具体步骤如下...

matlab分段函数画不出图
错误原因在于:你写的function y=f(x)只对x为单个数值才有效,而你画图时x=-100:100是一个矩阵,所以出现提示的错误。修改方法为修改function y=f(x),应该把x当成数组,然后用循环的方法,进行上面的分段判断,这个比较初级,就交给你自己写了。这里提供一种体现matlab运算的方法,直接将y=f(x)...

matlab分段函数怎么编写
1、首先在电脑桌面上打开MATLAB软件。2、然后点击matlab软件左上方的新建按钮,建立一个脚本文件。3、定义变量:a1=1.5;a2=2.5;X=0:0.001:5 4、建立循环,求解分段函数。5、采用piot(x,y)指令画图。6、展示最终的分段函数效果。

matlab分段微分方程组求解
用matlab求解分段微分方程组,可以这样来考虑。1、建立分段函数,ode_fun1(t,y);ode_fun2(t,y);ode_fun3(t,y)2、分三次用ode45求解,其【t,x,y】的数值[t1,y1]=ode45(@ode_fun1,tspan,X0)[t2,y2]=ode45(@ode_fun2,tspan,X0)[t3,y3]=ode45(@ode_fun3,tspan,X0)3、最后用...

关于matlab定义分段函数的一个简单问题
我觉得应该这样:function Y=danbianzhishu(X)n=length(X);Y=[];for i=1:n if X(i)>0 Y=[Y,exp(X(i))];else Y=[Y,0];end end 你写的程序,对于单个数值应该是正确的,输入参数如果是向量的话,是会错误的

matlab分段函数表达的问题
for i=1:lenif x4(i)>=103.104&x4(i)<149.266;y4(i)=-0.0009*(x4(i)-103.104).^2-0.2886*(x4(i)-103.104)+50;elseif x4(i)>=149.266&x4(i)<197.62;y4(i)=0.0017*(x4(i)-149.266).^2-0.2532*(x4(i)-149.266)+36.5873;elseif x4(i)>=197.62&x4(i)...

关于matlab的几道简单的问题
1, 这是个分段函数:function y=f(x)if x<=1 y=x;elseif x<10 y=2*x-1;else y=3*x;end return;然后对于任意x值,只要输入f(x),例如求x=5时,命令行输入 >>f(5)ans= 9 2 sum=0;for n=1:30 sum=sum+factorial(n)3,这个不用for循环也可以算的:x=100:200;m=isprime(x...

相似回答