Matlab与Simulink个人学习总结

本文介绍了Matlab中使用的关键技术,如结构体数据处理、元组操作、For循环简化、get和set_param的区别、模型编译、查找功能、双y轴绘图、函数与脚本执行、Simulink模块管理、搜索路径设置及MATLAB与外部命令交互等。
摘要由CSDN通过智能技术生成

0、折叠所有的位置<Ctrl + ,>//<Ctrl +Shift +,>;折叠当前的位置<Ctrl +.>//<Ctrl + Shift +.>

1、比较两个结构体数据:matlab.unittest.constraints.StructComparator
2、元组{}可以同时比较多列数据:

%数组可以对比多个结果
tempflag = get(all_GotoScop_block,'Criteria');
%得到元组结果

contains(tempflag,'u2 ~= 0')

3、将For循环简化模型(使用逻辑数据类型简化if语句)

%% 简化条件
tempflag(contains(tempflag,'u2 ~= 0'))

%%简化使用for循环,与if语句连用。
Z=[1 2 3 4 5];
Z(Z>=3)

%%当需要筛选的数据不是元组时,可转换成元组如:
c = whos;
namelist = c(contains({c.class},'struct')).name;

4、get与get_param有区别。如获取path只能get命令。

5、使用模型名字作为编译接口:

mymodel([],[],[],'compile')可见我之前提供的连接

mymodel([],[],[],'term');

6?怎么使用查找多个条件并列关系。

如查找相乘模块与求和模块。

all_Switch_block = find_system(system,'FindAll','on','Blocktype',{'Product';'Sum'})

7、获取元组的并集union(),交集intersect(),补集。

unique([all_Sum_block;all_Sum2_block;all_Product_block])%得到元组的并集。;

8、连接元组a={'a','n'};B={'c','f'};d=[a,B];即可

9、直接比较元组内容:

% 比较一个元组内容时:
example = {'ABC','ABC'};
contains(example{:})
% 比较多个对多个内容
example_1 = {'ABC','BCD'};
contains(example_1 ,{AB,AS})

10、在statefolw里面批量修改同名称变量:在symbol面板里修改变量名字,再按Shift + Enter即可批量修改变量。Ctrl+Shift+A自动排列对齐文本。

11、sort函数与sortrows函数区别;

sortrows函数可以排序元组,矩阵,但是sort智能排序矩阵。

12、find可以与逻辑进行联用可以效率很好详见我的:《批量Simulink删除sldd没有使用的变量与查看顶层模型属性》。

13、符号运算

13. 1Poly([-1 2 3])可以得到(x+1)*(x-2)*(x-3)的多项式展开式;

13.2当要是用变量可使用:

Sym a;

sym b;

%想得到符号展开式(a+b)*(a-1):

Expand((a+b)*(a-1))

13.3 如果想得到符号表达式的根:

factor(a*b - b - a + a^2)

13.4 Root:

root(p,x)

root(p,x,k)

13.5、solve求解表达式
 

syms a b c x
eqn = a*x^2 + b*x + c == 0

S = solve(eqn)
Sa = solve(eqn,a)

14、找出重复值,利用统计计数方法

% 创建一个包含相同数据的列向量
data = [2; 5; 1; 3; 2; 5; 1; 2; 3; 1];
% 使用 unique 函数获取唯一值和对应的索引
[uniqueValues, ~, index] = unique(data);
% 统计每个唯一值的出现次数
counts = histcounts(index, numel(uniqueValues));
% 输出结果
disp('唯一值:');
disp(uniqueValues');
disp('出现次数:');
disp(counts')
unquestion=uniqueValues(counts>1);

15、matlab 列出struct中所有的fields----fieldnamea与将结构体内容提取成元组形式。

% 如获取模型的配置选项
configSet = getActiveConfigSet(bdroot);
%获取模型的Components项
configParams = get(configSet).Components;
% % 获取Component名称
% % configParamsNames = configSet.getComponent
% 得到结构体
configlist = get(configParams(1));
% 将结构体的字段提取出来
StructFiel_value = fieldnames(configlist);
% 将结构体字段值提取出来。
StructFiel_value(:,2)=struct2cell(configlist);
StructFiel_value

16、判断文件是否选择,没有并停止代码

[fileNames, pathName] = uigetfile('*.txt', '选择文本文件', 'MultiSelect', 'on');
   % 检查是否有文件被选中
   if isequal(fileNames,0) || isequal(pathName,0)
       disp('用户取消选择。');
       return;
   else
       disp(['用户选择了 ', num2str(length(fileNames)), ' 个文件。']);
   end

17、绘制双y轴图形

MATLAB 根据X、Y坐标绘制折线图,增加右侧纵轴刻度且不用plotyy_matlab纵轴增加刻度-CSDN博客
Matlab 绘制双纵轴图_matlab两个纵轴-CSDN博客

18、将元组进行,空值或者没有数据的元组。

%% 先进性去清除空值操作得到一行的元组
result(cellfun (@isempty,result))= [];

%% 再对元组进行分列划行
b = reshape(result,[],2);

19、两个命令的区别,在函数内,和没在函数内的区别。
eval(['invalue =',linname{ii},'.InitialValue;']);
invalue =get(evalin("base",linname{ii}),'InitialValue');

20、将参数传到函数内的两种特殊方法,
第一种:
evalin('base','save tempvar.mat varlists')
evalin('base','varlists = strjoin(varlist,'' '')')
evalin('base','save tempvar.mat varlists')
load('tempvar.mat');
第二种:
var = evalin('base','whos;');

21、setdiff(varflist,extractedStrings)这个能用元组类型么???

22、slbuild(Model)与GenerateCode(Model)区别是什么。system这个可以使用脚本运行并不报出文件移动错误;GenerateCode这个会。

23、matlab:直接连接到模块的代码

open_and_hilite_hyperlink ('TRCC/TRCChecue_sys/Subsystem/dCoI_RedM/Delay','error')

stateflow连接

sfprivate('sfOpenObjectBySId','ModelName:683')
sfprivate('sfOpenObjectBySId','ModelName:737:::15')

谁知道这个737还有 ":"是什么意思?
答:是Simulink模块名字的ID可通过
 

openExample('simulink_general/VanDerPolOscillatorExample')
SID = Simulink.ID.getSID('vdp/x1')%可以获取char的sid再获取具体信号sid进行显示

config直接连接:
 

 modeladvisorprivate openCSAndHighlight <ModelName> MatFileLogging

24、which pathdef.m -all %可查看所有搜索路径下的pathdef.m文件位置
C:\Program Files\MATLAB\R2022b\toolbox\local\pathdef.m

addpath("c:\matlab\MyFolder")

rmpath("c:\matlab\MyFolder")

%默认情况下,pathdef.m 位于 matlabroot/toolbox/local 中,可通过matlabroot命令查看

savepath

savepath folderName/pathdef.m

status = savepath(___)
 


25、Matlab调用dos命令和Python命令操作。

dos('cmd.exe')直接调用;将显示结果显示在Matlab中,

26、获取inputparemeter对象属性值,

int_round_mode_obj = Simulink.ModelAdvisor.getModelAdvisor(system); % 获取模型对象

a = int_round_mode_obj.getInputParameters()

a{1}.Value

获取检查结果的句柄

function result = ActionCB(taskObj)

mdladvObj = taskObj.MAObj;

checkObj = taskObj.Check;

resultDetailObjs = checkObj.ResultDetails;

for i=1:numel(resultDetailObjs)

% take some action for each of them

block=Simulink.ID.getHandle(resultDetailObjs(i).Data);

set_param(block,'NamePlacement','normal');

end

27、使用uifigure()应该先试用uipanel先进行划分,才能使用subplot(),需要设置属性p2.AutoResizeChildren = 'off';

fig = uifigure('Name','Run logic Oil_Temp - Plots - Ingersoll','Position',[1 100 1280 900]);
p1 = uipanel(fig,'Position',[15 10 600 410]);
ax = uiaxes(p1,'Position',[10 10 550 390]);
p2 = uipanel(fig,'Position',[15 450 600 410]);
bx = uiaxes(p2,'Position',[10 10 550 390]);
fig.Color = '#D2E1F0';
ax.XGrid = 'on';
ax.YGrid = 'on';
ax.Title.String = 't1 & t2';
plot(ax, [0:10], [0:10].^2); % <<< made up data to plot; replace with your original plot call
p2.AutoResizeChildren = 'off';
bx1 = subplot(2, 1, 1, 'Parent', p2); % <<< restored this; you need it
plot(bx1, [0:100], [0:100].^3); % <<< made up data to plot; replace with your original plot call
bx2 = subplot(2, 1, 2, 'Parent', p2);
plot(bx2, [0:0.01:4*pi], sin([0:0.01:4*pi])); % <<< made up data to plot; replace with your original plot call

28、找出元组相同的元素代码;找出唯一的unqiue;

%%dump是包含相同的元组
[C, ia, ic] = unique(dump,'sorted');
modeLS(setdiff(ic,ia))

29、simulink快速查找可变子系统模块
variMod = find_system(Modename,'BlockType','SubSystem','Name','Variant Subsystem');

30、simulink模型为什么编译和指定的数据类型不一致

Ctrl+D不等价模型编译。

可使用portdaty = get_param(porttype,'OutDataTypeStr')该语句来获取信息;
不使用:get_param(porttype,'DataType')
endstop模型发现该问题。

31、Dir(文件名)当文件打开是找不到的。exit判断可使用。

32、strcmp(A,B)对比A,B相同则返回true,补充Contains()不足,都可进行元组数据,得到逻辑数组;isequal()太绝对,必须是相同字符串,相同元素才行。

33、set_param(1,2,3);2中如果是结构体中的结构可以使用

dlgParamsStruct = get_param(tempBlock,'DialogParameters');
dlgParams = fieldnames(dlgParamsStruct)
set_param(tempBlock,dlgParams{j},newParamName)

34、str.empty(0,1);cell.empty();arguments参数可以检查函数输入,输出的数据结构。

35、函数的输入、输出参数变量:varargin可变输入参数;varargout可变输出参数;nargin输入可变个数,vargout输出参数可变个数。

36、properties(obj)查看对象有哪些属性;methods(obj)查看对象有哪些方法;

37,isa('var','type');判断是不是指定类型。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值