matlab分段+递归函数的表示方法

t=[1 3 5 7 9]

f(x) = 2x , t(1) < x <= t(2)
f(x) = f(t(2)) + 2x^2 , t(2) < x <= t(3)
f(x) = f(t(3)) + 2x^3 , t(3) < x <= t(4)
f(x) = f(t(4)) + 2x^4 , t(4) < x <= t(5)
分段函数的段数为向量t的长度减1,是一个变量。所以不能简单的分为4段。
该怎么用matlab编写呢?

这里不用递归,递推就可以了

先计算每个区间的基数,

例如第一个区间为0,第二个区间为f(t(2)),第三个区间为f(t(3))。。

这是可以根据关系递推的


然后,计算函数值的时候,关键是要区分其应该在哪个区间

函数入下

function f=fun(t,x) %要求t一定是递增的数列
b=zeros(size(t));
b(1)=0;b(end)=nan;
for ii=2:length(t)-1
    b(ii)=b(ii-1)+2*t(ii)^(ii-1); %计算每个区间的基数
end

num=interp1(t,1:length(t),x);  
num=ceil(num)-1;              %插值计算x划分在哪个区间
num(isnan(num))=length(t);  %处理超过t范围的值
num(num==0)=1;              %处理第一个x=t(1)
f=b(num)+2*x.^num;   %计算函数值,每个区间的基数加上变量
end

将以上内容保存为fun.m


然后在命令行输入如下的代码,看分段函数的图像

x=1:0.1:9;

y=fun([1 3 5 7 9],x);

plot(x,y);



理论上,t可以有更多的值,分更多的区间,不过要求t是单调递增的数列

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-08
乖乖,你这是无线递归啊,算不出来的。
相似回答