Matlab workspace、.m脚本和Simulink模型之间的关系是什么?如何有效地使用它们?
我在控制类中使用了大量的MATLAB,有些东西真的让我很烦。他们希望我们使用大量Simulink,尽管我发现可视化表示没有多大帮助,而且Simulink和MATLAB脚本之间的接口通常很难理解 因此,我有一个模型,并为Matlab workspace、.m脚本和Simulink模型之间的关系是什么?如何有效地使用它们?,matlab,simulink,Matlab,Simulink,我在控制类中使用了大量的MATLAB,有些东西真的让我很烦。他们希望我们使用大量Simulink,尽管我发现可视化表示没有多大帮助,而且Simulink和MATLAB脚本之间的接口通常很难理解 因此,我有一个模型,并为接收器添加了作用域,当从Simulink运行时,它可以将数据直接保存到工作区。但是,当我使用脚本中的命令sim根据一些参数直接使用模型时(stopTime,求解方法,等等),结果被隐藏在一个对象中,该对象的文档记录很差,至少可以说我有: simout = sim('lab','St
接收器添加了作用域
,当从Simulink运行时,它可以将数据直接保存到工作区。但是,当我使用脚本中的命令sim
根据一些参数直接使用模型时(stopTime
,求解方法
,等等),结果被隐藏在一个对象中,该对象的文档记录很差,至少可以说我有:
simout = sim('lab','StopTime','100','Solver','ode1','FixedStep','2');
现在我的工作区中有了一个对象,但要访问我想要的数据,我需要在simout
的成员中深入3、4层。我的第一个问题是:
有没有一种方法可以直接访问或至少知道这些成员是什么,而不必繁琐地使用who
我不想编译代码来访问它的文档!而help
对于这些情况并没有真正的帮助
为什么Simulink模型在调用时不按照接收器属性中的规定保存数据。我知道我提到的代码行覆盖了一些simulink块规定(例如,使用的解决方法)
如何知道simulink模型如何与matlab脚本交互,虽然我在编码方面是个新手,但文档并没有真正告诉我模型的形式定义以及在matlab中的使用方式。我害怕在某些时候,“sim”的默认设置会超过我在早期模型中设置的一些设置,这将被证明是一个令人讨厌的调试业务
TL;DR有没有一种快速方法可以接触到物体的深埋部分?例如,现在我必须做:
simout = sim('lab','StopTime','100','Solver','ode1','FixedStep','2');
who(simout)
ScopeData = (simout.get('ScopeData'))
signals = (ScopeData.signals)
time = (ScopeData.time)
我可以做一些类似于(Simout->ScopeData.signals)的C-ish吗
最后,为什么MATLAB套件被那些通常需要了解自己编码的EE用户大量使用,却被当作是一个日内交易者的应用程序?为什么没有使用带有标题的库以及用于在代码中导入内容(例如boost、string等)的良好文档?通过隐藏机制,最后一个选项可能不那么漂亮,但是为了能够正确地编写代码,我觉得我必须了解代码的大部分基本机制。General
简而言之,工作空间就是您工作的可变环境。如果运行脚本,您的工作区是'base'
,这与控制台使用的相同。所以Matlab有不同的环境,一种是包含的环境,称为路径,另一种是变量,称为工作空间
Simulink使用了另一种方法,这可以防止隐藏变量名
要检查当前工作区中的成员,请使用who
要将成员写入另一个工作区,请使用assignin
要在指定的工作区中运行某些内容,请使用evalin
您的问题
1.
谁列出了当前工作区中的所有变量?你不需要它来完成你想做的事情。
整个simulink文档都不是那么好
2.
它确实
3.
如果运行脚本并定义变量,它们将在base
工作区中定义。当您在simulink中仅通过输入变量名称(例如a)来指定变量时,它确实会从base
工作区加载该变量(因此这种方式不会出现问题)。
另一种方法是使用给定的导出块,或者通过使用global
或assignin
在您自己的块中指定导出值
4.
如果打开范围块并点击选项按钮(小齿轮),可以选择导出选项。您还可以指定不想使用的类型。您似乎使用了struct with time选项,这是LVL最多的选项,如果您的问题只是因为它是一个struct,我建议您使用数组类型。
还可以使用Outputblock指定导出类型和名称
因此,我同意:
sim('modelname');
signals=ScopeData.signals;
time=ScopeData.time;
或指定为数组时:
sim('modelname');
signals=ScopeData(:,2);
time=ScopeData(:,1);
在上面的示例中,我没有指定模型的运行方式,但是您也可以在发布时指定它。大多数人开始使用MATLAB或Simulink时都会讨厌它。我看到的主要原因是人们对MATLAB的学习非常差,这妨碍了他们理解MATLAB的功能以及何时应该使用它
在我开始描述MATLAB工作区之前,m
文件和Simulink都是相关的,让我们首先定义它们各自是什么,以及可以使用它们做的一些事情
MATLAB工作空间
包含在MATLAB中通过命令窗口显式或通过运行.m
文件隐式创建的所有变量。向MATLAB工作区添加变量的最简单方法是直接在命令窗口中键入,如
>> A = 1
A =
1
它将变量A
添加到工作区,并为其赋值1
。更简单的方法是简单地键入1
如下
>> 1
ans =
1
它将变量ans
添加到值为1
的工作区中。对于MATLAB执行的任何未明确指定给变量的命令,默认工作区变量是ans
MATLAB中的“工作空间浏览器”显示有关当前在“工作空间”中的所有变量的信息
>> A = 5;
>> B = [6 8];
>> C = [3 6 7; 9 11 12];
>> D = eye(max(size(C)));
>> mfile_test.m
ans =
-2 1 2
4 6 7
function [A, C] = circle(r)
A = pi*r*r;
C = 2*pi*r;
end
>> circle(5)
ans =
78.5398
>> [A, C] = circle(5)
A =
78.5398
C =
31.4159
% Script developed to describe the relationship between the MATLAB
% workspace, m-files and Simulink
close all
clear all
% Initialise variables
start_time = 0;
stop_time = 10;
step_time = (stop_time - start_time) / 1000; % Creates 1000 + 1 points
% Choose k
k = 60;
% Execute Simulink model
sim('stackoverflow_model');
whos % To display variables returned from Simulink
% Plot results
figure;
plot(tout, yout, 'r');
title('Sample Plot');
xlabel('Time (s)');
ylabel('Output');
>> stackoverflow_script
Name Size Bytes Class Attributes
k 1x1 8 double
start_time 1x1 8 double
step_time 1x1 8 double
stop_time 1x1 8 double
tout 1001x1 8008 double
yout 1001x1 8008 double