matlab表示省略的数,使用matlab表示“段数不确定”的分段函数

示例函数:

A173527925-107510.gif

分段函数f(x)的段数为数组a的长度,在表达f(x)时,不能直接使用a的长度5.

方法1:

先计算每个间隔点的函数值f(a2),f(a3),f(a4),再循环表示f(x)。

f(x) = (2x+1).*(x>2&&x<=4)

+(f(4)+2x^2+2).*(x>4&&x<=6)

+(f(6)+2x^3+3).*(x>6&&x<=8)

+(f(8)+2x^4+4).*(x>8&&x<=10)

因为每段中的表达式有一定的规律,所以可以用循环进行表示。

代码如下:

function y =f(x)

y = 0;

a = [2 4 6 8 10];

% gap vector is used to store f(a1),f(a2),...,f(a5)

gap = zeros(size(a));

for i = 2:length(a)

gap(i) = 2*(a(i)^(i-1))+(i-1);

end

for i = 2:length(a)

gap(i) = gap(i) + gap(i - 1);

end

% The representation of piecewise function

for i = 1:length(a)-1

y = y + (gap(i) + 2*(x^i)+i).*(x>a(i)&&x<=a(i+1));

end

方法2:

同方法1,先计算间隔点函数值f(a2),f(a3),f(a4),再使用插值函数判断输入的自变量x位于哪个区间,进而使用该区间上的表达式。

代码如下:

function y = f(x)

a = [2 4 6 8 10];

% 计算每个区间的基数f(a2),f(a3),f(a4)

gap=zeros(size(a));

gap(1)=0;gap(end)=nan;

for i=2:length(a)-1

gap(i)=gap(i-1)+2*a(i)^(i-1)+(i-1);

end

%使用插值函数计算x落在哪个区间上,num表示段数。

num=interp1(a,1:length(a),x);

num=ceil(num)-1;

num(isnan(num))=length(a); %处理超过数组a范围的值

num(num==0)=1; %处理第一个x = a(1)

%计算函数值,每个分段上的基数加上该分段上的变量

y=gap(num)+2*x.^num+num;

方法3:

同方法2,但不使用插值函数,使用Find函数判断输入的自变量x位于哪个区间

代码如下:

function y = f(x)

a = [2 4 6 8 10];

% 计算每个区间的基数f(a2),f(a3),f(a4)

gap=zeros(size(a));

gap(1)=0;gap(end)=nan;

for i=2:length(a)-1

gap(i)=gap(i-1)+2*a(i)^(i-1)+(i-1);

end

%使用find函数计算x落在哪个区间上,num表示段数。

num=find(sort([a x]) == x);

num=num(1)-1; % 当a中某元素与x相同时,取第一个。

num(isnan(num))=length(a); %处理超过数组a范围的值

num(num==0)=1; %处理第一个x = a(1)

%计算函数值,每个分段上的基数加上该分段上的变量

y=gap(num)+2*x.^num+num;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值