使用matlab表示“段数不确定”的分段函数
2014-10-22 17:08
513 查看
示例函数:
分段函数f(x)的段数为数组a的长度减1,在表达f(x)时,不能直接使用a的长度5-1=4.
方法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;
参考资料:
matlab分段+递归函数的表示方法
matlab分段函数表示,分段数为变量,不是常量
相关文章推荐
- 使用传统算法进行表达式求值(数字支持科学表示法,操作符支持加减乘除乘方, 支持括号, 不支持函数)
- Matlab 函数进阶:使用匿名函数和内嵌函数处理多变量传递问题(Matlab 7.0以上)
- Matlab优化函数linprog的使用
- matlab中函数SOFM在神经网络方面的使用方法
- Matlab 中的线性规划函数使用方法
- [C++]实验四:掌握内联函数的使用、参数个数不确定的函数的设计...
- 使用Matlab的surf函数画地形时出现too many output arguments
- 数据拟合---使用自定义函数进行非线性拟合 -在Origin。matlab拟合工具箱cftool
- [MATLAB]all()函数的使用
- [转载]Matlab中使用Plot函数动态画图方法总结
- Matlab中使用varargin来实现参数可变的函数
- 使用matlab Statistical Toolbox 中Multivariate Analysis类别下的函数来做分类实验
- 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:表示请求(使用处理函数)
- matlab中fix, floor, ceil, round 函数的使用方法
- matlab 运算符函数表示
- Matlab中使用Plot函数动态画图方法总结
- Matlab中插值函数汇总和使用说明
- MATLAB基本的使用方法归纳(图像,矩阵及函数)
- 使用MATLAB在图像中选择矩形框区域的操作函数即过程
- VC6中使用不同调用规范的函数在符号文件里的表示方式