Main Content

Results for


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

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

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)

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.

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

MathWorks gave a perspective on 'Bridging the Technology Readiness Gap with Simulation and Virtual/Remote Testbenches' at the Opal-RT RT20 Panel Session on The Role of Real-Time Simulation in Education. Listen to a recording of the panel session, and also hear perspectives from Quanser, Hydro-Quebec, and RWTH Aachen, by registering for the RT20 conference at the following link .

The EMEA (Europe, Middle East and Africa) Academic Engineering Team are hosting a series of live online webinars every Tuesday and Wednesday. Get up to speed with online teaching and research with MATLAB and access ready-to-use resources.

Watch the introductory video and register here

Where is very courses and how to catch the courses

In this article, we discuss how educators can adopt simulation, alternative hardware, and other teaching resources to transition lab-based classes to distance learning: https://medium.com/mathworks/tips-for-moving-your-lab-based-classes-online-1cb53e90ee00.

Do you teach a lab-based class? Please share your thoughts, questions, experience, and feedback on these ideas here. I also welcome you to invite your colleagues to join the discussion here.

One community within MathWorks that has been helping students continue their learning is MATLAB Student Ambassadors. Despite new challenges with transitioning to distance learning, student ambassadors have done a truly amazing job. In a blog that was published recently, I discuss 3 examples of the great things that our student ambassadors have done to aid distance learning. Click here to read the blog. I hope after reading this blog you share my level of admiration for these students.

Student Ambassador at University of Houston hosting a fun and informative virtual event.

We are excited to announce that File Exchange now awards reputation points to the authors and you can view the points and rankings by week, month, year or all-time on the new leaderboard .
Reputation point is commonly used in many online communities to build trust and show appreciation to contributors. File Exchange rewards reputation points to authors who submit files, but it's definitely not easy to earn! You earn points when your files are downloaded or rated by other community members. Therefore, you should be very proud of yourself no matter you have 10 points or 10,000 points. It's the recognition from the community. See table below for detailed rules:
Now that we have reputation points on File Exchange, we introduced the short-term leaderboard to better view the points and rankings. You can filter by 7-day, 30-day, 365-day, and all-time, which helps you understand who is more active recently or who is a long-time contributor.
We hope the reputation and new leaderboard will contribute to the growth and success of File Exchange community. Your feedback is extremely valuable to us. Simply reply to this article if you have any questions, comments, or suggestions.
Chen Lin
Chen Lin
Last activity on 11 May 2020

Today, I'm spotlighting Rik, our newest and the 31st MVP in MATLAB Answers. Two weeks ago, we just celebrated Ameer Hamza for reaching the MVP milestone. Today, we are thrilled that we have another new MVP!

Since his first answer in Feb 2017, Rik has been contributing high-quality answers every quarter!

Besides those high-quality answers, Rik so far has submitted 21 files to File Exchange, one of which was chosen by MathWorks as the 'Pick of the Week'. Check the shining badge below.

Congratulations Rik! Thank you for your hard work and outstanding contributions.

hi how to apply single stream into multiple channels in fft simulink simulation from workspace

Sir how can we use Image processing in the Distance Learning

I wanted to briefly share my experience in transitioning from a hands-on lab course to a virtual lab in MATLAB. Here at UMass Amherst, Mechanical & Industrial Engineering, we have a required undergraduate lab sequence, one during junior year and another during senior year. I teach the 2nd course, MIE 402, with a focus on measurements, data acquisition, system dynamics, and control.
The main idea behind our labs, in addition to the all too important hands-on experience, is to provide the students with a platform where they can validate and understand limitations of theoretical models from experimental data.
While the hands-on aspect was lost, we were able to create virtual experiments that consisted on Simulink models saved as protected files. In our protected models, students were able to assign input variables, decide on simulation parameters (e.g., integration parameters), and have certain outputs saved to the workspace. The key for making this a challenging lab was twofold: (1) Students were not told about the level of modelling detail inside the protected file (e.g., were dry friction or electrical inductance included?) and (2) each student was assigned a different set of model parameters based on their student ID (via a predefined table inside the protected file). The 2nd point was especially impactful as students felt as if they are working on their own experiment.
We developed virtual labs for a tuned mass damper and a DC motor experiments. Feedback from the students showed that they missed the hands-on experience but really liked being able to interact, as many times as needed, with the virtual lab at their time frame of choice, and have the ability to interact with us (grad assistant and myself) then re-run the experiment to test new ideas.
Some future developments that could significantly enhance the educational impact of such virtual labs would be the addition of real-time animation and increased level of modelling (e.g., data acquisition effects, electromagnetics, etc.’). At UMass we presently do not have access to the entire suite of MATLAB tools, something that prevented us from including these ideas in our virtual labs.
This would have not been possible without Andy Bartlett (tremendous Simulink help) and Div Tiwari (quickly getting us access to required tools).

Professor Martin Trauth has shared lots of teaching resources on his MATLAB Recipes for Earth Sciences site. Now with the changes created by COVID, he's shifting his courses to online, including at-home phone-based data collection. Read how he's doing this and find additional resources: Teaching Data Analysis with MATLAB in COVID-19 Times (Trauth, Potsdam)

Today, I’m spotlighting Ameer Hamza , our newest MVP in Answers. Achieving MVP status is considered as a significant milestone and we know how hard it is to obtain 5,000 reputation points. Did you know Ameer earned 3000+ points and provided 1000+ answers in just 2 months? If you go to the leaderboard , you will find that Ameer ranks 1st in both 7-day leaderboard and 30-day leaderboard.

Due to Covid-19 pandemic, people have to stay at home and rely more on community for help. We have seen a significant increase in new questions per day. Luckily, we have a vibrant community! Many awesome contributors like Ameer double their effort to help people in need. Join me to thank Ameer and many other contributors!

A common question you may have when integrating MATLAB Grader into your LMS using the LTI standard is what information is being sent to MATLAB Grader from your LMS?

First, please familiarize yourself with the LTI specification on the IMS Global website: http://www.imsglobal.org/specs/ltiv1p1/implementation-guide

Next, take a look at the documentation we provide on LMS integration that is specific to your platform/vendor: https://www.mathworks.com/help/matlabgrader/lms-integration.html

MathWorks does not require personally identifiable information. More specifically, here are the standard LTI fields that we DO NOT want nor collect, as opposed to what fields we DO collect.

We do NOT want your LMS to send us: - user_image - lis_person_name_given - lis_person_name_family - lis_person_name_full - lis_person_contact_email

We DO require from your LMS: - roles

The other LTI fields listed in the specification are not related to personally identifiable information, and may be required for the LTI session to be launched successfully. For further questions about what is contained in the LTI specification, please refer to the specification and implementation guide provided by IMS, or contact the vendor of your LMS.

Starting in r2020a, AppDesigner buttons and TreeNodes can display animated GIFs, SVG, and truecolor image arrays.

Every component in the App above is either a Button or a TreeNode!

Prior to r2020a the icon property of buttons and TreeNodes in AppDesigner supported JPEG, PNG, or GIF image files specified by a character vector or string array but did not support animation.

Here's how to display an animated GIF, SVG, or truecolor image in an App button or TreeNode starting in r2020a. And for the record, "GIF" is pronounced with a hard-g .

Display an animated GIF

Select the button or TreeNode from within AppDesigner > Design View and navigate to Component Browser > Inspector > Button dropdown list of properties (shown below). Select an animated GIF file and set the text and icon alignment properties.

To set the icon property programmatically,

app.Button.Icon = 'launch.gif';  % or "launch.gif"

The filename can be an image file on the Matlab path (see addpath ) or a full path to an image file.

Display SVG

Use “scalable vector graphics” files for high-resolution images that are scaled to different sizes while preserving their shape and retaining their clarity. A quick and easy way to remember which plotting function is assigned to each button in an app is to assign an image of the plot to the button.

After creating the figure, expand the axes by setting the position or outerposition property to [0 0 1 1] in normalized units and save the figure using File > Save as and select svg format. Save the image to the folder containing your app. Then follow the same procedure as animated GIFs.

Display truecolor image

A truecolor image comes in the form of an [m x n x 3] array where each m x n pixel color is specified by an RGB triplet (read more) . This feature allows you to dynamically create a digital image or to upload an image from a mat file rather than an image file.

In this example, a progress bar is created within the uibutton callback function and it’s updated within a loop. For a complete demo of this feature see this comment .

% Button pushed function: ProcessDataButton
function ProcessDataButtonPushed(app, event)
    % Change button name to "Processing"
    app.ProcessDataButton.Text = 'Processing...';
    % Put text on top of icon
    app.ProcessDataButton.IconAlignment = 'bottom';
    % Create waitbar with same color as button
    wbar = permute(repmat(app.ProcessDataButton.BackgroundColor,15,1,200),[1,3,2]);
    % Black frame around waitbar
    wbar([1,end],:,:) = 0;
    wbar(:,[1,end],:) = 0;
    % Load the empty waitbar to the button
    app.ProcessDataButton.Icon = wbar;
    % Loop through something and update waitbar
    n = 10;
    for i = 1:n
        % Update image data (royalblue)
        % if mod(i,10)==0 % update every 10 cycles; improves efficiency
         currentProg = min(round((size(wbar,2)-2)*(i/n)),size(wbar,2)-2);
         RGB = app.ProcessDataButton.Icon;
         RGB(2:end-1, 2:currentProg+1, 1) = 0.25391; % (royalblue)
         RGB(2:end-1, 2:currentProg+1, 2) = 0.41016;
         RGB(2:end-1, 2:currentProg+1, 3) = 0.87891;
           app.ProcessDataButton.Icon = RGB;
          % Pause to slow down animation
          pause(.3)
          % end
      end
      % remove waitbar
      app.ProcessDataButton.Icon = '';
      % Change button name
      app.ProcessDataButton.Text = 'Process Data';
  end

The for-loop above was improved on Feb-11-2022.

Credit for the black & teal GIF icons: lordicon.com

If a large number of fair N-sided dice are rolled, the average of the simulated rolls is likely to be close to the mean of 1,2,...N i.e. the expected value of one die. For example, the expected value of a 6-sided die is 3.5.
Given N, simulate 1e8 N-sided dice rolls by creating a vector of 1e8 uniformly distributed random integers. Return the difference between the mean of this vector and the mean of integers from 1 to N.
function dice_diff = loln(N)
A=randi([1,N],1e8,1)
M=mean(A)
B=1:N
m=mean(B)
dice_diff =abs(M-m);
end
Here is my code, but it can't work out as it needs too long time to creat A.