-
2020-06-26 21:31:45
本系列内容为《MATLAB面向对象编程–从入门到设计模式》学习笔记,特此说明。
定义类的方法
类的方法(Method)一般用来查询(Query)对象的状态,或者向对象发出一个命令(Command),比如操作对象中的数据。在MATLAB面向对象编程中,类方法的定义要放在method block中,和一般函数定义类似,方法的定义以关键词function开始,以关键词end结束。
...... methods function [returnValue]=functionName(arguments) ...... end end
若成员方法代码量比较大,可以在类定义中仅给出函数的声明,把函数实现放到一个独立的文件中。
说明:
- 这种方法需要创建一个@classname的文件夹,然后把类的定义和方法的实现都放到该文件夹中,然后在@classname的外部调用该类的构造函数。
- 某些函数不能采用这种方式,比如类的Constructor和Destructor(析构函数),以及Static方法,都必须在类的定义中实现。
调用类的方法
点调用方式:obj.memberFunction(arg1,arg2)
函数调用方式:memberFunction(obj,arg1,arg2)
点调用和函数调用类方法的区别
虽然两种方法基本等价,但仍有一些细微的区别:
- 使用点调用方式符合面向对象的风格,程序的可读性高,这是施加在对象上的一种操作。使用函数调用方式满足传统的面向过程的编程习惯,在某些情况下,兼容旧的MATLAB代码。
- 使用点调用可以清楚的表示MATLAB调用的时成员方法还是函数。
类的构造函数
构造函数(Constructor)是一种特殊的成员方法:
- Constructor和类的名称相同,用来创造类的实例。
- MATLAB类定义中只能有1个Constructor·。
- Constructor有且只能有一个返回值,且必须是新创建的对象,这是唯一创建一个新的对象的方式。
classdef Point2D < handle properties x y end methods function obj = Point2D(x0,y0) %返回值必须是一个obj obj.x=x0; obj.y=y0; end end end
>> clear classes; >> p1=Point2D(1.0,2.0); %使用构造函数创建对象
在构造函数中给属性赋值
在Constructor中也可以给对象的属性赋值。即使在property block中已经提供了默认值,Constructor中赋的新值也将取代property block中的默认值。
classdef Point2D < handle properties x=cos(pi/2); %Constructor被调用之前x的默认值 y=sin(pi/3); %Constructor被调用之前y的默认值 end methods function obj = Point2D(x0,y0) %返回值必须是一个obj obj.x=x0; %新的x0,y0将会取代初值 obj.y=y0; end end end
MATLAB在声明一个对象时的工作顺序是:先装载类的定义,然后再调用构造函数,这时属性被重新赋值。
如何让构造函数接受不同数目的参数
由于MATLAB是弱类型检查的解释性语言,不能通过函数函数重载的方式找到相匹配的函数,但是可以通过参数数目(nargin)的不同来选择不同的代码。
classdef Point2D < handle properties x=cos(pi/2); %Constructor被调用之前x的默认值 y=sin(pi/3); %Constructor被调用之前y的默认值 end methods function obj = Point2D(x0,y0) if nargin == 0 % 如果没有提供参数 obj.x=cos(pi/2); obj.y=sin(pi/3); else if nargin == 2 %如果提供了参数 obj.x=x0; obj.y=y0; end end end end
默认构造函数
默认构造函数(Default Constructor)一般性定义:不带任何参数的构造函数。
可以把默认构造函数理解成构造函数内部可以处理nargin==0的情况,并且返回新构建的对象的那部分代码。
更多相关内容 -
Matlab中类构造函数方法
2020-12-16 10:42:37目录 类构造函数方法 类构造函数方法的目的 构造函数方法的基本结构 构造函数的指导原则 默认构造函数 ...何时定义构造函数 ...初始化构造函数中的对象 ...所有 MATLAB®类都有默认的构造函数方法。此方法返回在没有输.目录
类构造函数方法
类构造函数方法的目的
构造函数方法是一个创建类实例的特殊函数。通常,构造函数方法接受输入参数来指定存储在属性中的数据,并返回初始化的对象。
所有 MATLAB® 类都有默认的构造函数方法。此方法返回在没有输入参数的情况下创建的类的对象。类可以定义覆盖默认构造函数的构造函数方法。显式定义的构造函数可以接受输入参数、初始化属性值、调用其他方法以及执行创建类对象所需的其他操作。
构造函数方法的基本结构
构造函数方法的结构包含三个基本部分:
-
初始化前 - 计算超类构造函数的参数。
-
对象初始化 - 调用超类构造函数。
-
初始化后 - 执行任何与子类相关的操作,包括对象的引用和赋值、调用类方法、将对象传递给函数等。
以下代码说明在每个部分执行的基本操作:
classdef ConstructorDesign < BaseClass1 properties ComputedValue end methods function obj = ConstructorDesign(a,b,c) %% Pre Initialization %% % Any code not using output argument (obj) if nargin == 0 % Provide values for superclass constructor % and initialize other inputs a = someDefaultValue; args{1} = someDefaultValue; args{2} = someDefaultValue; else % When nargin ~= 0, assign to cell array, % which is passed to supclass constructor args{1} = b; args{2} = c; end compvalue = myClass.staticMethod(a); %% Object Initialization %% % Call superclass constructor before accessing object % You cannot conditionalize this statement obj = obj@BaseClass1(args{:}); %% Post Initialization %% % Any code, including access to object obj.classMethod(arg); obj.ComputedValue = compvalue; ... end ... end ... end
像调用任何函数一样调用构造函数,传递参数并返回类的对象。
obj = ConstructorDesign(a,b,c);
构造函数的指导原则
-
构造函数与类同名。
-
构造函数可以返回多个参数,但第一个输出必须为创建的对象。
-
如果不想对输出参数赋值,可以在构造函数中清除对象变量。
-
如果创建类构造函数,请确保可以在没有输入参数的情况下调用它。
-
如果构造函数对超类构造函数进行显式调用,则该调用必须发生在对构造对象的任何其他引用之前,并且不能发生在return语句后。
-
对超类构造函数的调用不能为条件调用。您不能在循环、条件、switch、try/catch 或嵌套函数中放置超类构造调用。
默认构造函数
如果类没有定义构造函数,则 MATLAB 提供默认构造函数,它不接受任何参数,并返回一个标量对象,该对象的属性初始化为属性的默认值。由 MATLAB 提供的默认构造函数也调用所有超类构造函数,其中可以不将任何参数传递给默认子类构造函数,也可以将任何参数传递给默认子类构造函数。
当子类没有定义构造函数时,默认构造函数将其输入传递给直接超类构造函数。当子类不需要定义构造函数而超类构造函数需要输入参数时,此行为很有用。
何时定义构造函数
当需要执行默认构造函数无法执行的对象初始化时,可以定义构造函数方法。例如,当创建类的对象需要:
-
输入参数时
-
初始化类的每个实例的对象状态(例如属性值)时
-
用子类构造函数确定的值调用超类构造函数时
初始化构造函数中的对象
构造函数方法将初始化的对象以输出参数形式返回。输出参数是在构造函数执行时,在执行第一行代码之前创建的。
例如,以下构造函数可以将为对象的属性A的赋值作为第一个语句,因为已将对象obj指定给MyClass的一个实例。
function obj = MyClass(a,b,c) obj.A = a; ... end
可以从构造函数调用其他类方法,因为对象已初始化。构造函数还会创建一个对象,该对象的属性具有默认值 - 空值 (
[]
) 或属性定义代码块中指定的默认值。例如,以下构造函数对输入参数进行运算,以为Value属性赋值。
function obj = MyClass(a,b,c) obj.Value = (a + b) / c; ... end
在构造函数中引用对象
在初始化对象(例如,通过给属性赋值)时,使用输出参数的名称来引用构造函数中的对象。例如,在以下代码中,输出参数是obj,而对象也被引用为obj:
% obj is the object being constructed function obj = MyClass(arg) obj.propert1 = arg*10; obj.method1; ... end
构造函数不要求输入参数的情况
在某些情况下,必须能够在没有输入参数的情况下调用构造函数:
-
将对象加载到工作区时,如果将类的 ConstructOnLoad 属性设置为 true,则 load 函数将不带参数调用类构造函数。
-
在创建或扩展对象数组时,如果并非所有元素都有特定值,则将以不带参数的方式调用类构造函数来填充未指定的元素(例如,x(10,1) = MyClass(a,b,c);)。在这种情况下,将不带参数调用构造函数一次,以用此对象的副本填充空数组元素 (x(1:9,1))。
如果没有输入参数,构造函数仅使用默认属性值创建对象。最好在类构造函数中添加零参数检查,以防止在出现这两种情况时报错:
function obj = MyClass(a,b,c) if nargin > 0 obj.A = a; obj.B = b; obj.C = c; ... end end
子类构造函数
子类构造函数可以显式调用超类构造函数来将参数传递给超类构造函数。子类构造函数必须在对超类构造函数的调用中指定这些参数,并且必须使用构造函数输出参数来进行调用。语法如下:
classdef MyClass < SuperClass methods function obj = MyClass(a,b,c,d) obj@SuperClass(a,b); ... end end end
子类构造函数对超类构造函数的所有调用都必须发生在对 (obj) 对象的任何其他引用之前。此限制包括为属性赋值或调用普通类方法。此外,子类构造函数只能调用超类构造函数一次。
仅引用指定的超类
如果classdef没有将类指定为超类,则构造函数将无法使用此语法来调用超类构造函数。也就是说,子类构造函数只能调用classdef 行中列出的直接超类构造函数。
classdef MyClass < SuperClass1 & SuperClass2
MATLAB 按从左到右的顺序调用任何未调用的构造函数,这些构造函数在classdef 行中指定。MATLAB 对这些调用不传递任何参数。
对超类构造函数的无条件调用
对超类构造函数的调用必须为无条件调用。对给定超类只能调用一次。请在使用对象之前调用超类构造函数,以初始化对象的超类部分(例如,为属性赋值或调用类方法)。
要使用依赖于某些条件的不同参数调用超类构造函数,请构建参数的元胞数组,并提供对该构造函数的一次调用。
例如,当不带参数调用 Cube 构造函数时,Cube类构造函数将使用默认值调用超类Shape构造函数。如果使用四个输入参数调用 Cube 构造函数,则会将upvector和viewangle传递给超类构造函数:
classdef Cube < Shape properties SideLength = 0 Color = [0 0 0] end methods function cubeObj = Cube(length,color,upvector,viewangle) % Assemble superclass constructor arguments if nargin == 0 super_args{1} = [0 0 1]; super_args{2} = 10; elseif nargin == 4 super_args{1} = upvector; super_args{2} = viewangle; else error('Wrong number of input arguments') end % Call superclass constructor cubeObj@Shape(super_args{:}); % Assign property values if provided if nargin > 0 cubeObj.SideLength = length; cubeObj.Color = color; end ... end ... end end
零个或多个超类参数
要支持不带参数调用超类构造函数的语法,请显式提供以下语法。
假设在 Cube 类示例中,Shape 超类和 Cube 子类中的所有属性值都在类定义中指定了默认值。然后,您可以创建 Cube 的实例,而无需为超类或子类构造函数指定任何参数。
下面说明如何在 Cube 构造函数中实现此行为:
methods function cubeObj = Cube(length,color,upvector,viewangle) % Assemble superclass constructor arguments if nargin == 0 super_args = {}; elseif nargin == 4 super_args{1} = upvector; super_args{2} = viewangle; else error('Wrong number of input arguments') end % Call superclass constructor cubeObj@Shape(super_args{:}); % Assign property values if provided if nargin > 0 cubeObj.SideLength = length; cubeObj.Color = color; end ... end end
对继承的构造函数的隐式调用
MATLAB 将参数从默认子类构造函数隐式传递给超类构造函数。这样,就无需仅为了将参数传递给超类构造函数,而为子类实现一个构造函数方法。
例如,以下类构造函数需要输入参数(datatime对象),该参数由构造函数指定给 CurrentDate 属性。
classdef BaseClassWithConstr properties CurrentDate datetime end methods function obj = BaseClassWithConstr(dt) obj.CurrentDate = dt; end end end
假设创建了BaseClassWithConstr的一个子类,但是,子类不需要显式构造函数方法。
classdef SubclassDefaultConstr < BaseClassWithConstr ... end
可以通过用超类参数调用默认构造函数来构造SubclassDefaultConstr的对象:
obj = SubclassDefaultConstr(datetime);
类构造过程中的错误
对于句柄类,在下列情况下出现错误时,MATLAB 会调用delete方法:
-
在错误发生前,代码中存在对对象的引用。
-
在错误发生前,代码中存在较早的return语句。
MATLAB 对对象调用delete方法,对属性中包含的任何对象调用delete方法,对任何初始化的基类调用delete方法。
根据错误发生的时间,MATLAB 可以在对象完全构造之前调用类析构函数。
因此,类 delete 方法必须能够对部分构造的对象进行操作,这些对象可能没有所有属性的值。
禁止显示输出对象
当在对构造函数的调用中没有指定输出变量时,可以禁止将类实例赋给ans变量。这种编程方式对于创建图形界面窗口的 App 非常有用,这些窗口会保留构造的对象。这些 App 不需要返回对象。
使用nargout来确定是否带输出参数调用了构造函数。例如,如果调用时未指定输出,则 MyApp 类的类构造函数会清除对象变量 obj:
classdef MyApp methods function obj = MyApp ... if nargout == 0 clear obj end end ... end end
当类构造函数不返回对象时,MATLAB 不会触发meta.class InstanceCreated 事件。
-
-
类构造函数方法 - MATLAB & Simulink - MathWorks 中国
2021-04-22 02:22:37所有 MATLAB® 类都有默认的构造函数方法。此方法返回在没有输入参数的情况下创建的类的对象。类可以定义覆盖默认构造函数的构造函数方法。显式定义的构造函数可以接受输入参数、初始化属性值、调用其他方法以及执行...类构造函数方法类构造函数方法的目的
构造函数方法是一个创建类实例的特殊函数。通常,构造函数方法接受输入参数来指定存储在属性中的数据,并返回初始化的对象。
有关基本示例,请参阅创建简单类。
所有 MATLAB® 类都有默认的构造函数方法。此方法返回在没有输入参数的情况下创建的类的对象。类可以定义覆盖默认构造函数的构造函数方法。显式定义的构造函数可以接受输入参数、初始化属性值、调用其他方法以及执行创建类对象所需的其他操作。构造函数方法的基本结构
构造函数方法的结构包含三个基本部分:
初始化前 - 计算超类构造函数的参数。
对象初始化 - 调用超类构造函数。
初始化后 - 执行任何与子类相关的操作,包括对象的引用和赋值、调用类方法、将对象传递给函数等。
以下代码说明在每个部分执行的基本操作:
classdef ConstructorDesign < BaseClass1
properties
ComputedValue
end
methods
function obj = ConstructorDesign(a,b,c)
%% Pre Initialization %%
% Any code not using output argument (obj)
if nargin == 0
% Provide values for superclass constructor
% and initialize other inputs
a = someDefaultValue;
args{1} = someDefaultValue;
args{2} = someDefaultValue;
else
% When nargin ~= 0, assign to cell array,
% which is passed to supclass constructor
args{1} = b;
args{2} = c;
end
compvalue = myClass.staticMethod(a);
%% Object Initialization %%
% Call superclass constructor before accessing object
% You cannot conditionalize this statement
obj = obj@BaseClass1(args{:});
%% Post Initialization %%
% Any code, including access to object
obj.classMethod(arg);
obj.ComputedValue = compvalue;
...
end
...
end
...
end
像调用任何函数一样调用构造函数,传递参数并返回类的对象。
obj = ConstructorDesign(a,b,c);构造函数的指导原则
构造函数与类同名。
构造函数可以返回多个参数,但第一个输出必须为创建的对象。
如果不想对输出参数赋值,可以在构造函数中清除对象变量(请参阅禁止显示输出对象)。
如果创建类构造函数,请确保可以在没有输入参数的情况下调用它。请参阅构造函数不要求输入参数的情况。
如果构造函数对超类构造函数进行显式调用,则该调用必须发生在对构造对象的任何其他引用之前,并且不能发生在 return 语句后。
对超类构造函数的调用不能为条件调用。您不能在循环、条件、switch、try/catch 或嵌套函数中放置超类构造调用。有关详细信息,请参阅对超类构造函数的无条件调用。默认构造函数
如果类没有定义构造函数,则 MATLAB 提供默认构造函数,它不接受任何参数,并返回一个标量对象,该对象的属性初始化为属性的默认值。由 MATLAB 提供的默认构造函数也调用所有超类构造函数,其中可以不将任何参数传递给默认子类构造函数,也可以将任何参数传递给默认子类构造函数。
当子类没有定义构造函数时,默认构造函数将其输入传递给直接超类构造函数。当子类不需要定义构造函数而超类构造函数需要输入参数时,此行为很有用。何时定义构造函数
当需要执行默认构造函数无法执行的对象初始化时,可以定义构造函数方法。例如,当创建类的对象需要:
输入参数时
初始化类的每个实例的对象状态(例如属性值)时
用子类构造函数确定的值调用超类构造函数时相关信息
有关构造枚举的特定信息,请参阅枚举类构造函数调用顺序。
有关在构造函数中创建对象数组的信息,请参阅构造对象数组。
如果正在创建的类是子类,则 MATLAB 会调用每个超类的构造函数来初始化对象。对超类构造函数的隐式调用不带参数。如果超类构造函数需要参数,请从子类构造函数显式调用它们。请参阅Control Sequence of Constructor Calls初始化构造函数中的对象
构造函数方法将初始化的对象以输出参数形式返回。输出参数是在构造函数执行时,在执行第一行代码之前创建的。
例如,以下构造函数可以将为对象的属性 A 的赋值作为第一个语句,因为已将对象 obj 指定给 MyClass 的一个实例。
function obj = MyClass(a,b,c)
obj.A = a;
...
end
您可以从构造函数调用其他类方法,因为对象已初始化。
构造函数还会创建一个对象,该对象的属性具有默认值 - 空值 ([]) 或属性定义代码块中指定的默认值。
例如,以下构造函数对输入参数进行运算,以为 Value 属性赋值。
function obj = MyClass(a,b,c)
obj.Value = (a + b) / c;
...
end在构造函数中引用对象
在初始化对象(例如,通过给属性赋值)时,使用输出参数的名称来引用构造函数中的对象。例如,在以下代码中,输出参数是 obj,而对象也被引用为 obj:
% obj is the object being constructed
function obj = MyClass(arg)
obj.propert1 = arg*10;
obj.method1;
...
end
有关定义默认属性值的详细信息,请参阅属性默认值。构造函数不要求输入参数的情况
在某些情况下,必须能够在没有输入参数的情况下调用构造函数:
将对象加载到工作区时,如果将类的 ConstructOnLoad 属性设置为 true,则 load 函数将不带参数调用类构造函数。
在创建或扩展对象数组时,如果并非所有元素都有特定值,则将以不带参数的方式调用类构造函数来填充未指定的元素(例如,x(10,1) = MyClass(a,b,c);)。在这种情况下,将不带参数调用构造函数一次,以用此对象的副本填充空数组元素 (x(1:9,1))。
如果没有输入参数,构造函数仅使用默认属性值创建对象。最好在类构造函数中添加零参数检查,以防止在出现这两种情况时报错:
function obj = MyClass(a,b,c)
if nargin > 0
obj.A = a;
obj.B = b;
obj.C = c;
...
end
end
有关处理超类构造函数的方法,请参阅构造函数方法的基本结构。子类构造函数
子类构造函数可以显式调用超类构造函数来将参数传递给超类构造函数。子类构造函数必须在对超类构造函数的调用中指定这些参数,并且必须使用构造函数输出参数来进行调用。语法如下:
classdef MyClass < SuperClass
methods
function obj = MyClass(a,b,c,d)
obj@SuperClass(a,b);
...
end
end
end
子类构造函数对超类构造函数的所有调用都必须发生在对 (obj) 对象的任何其他引用之前。此限制包括为属性赋值或调用普通类方法。此外,子类构造函数只能调用超类构造函数一次。仅引用指定的超类
如果 classdef 没有将类指定为超类,则构造函数将无法使用此语法来调用超类构造函数。也就是说,子类构造函数只能调用 classdef 行中列出的直接超类构造函数。
classdef MyClass < SuperClass1 & SuperClass2
MATLAB 按从左到右的顺序调用任何未调用的构造函数,这些构造函数在 classdef 行中指定。MATLAB 对这些调用不传递任何参数。对超类构造函数的无条件调用
对超类构造函数的调用必须为无条件调用。对给定超类只能调用一次。请在使用对象之前调用超类构造函数,以初始化对象的超类部分(例如,为属性赋值或调用类方法)。
要使用依赖于某些条件的不同参数调用超类构造函数,请构建参数的元胞数组,并提供对该构造函数的一次调用。
例如,当不带参数调用 Cube 构造函数时,Cube 类构造函数将使用默认值调用超类 Shape 构造函数。如果使用四个输入参数调用 Cube 构造函数,则会将 upvector 和 viewangle 传递给超类构造函数:
classdef Cube < Shape
properties
SideLength = 0
Color = [0 0 0]
end
methods
function cubeObj = Cube(length,color,upvector,viewangle)
% Assemble superclass constructor arguments
if nargin == 0
super_args{1} = [0 0 1];
super_args{2} = 10;
elseif nargin == 4
super_args{1} = upvector;
super_args{2} = viewangle;
else
error('Wrong number of input arguments')
end
% Call superclass constructor
cubeObj@Shape(super_args{:});
% Assign property values if provided
if nargin > 0
cubeObj.SideLength = length;
cubeObj.Color = color;
end
...
end
...
end
end零个或多个超类参数
要支持不带参数调用超类构造函数的语法,请显式提供以下语法。
假设在 Cube 类示例中,Shape 超类和 Cube 子类中的所有属性值都在类定义中指定了默认值。然后,您可以创建 Cube 的实例,而无需为超类或子类构造函数指定任何参数。
下面说明您如何在 Cube 构造函数中实现此行为:
methods
function cubeObj = Cube(length,color,upvector,viewangle)
% Assemble superclass constructor arguments
if nargin == 0
super_args = {};
elseif nargin == 4
super_args{1} = upvector;
super_args{2} = viewangle;
else
error('Wrong number of input arguments')
end
% Call superclass constructor
cubeObj@Shape(super_args{:});
% Assign property values if provided
if nargin > 0
cubeObj.SideLength = length;
cubeObj.Color = color;
end
...
end
end有关子类的详细信息
有关创建子类的信息,请参阅设计子类构造函数。对继承的构造函数的隐式调用
MATLAB 将参数从默认子类构造函数隐式传递给超类构造函数。这样,就无需仅为了将参数传递给超类构造函数,而为子类实现一个构造函数方法。
例如,以下类构造函数需要输入参数(datetime 对象),该参数由构造函数指定给 CurrentDate 属性。
classdef BaseClassWithConstr
properties
CurrentDate datetime
end
methods
function obj = BaseClassWithConstr(dt)
obj.CurrentDate = dt;
end
end
end
假设您创建了 BaseClassWithConstr 的一个子类,但是,您的子类不需要显式构造函数方法。
classdef SubclassDefaultConstr < BaseClassWithConstr
...
end
您可以通过用超类参数调用默认构造函数来构造 SubclassDefaultConstr 的对象:
obj = SubclassDefaultConstr(datetime);
有关子类构造函数的信息,请参阅子类构造函数和默认构造函数。类构造过程中的错误
对于句柄类,在下列情况下出现错误时,MATLAB 会调用 delete 方法:
在错误发生前,代码中存在对对象的引用。
在错误发生前,代码中存在较早的 return 语句。
MATLAB 对对象调用 delete 方法,对属性中包含的任何对象调用 delete 方法,对任何初始化的基类调用 delete 方法。
根据错误发生的时间,MATLAB 可以在对象完全构造之前调用类析构函数。因此,类 delete 方法必须能够对部分构造的对象进行操作,这些对象可能没有所有属性的值。有关详细信息,请参阅支持销毁部分构造的对象。
有关如何销毁对象的信息,请参阅句柄类析构函数。禁止显示输出对象
当在对构造函数的调用中没有指定输出变量时,可以禁止将类实例赋给 ans 变量。这种编程方式对于创建图形界面窗口的 App 非常有用,这些窗口会保留构造的对象。这些 App 不需要返回对象。
使用 nargout 来确定是否带输出参数调用了构造函数。例如,如果调用时未指定输出,则 MyApp 类的类构造函数会清除对象变量 obj:
classdef MyApp
methods
function obj = MyApp
...
if nargout == 0
clear obj
end
end
...
end
end
当类构造函数不返回对象时,MATLAB 不会触发 meta.class InstanceCreated 事件。
相关主题
-
【Matlab】 构造函数时为函数输入设置默认值
2022-03-25 20:50:25使用python等语言编程时,通常可以直接在函数的输入用“=”为输入参数赋予默认值,最近使用matlab做项目时,发现matlab无法这样实现。在看了matlab文档后,发现nargin是用来判断输入变量个数的函数,可以根据输入的...使用python等语言编程时,通常可以直接在函数的输入用“=”为输入参数赋予默认值,最近使用matlab做项目时,发现matlab无法这样实现。在看了matlab文档后,发现nargin是用来判断输入变量个数的函数,可以根据输入的情况来为输入参数设置默认值。
例如我需要画一个波形图,需要手动输入波的频率值,可以使用matlab的function构造函数:
function fft_ricker = ricker4e8_fft(f0, f1) if nargin < 2 % 判断输入的参数是否小于2个,是则为参数赋予默认值,不是则为参数赋予输入值 f0 = 4e8 f1 = 5e8 end f0 f1
当输入参数小于等于2时,函数会为f0和f1赋予默认值,否则为f0和f1赋予输入值。
输入0个参数时,f0和f1被赋予默认值。
输入1个参数时,f0和f1被赋予默认值。
输入两个参数时,f0和f1就被赋予输入的值了。
Matlab的nargin可以用来判断不同的输入情况,可以根据不同的情况对if里面的条件进行修改。
-
matlab – 与超类和子类构造函数连接
2021-04-22 02:22:22我在matlab文档和以前有关使用matlab继承和类构造函数来创建接口的问题时遇到了麻烦.在包装内使其整洁.而不是拖动我的代码我可以压缩它如下:一个包MyPkg有一个超类Super和几个子类Sub1 Sub2 …我的大多数属性和方法... -
matlab构造含符号变量的函数并求值
2015-12-02 13:45:54详细介绍了matlab构造含符号变量的函数并求值的方法 -
MATLAB复变函数
2021-06-15 18:27:07介绍MATLAB中的复变函数计算和绘图。 -
MATLAB报错:CLASS 函数必须从类构造函数内调用
2021-12-07 16:26:26使用function创建MATLAB类时报错:CLASS 函数必须从类构造函数内调用。 一个可能的原因是因为MATLAB里创建的类.m文件需要放入一个文件夹里,文件夹名称需要和类名一致,并且需要在前面添加'@'符号,这样MATLAB就可以... -
matlab建立函数_Matlab怎么建立自定义函数
2021-04-26 19:02:09摘要 腾兴网为您分享:Matlab怎么建立自定义函数,政务易,一起成长,嘻嘻动漫,武魂传说等软件知识,以及苹果无线,分美...Matlab 作为一款数学商业软件,那么这款软件中必然拥有很多功能的函数,用户在使用这款软件... -
matlab代码续行-random_Generator:遵循任意给定概率密度函数生成随机样本的构造函数
2021-05-26 18:20:36遵循任意给定概率密度函数生成随机样本的构造函数 给定概率密度函数(pdf)f(x),相应的累积密度函数(cdf)F(x)从零变为一。 给定从[0,1]中的均匀分布得出的一组随机数{F_i},相应的{x_i}使得F(x_i)= F_i遵循... -
matlab中copula函数
2018-08-14 22:17:43matlab中copula函数的使用代码。 -
饱和函数(sat)matlab simulink function 代码
2021-06-15 17:12:03在 matlab function模块中编写的饱和函数代码,可以直接移植到模块中,运行可靠,并且可以根据需求更改斜率。 -
用Matlab构造奇数阶幻方矩阵.pdf
2021-07-10 14:52:21用Matlab构造奇数阶幻方矩阵.pdf -
QC_LDPC 校验矩阵构造函数matlab
2019-04-08 20:25:32QC_LDPC 校验矩阵构造函数matlab QC_LDPC 校验矩阵构造函数matlab -
四元数旋转矩阵matlab函数
2021-10-29 22:03:33四元数转化为旋转矩阵的matlab函数 -
MATLAB三次样条插值函数构造
2019-12-19 09:19:16本程序为matlab程序,用于对于给定点构造三次样条插值函数,能够输出每段函数的表达式,同时绘制了样条函数的图形。附件包含文档和程序。 -
MATLAB|分段函数的构造方法
2021-04-22 05:23:25技术背景MATLAB。3. 解决方案以上的分段函数分别由两个函数构成:f1(x) = 0.5*x,当 x < 100;f2(x) = -0.5*x+100,当 x >= 100;故整体的分段函数可以表示为:f(x) = f1(x)(当 x < 100) + f2(x)(当 x >=... -
matlab开发-选项卡面板构造函数282010
2019-08-21 11:05:42matlab开发-选项卡面板构造函数282010。tabpanel构造函数提供了在matlab中创建tabpanels的最简单方法! -
笔记05_Matlab手把手采用实验数据建立传递函数.rar
2021-12-04 14:16:55手把手教你利用数据建立传递函数!采用Matlab软件!可应用与实际中建模,解耦。 -
MATLAB s函数最详细指南编写教程
2019-12-06 09:01:40MATLAB s函数最详细指南编写教程 -
matlab 自己构造DFT函数
2021-10-02 20:25:47end end 在matlab命令行中输入如下命令 s = sin(((1:64)-1)2pi*12.5/100); figure(1);plot(s);figure(2);stem4(dft(s));figure(3);stem4(fft(s)); 得到 经验证,该DFT函数得到的频域波形与FFT相同,正确。 -
小波基构造函数 Matlab函数
2008-11-12 15:01:02此函数可以构造小波基 通过小波函数找到合适的小波基 -
Matlab构造内联函数(inline函数)
2020-01-12 20:38:05Matlab通过inline函数构造内联函数。 -
用Matlab作函数的图像
2020-07-23 16:21:00函数简介 1.作图函数是plot 其调用格式如下: plot(y) plot(x,y) plot(x,y,LineSpec) plot(x1,y1,s1,x2,y2,s2,x3,y3,s3,……) 说明: (1)plot(y)绘出以向量y为纵坐标,y的个元素的下表构成的向量x为横坐标的二维... -
惩罚函数法的matlab实现方法
2021-02-08 04:30:18工程优化设计中常常用到的惩罚函数法的Matlab实现的源程序代码 工程优化设计中常常用到的惩罚函数法的Matlab实现的源程序代码 -
构造函数(一) 构造函数及重载
2019-10-02 11:26:18什么是构造函数 构造函数是初始化类对象的类成员函数。在c++中,当对象被创建时,自动调用构造函数,构造函数是该类的一个特殊成员的函数 构造函数和一般的成员函数有什么不同 构造函数的名称和类的名称完全相同 ... -
MATLAB匿名函数
2021-04-20 08:10:43本文概述匿名函数是简单的(单行)用户定义函数, 无需创建单独的函数文件(M...创建函数后, 我们可以将其与它的句柄一起使用以评估函数或将其作为参数传递给其他函数。例如, 创建一个匿名函数来求值并返回圆的面积:&g... -
开普勒方程:一套用于求解开普勒方程的 MATLAB 函数。-matlab开发
2021-06-01 11:27:11四个 MATLAB 函数,用于使用 Danby 方法求解开普勒方程、使用 Mikkola 初始猜测的 Danby 方法、Stumpff 函数、Gooding 二次迭代方法以及使用改进的 Barker 算法求解日心抛物线和近抛物线轨道。 -
MATLAB函数结构
2021-01-05 00:00:10Matlab:函数与脚本均为*.m文件,以function开头的文件一般为函数文件,否则是脚本文件。 函数文件以第一个函数为函数文件的主函数,外部文件只能调用主函数。 一般要求函数名与函数文件名同名,外部文件和脚本通过... -
自学MATLAB(一):特殊矩阵构造函数
2019-03-06 20:50:30自学MATLAB(一):特殊矩阵构造函数 ones(n)函数:构建一个n x n的1矩阵 ones(n,m,…,p)函数:构建一个n x m x…p的1矩阵 ones(size(A)):构建一个***A***矩阵大小的1矩阵 zeros(n),ze...