matlab分段函数的表达_Matlab入门3-计算分段函数的值

Matlab变量的一个核心思想就是绝大多数时候数据都是由矩阵来存储的,所以输入常常也考虑为向量而不仅仅是一个数。包括在找满足条件的数的时候,我们通常也是用一个向量储存(也就是数组,但表示方式有些许差异)然后把数据放到向量里,向量长度也自然扩张了。

Matlab中的函数如果传入的是向量,返回的多半是一个值,如果传入的是矩阵,返回的多半是列满足条件的值组成的行向量。

今日简单题:编写一个函数能够计算下列分段函数在多个节点的函数值:

Matlab的简单绘图所需知识:

a.如何写一个函数(包括输入参数输出、参数表示等)。b.表示分段函数的三种方式(注意本题的要求)。c.选择分支的表示方法。

事先需要准备的:创建函数文件并将其命名为与主函数完全相同的名字(否则运行不了)

我们给出两种解答(inline函数不介绍,后来版本被移除),借此引出一般函数表示:

functions=myfunction(x)%主函数,推荐创立函数文件而不是脚本文件

s=zeros(size(x)); %生成一个与x同型的0向量

for i=1:length(x) %循环体的使用

s(i)=mycal(x(i)); %x(i)是引用第i个元素

end

functionr=mycal(x)%子函数,已知节点x,计算分段函数值

if x<=-1

r=(x-1)^2; %不用点乘的原因?

elseif x<1

r=x^2;

else

r=(x+1)^2;

end

第二种:

f=@(x)((x<=-1).*((x-1).^2)+(x>-1&&x<1).*(x.^2)+(x>1).*((x+1).^2));

%匿名函数,一般放在脚本文件中或者命令行窗口里。

我们先从函数框架入手:

1.语法一:function [输出参数列表]=函数名[输入参数列表](参数用逗号分离)

例如:function [y,z]=myfunction(x)%这里x就是输入参数,y和z就是输出的参数(若无global声明,x、y、z为局部变量)。

注意:命名:保存参数名的文件命名要与函数名相同,否则以文件名为函数名来调用;函数名不能与已经存在的函数重名,用doc检查自己命名的函数是否存在;如果在脚本文件中定义函数(R2016b以后的版本可以做到),那么脚本文件不能与函数名相同;

子函数:函数文件可以包含一个以上的函数。除了第一个函数之外的函数都叫做子函数,子函数只能被同一个函数文件中的函数调用。

关于关键字end:建议无论何时都在函数末尾加上end。

2.语法二:匿名函数,f=@(参数列表)(函数表达式)

例如:f=@(x)(x^2)

注意:应用场景:匿名函数通常在脚本文件中或命令行中被创建,由于形式简单便于构建绘图中的函数,或者复合函数,或者微积分的计算

然后是一些基础函数使用:

3.创建全零数组:zeros

基本语法:zeros(n)、zeros(size(x))、zeros(m,n)zeros(n)%返回一个n×n的全零矩阵

zeros(size(x))%返回一个由零组成的数组,大小与x相同

zeros(m,n)%返回一个m×n的全零矩阵,可指定零数据类型,例如zeros(1,3,'uint32')指定元素为32位无符号型整数。

4.数组大小:size

基本语法:sz=size(A)、szdim=size(A,dim)、[m,n]=size(A)size(A)%返回一个行向量,元素包含A的相应维度的长度,例如二维数组就返回[行数,列数],这也就解释了上例中zero(size(A))的用法;加dim也就是指定维度返回长度了。

5.选择、循环、分支等结构简述

语法:if 条件1 语句1 //elseif 条件2 语句2//else 条件3 语句3// end %elseif无空格分离。值得一提的是error(引发错误并显示错误消息):基本语法:error(msg)%例如error('error occurred');如果需要在里面使转义字符生效的话,必须要为error指定多个参数,在错误消息中包含带变量n的类的信息(由于没有引入基本变量类型,故暂时不论),通常用于if ~某个条件//error

for 循环条件(例如i=1:5) // 循环体 //end %不用大括号,有几个for就有几个end

while 逻辑表达式//语句块//end

switch 开关表达式//case 表达式1,//语句块1//case {表达式2,表达式3,...},//语句块2//otherwise,//语句块//end %注意逗号与otherwise还有end

continue、break

其余就很容易建立一个函数了。matlab有些地方其实给我的感觉怪怪的...感觉是功能太多反而容易混?不过可以随时doc查找,但自己还是得对基本的函数功能组合熟悉起来,否则用的时候会很难受。

以下再补充两个定义函数的东西:nargin、nargout,也是重点把握内容,有助于理解调用函数使用的规律。

函数输入参数数目:nargin、函数输出参数数目:nargout

共同说明:两者仅针对现在正在进行中的函数,该语法仅可在函数体内使用,返回函数调用中给定输入/输出参数数目

例子:

functionc =addme(a,b)switch nargin

case 2 %假如有两个输入,例如addme(1,2)

c = a + b;

case 1 %假如只有一个输入,例如addme(1)

c = a + a;

otherwise

c = 0;

end

end

function[dif,absdif] =subtract(y,x)dif = y-x;

if nargout > 1 %假如使用一个返回值,输出参量就只有dif,如果使用两个返回值久有absdif

disp('Calculating absolute value')%disp是显示其后内容的函数,后续在知识补全再说

absdif = abs(dif);%例如a=subtract(3,2)和[a,b]=subtract(3,2),使用参照max

end

end

如果nargin(函数名)的话返回值就是该函数可以接受的最大参数个数,同理nargout就是最大输出参量个数。

Matlab中还有一个函数piecewise可以直接创建分段函数:

命令:

syms y(x);

%这里可以用assume(x>0)来限制定义域的范围

y(x) = piecewise(x<0,1,x=0,2,x>0,3);

%接下来就可以愉快地调用piecewise了

%还可以用subs调整自变量的范围:pw=subs(pw,x

%可以借符号计算,diffpw=diff(pw,x);

参考

你可能感兴趣的:(matlab分段函数的表达)