メインコンテンツ

結果:


Adam Danz
Adam Danz
最後のアクティビティ: 2021 年 4 月 30 日

Prior to r2020b the height (number of rows) and width (number of columns) of an array or table can be determined by the size function,

array = rand(102, 16);
% Method 1
[dimensions] = size(array);
h = dimensions(1);
w = dimensions(2);
% Method 2
[h, w] = size(array); %#ok<*ASGLU>
% or
[h, ~] = size(array);
[~, w] = size(array);
% Method 3
h = size(array,1);
w = size(array,2);

In r2013b, the height(T) and width(T) functions were introduced to return the size of single dimensions for tables and timetables.

Starting in r2020b, height() and width() can be applied to arrays as an alternative to the size() function.

Continuing from the section above,

h = height(array)
% h =  102
w = width(array)
% w =  16

height() and width() can also be applied to multidimensional arrays including cell and structure arrays

mdarray = rand(4,3,20);
h = height(mdarray)
% h =  4
w = width(mdarray)
% w =  3

The expanded support of the height() and width() functions means,

  1. when reading code, you can no longer assume the variable T in height(T) or width(T) refers to a table or timetable
  2. greater flexibility in expressions such as the these, below
% C is a 1x4 cell array containing 4 matrices with different dimensions
rng('default')
C = {rand(5,2), rand(2,3), rand(3,4), rand(1,1)};
celldisp(C)
% C{1} =
%       0.81472      0.09754
%       0.90579       0.2785
%       0.12699      0.54688
%       0.91338      0.95751
%       0.63236      0.96489
% C{2} =
%       0.15761      0.95717      0.80028
%       0.97059      0.48538      0.14189
% C{3} =
%       0.42176      0.95949      0.84913      0.75774
%       0.91574      0.65574      0.93399      0.74313
%       0.79221     0.035712      0.67874      0.39223
% C{4} =
%       0.65548

What's the max number of rows in C?

maxRows1 = max(cellfun(@height,C))         % using height()
% maxRows1 =  5;
maxRows2 = max(cellfun(@(x)size(x,1),C))   % using size()
% maxRows2 =  5; 

What's the total number of columns in C?

totCols1 = sum(cellfun(@width,C))          % using width()
%totCols1 =  10
totCols2 = sum(cellfun(@(x)size(x,2),C))   % using size(x,2)
% totCols2 =  10

Attached is a live script containing the content of this post.

IFM
IFM
最後のアクティビティ: 2020 年 10 月 2 日

I often code snippets to students in the question description. I would like the students to be able to copy and paste these from the description into their solution, obviously all on the same web page. I thought this was the case before, but now Ctrl+C/V do not work and when I right click there is no copy/paste options. Is this not possible?

Adam Danz
Adam Danz
最後のアクティビティ: 2024 年 3 月 14 日

'
The Matlab r2020b release introduces the new horizontal ('_') and vertical (' | ') line marker symbols that are centered around the coordinate similarly to the plus marker ('+').
plot(x,y,'_')
plot(x,y,'|')
See the attached Live Script to reproduce all plots in this post.
'
Use case example 1: Days in August 2020 that COVID-19 cases (vertical ticks) and number of tests (horizontal ticks) increased from the previous day in countries with populations greater than 100M (4 countries eliminated for incomplete data).
'
Use case example 2: (An alternative to stacked bar plots) Number of power outages in 2005 across regions of the USA, broken down by calendar quarters.
Christopher Stapels
Christopher Stapels
最後のアクティビティ: 2020 年 9 月 29 日

One great thing about IoT projects is they are connected to the internet, and that creates an opportunity to collaborate at a distance. Here are resources to help you teach classes that involve remote learning.

  • Record and visualize your experiment's data in ThingSpeak channels. For example, this public soil monitor channel shows measurements from a sensor connected to a plant. You can see the ThingSpeak example pages for help getting your experiment connected.

Figure 1: Fitvirus sample results.

When you can’t make it into the lab, use ThingSpeak to monitor and control your lab equipment for experiments and for teaching.

  • When you use ThingSpeak channel values to control your hardware modes, students can run experiments from home, and even collaborate with others to control devices and collect data for analysis.

Figure 2: Sample ThingSpeak lab model.

  • Build a simulation model to deploy on hardware and control it remotely. Watch this video to see how you can do both simulation and deployment in the same Simulink model. You can also download the models used in the video.
  • Use ThingSpeak to analyze your data. Use the provided code templates (like this one for removing outliers from wind speed data) or custom MATLAB code to filter and analyze your data and schedule it to run at regular intervals.

regularFlag = isregular(data,'Time')

Please join Loren Shure for her live sessions on the MATLAB YouTube channel starting October 1st and continuing through November 19th. You know Loren from her popular blog Loren on the Art of MATLAB.

Chen Lin
Chen Lin
最後のアクティビティ: 2020 年 11 月 24 日

Solve coding problems. Improve MATLAB skills. Have fun. See details and register .

IFM
IFM
最後のアクティビティ: 2020 年 9 月 23 日

I get students to create some figures in MATLAB Grader. Is there anyway the students can save the figure on their computer? I have tried savefig and that doesn't seem to do anything.

Adam Danz
Adam Danz
最後のアクティビティ: 2020 年 9 月 22 日

Add a subtitle

Multi-lined titles have been supported for a long time but starting in r2020b, you can add a subtitle with its own independent properties to a plot in two easy ways.

  1. Use the new subtitle function: s=subtitle('mySubtitle')
  2. Use the new second argument to the title function: [t,s]=title('myTitle','mySubtitle')
figure()
tiledlayout(2,2)
% Method 1
ax(1) = nexttile;
th(1) = title('Pupil size'); 
sh(1) = subtitle('Happy faces');
ax(2) = nexttile;
th(2) = title('Pupil size'); 
sh(2) = subtitle('Sad faces');
% Method 2
ax(3) = nexttile;
[th(3), sh(3)] = title('Fixation duration', 'Happy faces'); 
ax(4) = nexttile;
[th(4), sh(4)] = title('Fixation duration', 'Sad faces'); 
set(ax, 'xticklabel', [], 'yticklabel', [],'xlim',[0,1],'ylim',[0,1])
% Set all title colors to orange and subtitles colors to purple.
set(th, 'Color', [0.84314, 0.53333, 0.1451])
set(sh, 'Color', [0, 0.27843, 0.56078])

Control title/Label alignment

Title and axis label positions can be changed via their Position, VerticalAlignment and HorizontalAlignment properties but this is usually clumsy and leads to other problems when trying to align the title or labels with an axis edge. For example, when the position units are set to 'data' and the axis limits change, the corresponding axis label will change position relative to the axis edges. If units are normalized and the axis position or size changes, the corresponding label will no longer maintain its relative position to the axis, and that's assuming the normalized position was computed correctly in the first place.

Starting in r2020b, title and axis label alignment can be set to center|left|right, relative to the axis edges.

  • TitleHorizontalAlignment is a property of the axis: h.TitleHorizontalAlignment='left';
  • LabelHorizontalAlignment is a property of the ruler object that defines the x | y | z axis: h.XAxis.LabelHorizontalAlignment='left';
% Create data
x = randi(50,1,100)'; 
y = x.*[.2, -.2] + (rand(numel(x),2)-.5)*10; 
gray = [.65 .65 .65];
% Plot comparison between columns of y
figure()
tiledlayout(2,2,'TileSpacing','none')
ax(1) = nexttile(1);
plot(x, y(:,1), 'o', 'color', gray)
lsline
ylabel('Y1 (units)')
title('Regression','Y1 & Y2 separately')
ax(2) = nexttile(3);
plot(x, y(:,2), 'd', 'color', gray)
lsline
xlabel('X Label (units)')
ylabel('Y2 (units)')
grid(ax, 'on')
linkaxes(ax, 'x')
%  Move title and labels leftward
set(ax, 'TitleHorizontalAlignment', 'left')
set([ax.XAxis], 'LabelHorizontalAlignment', 'left')
set([ax.YAxis], 'LabelHorizontalAlignment', 'left')
% Combine the two comparisons into plot and flip the second 
% y-axis so trend are in the same direction
ax(3) = nexttile([2,1]);
yyaxis('left')
plot(x, y(:,1), 'o')
ylim([-6,16])
lsline
xlabel('X Label (units)')
ylabel('Y1 (units) \rightarrow')
yyaxis('right')
plot(x, y(:,2), 'd')
ylim([-16,6])
lsline
ylabel('\leftarrow Y2 (units)')
title('Direct comparison','(Y2 axis flipped)')
set(ax(3),  'YDir','Reverse')
% Align the ylabels with the minimum axis limit to emphasize the
% directions of each axis. Keep the title and xlabel centered
ax(3).YAxis(1).LabelHorizontalAlignment = 'left';
ax(3).YAxis(2).LabelHorizontalAlignment = 'right';
ax(3).TitleHorizontalAlignment = 'Center';       % not needed; default value.
ax(3).XAxis.LabelHorizontalAlignment = 'Center'; % not needed; default value.
It's pretty odd how a solution that uses more characters than usual can be the "leading solution" of a Cody problem and have the least size. Compare these two codes that find the sum of integers from 1 to 2^x, which one uses fewer characters, thus should be the better solution?
function y = sum_int(x)
regexp '' '(?@y=sum(1:2^x);)'
end
function ans = sum_int(x)
sum(1:2^x)
end
Jiro Doke
Jiro Doke
最後のアクティビティ: 2020 年 8 月 21 日

Take a look at this video on remote access robotics lab. It allows students to submit algorithms and have them run on a robot completely remotely.

Robotarium

Here (16:56) is where the submission process is explained.

Professor Christophe Demaziere from Chalmers University of Technology, Sweden created a short course on nuclear reactor modeling.

  • The course followed a flipped and hybrid approach last year but will most likely be taught entirely online in future due to Covid-19 pandemic.
  • MATLAB Grader greatly facilitates the Online nature of Christophe's courses.
  • Student Feedback was also very positive saying that they learned better compared to the traditional approach.

More details in the article

I'm trying to list out some videos, courses, and other links to learn more about Machine and Deep Learning. Here are some links to getting started with AI/Machine Learning/Deep Learning with MATLAB:

Artificial Intelligence:

Machine Learning:

Data Analytics:

Neural Networks and Deep Learning:

If any of you are using other resources from the MathWorks website or elsewhere, please consider adding it below as a comment.

Thanks!

Hello,

I am a student. I am currently looking into graph neural networks (GNNs). My domain is electrical power systems. In electrical power systems, it is extremely important that we get an accurate desired output numerical value of electrical data from a neural network.

1) I have a basic question. Consider an electrical grid network of nodes. I am trying to learn this electrical grid network data using Graph Neural Network (GNN). Every node of a GNN accumulates data from neighboring nodes, then processes it by a few steps of an algorithm, and passes it to the next layer. Finally, data is passed through a non-linearity and then to the output layer of the GNN.

But, if I feed electrical data to the above process, the original value of data at every node gets manipulated by several processing operations, and especially after passing the manipulated data through a non-linearity at the final stage, the output is obtained only in the form of 1's and 0s. Hence, the original electrical data value at every node is totally lost. On the contrary, I am expecting an output of an "accurate" value of electrical data similar to original value electrical data at every node of the network.

How to address the above problem? Please explain systematically if possible. This is a genuine basic question.

2) Also, does anyone have a clue, why Graph Neural Networks (GNNs) have not been introduced yet as a toolbox or in general in Matlab?

Help and opinion on above questions would be greatly appreciated.

Hans Scharler
Hans Scharler
最後のアクティビティ: 2021 年 10 月 1 日

Is anyone using the MATLAB Discord channel?
Shogo
Shogo
最後のアクティビティ: 2020 年 8 月 21 日

help

Thank you for your helping. I'm trying to import csv files form a folder, however it does not work.

The following code might be wrong.. fname=mtlb_dir('Users/shogo/Left_Leg_Single-Leg_Landing/SLLExport/*.exp')

I appreciate it if you help,

Sincerely, Shogo

This year, the 3-day MATLAB workshop is going Virtual: October 11-13 2020. (Sunday evening - Tuesday afternoon, CST). If you're teaching science, math, engineering or related disciplines, consider signing up now. The application deadline is July 31st. Apply for the workshop: Workshop Application

Details: Name: Teaching Online Computation Using MATLAB (Virtual) Date: October 11-13 2020 (Sunday afternoon -- Tuesday mid-afternoon, US time zones) Location: Zoom session Audience: Educators teaching undergraduate and graduate-level science, math, engineering and related disciplines

At the 2020 virtual workshop, you’ll have opportunities to • Curriculum: Upgrade your curriculum with a focus on transitioning to online learning • Mentoring: Meet in 1-on-1 coaching sessions with faculty, education professionals, and MATLAB experts • Publish and Cite: Get your teaching activities peer reviewed and citable for inclusion in your CV • Community: Collaborate with and build connections to a network of educator peers all working on impactful computational skill development in their courses • Learn: Learn how to embed new MATLAB tools in courses to improve student learning (Note that the workshop will use online technologies to enable 1-on-1 mentoring, group work, and community building. As in past years, the focus will be curriculum development, less presentation.)

In addition, you’ll have the chance to learn how to incorporate MATLAB Live Scripts, MATLAB Online, MATLAB Grader, and more.

This virtual will include working groups for building your curriculum. Participants will be matched with like educators.

Apply now to save your spot and help the conveners plan effective groups.

The workshop hosts will review applications and send acceptances status by early August.

Looking forward to your participation in the workshop, Cathy Manduca, Executive Director, SERC Lisa Kempler, Sponsor, MathWorks Don Baker, McGill University, workshop convener Dan Burleson, University of Houston, workshop convener and review editor Kelly Roos, Bradley University, workshop convener and reviewer Kristi Closser, California State University, Fresno, workshop convener and reviewer

P.S. For reference, 2019 workshop program

Jiro Doke
Jiro Doke
最後のアクティビティ: 2020 年 7 月 1 日

Here's an thread on comparing various types of instructional labs (on-campus, virtual, remote, kits). Each type has pros/cons and things that you need to consider.

https://twitter.com/RebeccaEE/status/1237561015350386690

Rik
Rik
最後のアクティビティ: 2024 年 9 月 17 日

Similar to what has happened with the wishlist threads (#1 #2 #3 #4 #5), the "what frustrates you about MATLAB" thread has become very large. This makes navigation difficult and increases page load times.
So here is the follow-up page.
What should you post where?
Wishlist threads (#1 #2 #3 #4 #5): bugs and feature requests for Matlab Answers
Frustation threads (#1 #2): frustations about usage and capabilities of Matlab itself
Missing feature threads (#1 #2): features that you whish Matlab would have had
Next Gen threads (#1): features that would break compatibility with previous versions, but would be nice to have
@anyone posting a new thread when the last one gets too large (about 50 answers seems a reasonable limit per thread), please update this list in all last threads. (if you don't have editing privileges, just post a comment asking someone to do the edit)
Adam Danz
Adam Danz
最後のアクティビティ: 2021 年 4 月 29 日

Starting in r2020a , you can change the mouse pointer symbol in apps and uifigures.

The Pointer property of a figure defines the cursor’s default pointer symbol within the figure. You can also create your own pointer symbols (see part 3, below).

Part 1. How to define a default pointer symbol for a uifigure or app

For figures or uifigures, set the pointer property when you define the figure or change the pointer property using the figure handle.

% Set pointer when creating the figure
uifig = uifigure('Pointer', 'crosshair');
% Change pointer after creating the figure
uifig.Pointer = 'crosshair';

For apps made in AppDesigner, you can either set the pointer from the Design View or you can set the pointer property of the app’s UIFigure from the startup function using the second syntax shown above.

Part 2. How to change the pointer symbol dynamically

The pointer can be changed by setting specific conditions that trigger a change in the pointer symbol.

For example, the pointer can be temporarily changed to a busy-symbol when a button is pressed. This ButtonPushed callback function changes the pointer for 1 second.

function WaitasecondButtonPushed(app, event)
   % Change pointer for 1 second.
   set(app.UIFigure, 'Pointer','watch')
   pause(1)
   % Change back to default.
   set(app.UIFigure, 'Pointer','arrow')
   app.WaitasecondButton.Value = false;
end

The pointer can be changed every time it enters or leaves a uiaxes or any plotted object within the uiaxes. This is controlled by a set of pointer management functions that can be set in the app’s startup function.

iptSetPointerBehavior(obj,pointerBehavior) allows you to define what happens when the pointer enters, leaves, or moves within an object. Currently, only axes and axes objects seem to be supported for UIFigures.

iptPointerManager(hFigure,'enable') enables the figure’s pointer manager and updates it to recognize the newly added pointer behaviors.

The snippet below can be placed in the app’s startup function to change the pointer to crosshairs when the pointer enters the outerposition of a uiaxes and then change it back to the default arrow when it leaves the uiaxes.

% Define pointer behavior when pointer enter axes
pm.enterFcn = @(~,~) set(app.UIFigure, 'Pointer', 'crosshair');
pm.exitFcn  = @(~,~) set(app.UIFigure, 'Pointer', 'arrow');
pm.traverseFcn = [];
iptSetPointerBehavior(app.UIAxes, pm)
% Enable pointer manager for app
iptPointerManager(app.UIFigure,'enable'); 

Any function can be triggered when entering/exiting an axes object which makes the pointer management tools quite powerful. This snippet below defines a custom function cursorPositionFeedback() that responds to the pointer entering/exiting a patch object plotted within the uiaxes. When the pointer enters the patch, the patch color is changed to red, the pointer is changed to double arrows, and text appears in the app’s text area. When the pointer exits, the patch color changes back to blue, the pointer changes back to crosshairs, and the text area is cleared.

% Plot patch on uiaxes
hold(app.UIAxes, 'on')
region1 = patch(app.UIAxes,[1.5 3.5 3.5 1.5],[0 0 5 5],'b','FaceAlpha',0.07,...
    'LineWidth',2,'LineStyle','--','tag','region1');
% Define pointer behavior for patch
pm.enterFcn = @(~,~) cursorPositionFeedback(app, region1, 'in');
pm.exitFcn  = @(~,~) cursorPositionFeedback(app, region1, 'out');
pm.traverseFcn = [];
iptSetPointerBehavior(region1, pm)
% Enable pointer manager for app
iptPointerManager(app.UIFigure,'enable');
function cursorPositionFeedback(app, hobj, inout)
% When inout is 'in', change hobj facecolor to red and update textbox.
% When inout is 'out' change hobj facecolor to blue, and clear textbox.
% Check tag property of hobj to identify the object.
switch lower(inout)
    case 'in'
        facecolor = 'r';
        txt = 'Inside region 1';
        pointer = 'fleur';
    case 'out'
        facecolor = 'b';
        txt = '';
        pointer = 'crosshair';
end
hobj.FaceColor = facecolor;
app.TextArea.Value = txt;
set(app.UIFigure, 'Pointer', pointer)
end  

The app showing the demo below is attached.

Part 3. Create your own custom pointer symbol

  1. Set the figure’s pointer property to ‘custom’.
  2. Set the figure’s PointerShapeCData property to the custom pointer matrix. A custom pointer is defined by a 16x16 or 32x32 matrix where NaN values are transparent, 1=black, and 2=white.
  3. Set the figure’s PointerShapeHotSpot to [m,n] where m and n are the coordinates that define the tip or "hotspot" of the matrix.

This demo uses the attached mat file to create a black hand pointer symbol.

iconData = load('blackHandPointer.mat');
uifig = uifigure(); 
uifig.Pointer = 'custom'; 
uifig.PointerShapeCData = iconData.blackHandIcon; 
uifig.PointerShapeHotSpot = iconData.hotspot;

Also see Jiro's pointereditor() function on the file exchange which allows you to draw your own pointer.

Michael Carone
Michael Carone
最後のアクティビティ: 2020 年 7 月 9 日

As an environment for modeling, simulating, and testing dynamic systems, Simulink is used for:

Simulink is now available in a web browser as Simulink Online.

Simulink Online is available to anyone with access to MATLAB Online (see supported license types here) and a Simulink license.

Just sign into MATLAB Online and either start Simulink or open a Simulink model.

Learn more about Simulink Online at the product page on our website.

Simulink Online currently supports the following toolboxes, with more to be added in the future!

  • Simulink
  • Stateflow
  • Simscape
  • Simscape Electrical
  • Simscape Multibody
  • Simulink Control Design
  • DSP System Toolbox