首页 > 其他分享 >matlab如何写一个类

matlab如何写一个类

时间:2023-12-17 21:27:04浏览次数:26  
标签:function obj Strain 一个 如何 matlab end td Modulus

类是一种数据类型,与普通的数据类型不同的是类不仅包含数据,还包含对数据的操作,类把数据和数据操作方法封装在一起,作为一个整体参与程序的运行。类具有可继承性,创建一个新的类的时候,可以在一个基类中添加成员派生出新类。类的变量和类的实例是不同的,类的实例是动态分配的内存区域,通常称类的实例维“对象”,同一个类可以有不同的实例存在,他们个子有自己的数据,但是数据操作方法是相同的。类的变量可以看作是一个指针,指向类的实例。 
在MATLAB中,为了更好地进行数据的封装,更加抽象地描述对象,也定义了类。

通常一个类应该包含四个基本的成员函数:
构造函数 ―― 与类名相同,可以在其中完成成员初始化的工作;
显示函数 ―― 名为display,用于显示成员的数据;
赋值函数 ―― 名为set,用于设置类成员的数值;
取值函数 ―― 名为get,用于读取类成员的函数。

与C++的类不同的是,MATLAB的类不需要特别的析构函数。如果类用到了一些特殊的内容需要释放的话,可以编写一个成员函数,比如classclear,用包来释放所占用的资源。
下面用一个简单的例子类介绍一些类如何使用

先看一个matlab中的类代码:

 1 classdef TensileData
 2    properties
 3       Material = 'carbon steel';
 4       SampleNumber = 0;
 5       Stress
 6       Strain
 7    end
 8    properties (Dependent)
 9       Modulus
10    end
11    
12    methods
13       function td = TensileData(material,samplenum,stress,strain)
14          if nargin > 0
15             td.Material = material;
16             td.SampleNumber = samplenum;
17             td.Stress = stress;
18             td.Strain = strain;
19          end
20       end % TensileData
21    end
22    
23    methods
24       function obj = set.Material(obj,material)
25          if ~(strcmpi(material,'aluminum') ||...
26                strcmpi(material,'stainless steel') ||...
27                strcmpi(material,'carbon steel'))
28             error('Material must be aluminum, stainless steel, or carbon steel')
29          end
30          obj.Material = material;
31       end % Material set function
32       
33       function modulus = get.Modulus(obj)
34          ind = find(obj.Strain > 0); % Find nonzero strain
35          modulus = mean(obj.Stress(ind)./obj.Strain(ind));
36       end % Modulus get function
37       
38       function obj = set.Modulus(obj,~)
39          fprintf('%s%d\n','Modulus is: ',obj.Modulus)
40          error('You cannot set Modulus explicitly');
41       end
42       
43       function disp(td)
44          fprintf(1,'Material: %s\nSample Number: %g\nModulus: %1.5g\n',...
45             td.Material,td.SampleNumber,td.Modulus);
46       end % disp
47       
48       function plot(td,varargin)
49          plot(td.Strain,td.Stress,varargin{:})
50          title(['Stress/Strain plot for Sample ',num2str(td.SampleNumber)])
51          xlabel('Strain %')
52          ylabel('Stress (psi)')
53       end % plot
54    end
55    
56    methods (Access = 'private') % Access by class members only
57       function m = CalcModulus(td)
58          % Over-simplified calculation of Elastic Modulus
59          ind = find(td.Strain > 0); % Find nonzero strain
60          m = mean(td.Stress(ind)./td.Strain(ind));
61       end % CalcModulus
62    end
63 end % classdef

在上述代码中,

1 classdef TensileData
2   ...
3 end

是定义一个TensileData类。代码:

1  properties
2       Material = 'carbon steel';
3       SampleNumber = 0;
4       Stress
5       Strain
6 end

是定义这个类的属性,也就是C++中类的成员变量。但是和C++不同的是,matlab中的类定义还有一个比较特别的地方的,就是定义依赖属性,如下述代码:

1 properties (Dependent)
2       Modulus
3 end

这表示Modulus这个属性是个依赖属性,它的值是通过其他属性计算得到的,其中Dependent的默认属性值为True。

它的值是通过下面函数实现的:

1 % Modulus get function
2 function modulus = get.Modulus(obj)
3          ind = find(obj.Strain > 0); % Find nonzero strain
4          modulus = mean(obj.Stress(ind)./obj.Strain(ind));
5 end

 

类的方法(函数)的定义是以methods ... end的的形式出现的。如下面的类方法的定义:

 1 methods
 2       function td = TensileData(material,samplenum,stress,strain)
 3          if nargin > 0
 4             td.Material = material;
 5             td.SampleNumber = samplenum;
 6             td.Stress = stress;
 7             td.Strain = strain;
 8          end
 9       end 
10 end

 

该函数块定义了TensileData构造函数方法。上述代码中的最后一个方法 methods (Access = 'private')

中的Access = 'private'表示该方法仅能被类本身访问和修改,是个私有成员方法。其中属性Access又可分为

SetAccess和GetAccess,属性值和Access相同。

在disp函数语句中出现“...”表示下一行和当前行是连接在一起的。如:

1 function disp(td)
2     fprintf(1,'Material: %s\nSample Number: %g\nModulus: %1.5g\n',...
3        td.Material,td.SampleNumber,td.Modulus);
4 end

 

就表示第二行和第三行是连在一起的。

 

标签:function,obj,Strain,一个,如何,matlab,end,td,Modulus
From: https://www.cnblogs.com/liylllove/p/17909839.html

相关文章

  • mysql在使用myisam引擎的情况下如何提升查询速度
    MyISAM是MySQL的一种存储引擎,它在某些情况下可能比其他存储引擎(例如InnoDB)慢。但是,仍然有一些方法可以优化MyISAM表的查询速度:索引优化:为经常用于查询的列和WHERE子句中的列添加索引。使用复合索引来覆盖多个列,但要注意索引的列顺序。定期使用 OPTIMIZETABLE 命令来重新......
  • 用go如何实现接口抽象
    当涉及到连接不同类型的数据库时,可以用常见的方式去连接对应的数据库,也可以使用接口抽象的方式使代码更具灵活性和可扩展性,更显优雅。非接口抽象方式:如果涉及到多种数据库时,同样的代码显得非常臃肿。packagemainimport"fmt"//直接定义MySQL连接和插入函数funcMySQL......
  • 一个Servlet如何实现增-删-改-查的业务逻辑
    一、业务场景最近在教学生学习JavaWeb中的Servlet,它就是一个Java服务端的小程序,用来提供各种服务。在讲解得时候,自己突然遇到一个问题,那就是现在没有使用什么SpringMvc框架,可以配置二级路径,该如何使用Servlet实现不同的增、删、改、查的方法呢?这个问题自己一时半会也没想明......
  • 我是如何解决java.security.cert.CertPathValidatorException异常的
    在rocky8.5上,有个jdk8跑的程序连接windows上SQLServer2012失败了,环境如下:[zcm@rockymicroService]$cat/etc/redhat-releaseRockyLinuxrelease8.5(GreenObsidian)[root@rockysecurity]#java-versionopenjdkversion"1.8.0_302"OpenJDKRuntimeEnvironment(......
  • Spring如何j将xml配置映射为BeanDefinition
    Spring的常用配置文件是applicationContext.xml文件,最简单的,一般我们都会添加这样的配置:<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins......
  • 离散傅里叶级数的matlab实例
    function[Xk]=dfs(xn,N)%computesdiscretefourierseriescoefficients%---------------------------------------------%[Xk]=dfs(xn,N)%Xk=DFScoeff.arrayover0<=k<=N-1%xn=oneperiodofperiodicsignalover0<=n<=N-1%N=Fundame......
  • 腾讯出品!1000多万人次使用,推荐一个神奇的工具网站
    先来看下有哪些工具,基本你日常用到需要的,都有的,网站地址文末获取!工具简介在当今的信息时代,我们每天都需要处理各种各样的数据、文件、图片等,有时候会遇到一些困难和麻烦,比如格式不兼容、文件过大、图片模糊、生词难懂等。为了解决这些问题,我们通常需要下载安装各种软件或者应用,......
  • 打造一个极度舒适的Chrome扩展项目开发环境
    大家好,我是dom哥。这是我关于Chrome扩展开发的系列文章,感兴趣的可以点个小星星。Chrome扩展能够提高浏览器的使用体验,通过自定义UI界面,监听浏览器事件,改变Web页面等操作来延展浏览器的功能。Chrome扩展项目使用前端html,css,js基础技术开发,一大痛点就是改动代码后的......
  • MATLAB实现huffman编码及译码
    使用前将建立input.txt放在和该.m文件同一文件夹中运行即可最后运行结果:1.文本统计过后的信源空间2.信源空间对应的柱状图3.编码结果4.译码结果对彩色图像进行huffman编码,解码,显示原图像clc;closeall;clearall;%数据读取txt=fopen('input.txt');shuju=fscanf(txt,'%c')......
  • MATLAB 函数句柄Function handle的用法
    函数句柄的作用是可以把函数句柄直接设置为参数然后执行  函数句柄(Functionhandle)是MATLAB的一种数据类型。引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠;使“函数调用”像“变量调用”一样方便灵活;提高函数调用速度,特别在反复调用情况下更显效率;提高软件重用性,......