Resultados de
Hello MATLAB Central, this is my first article.
My name is Yann. And I love MATLAB.
I also love HTTP (i know, weird fetish)
So i started a conversation with ChatGPT about it:
gitclone('https://github.com/yanndebray/HTTP-with-MATLAB');
cd('HTTP-with-MATLAB')
http_with_MATLAB
I'm not sure that this platform is intended to clone repos from github, but i figured I'd paste this shortcut in case you want to try out my live script http_with_MATLAB.m
A lot of what i program lately relies on external web services (either for fetching data, or calling LLMs).
So I wrote a small tutorial of the 7 or so things I feel like I need to remember when making HTTP requests in MATLAB.
Let me know what you think
Hi,
I have some problem, I want to upload my data that sample rate at 500HZ, every sevral seconds.
My data include 12 bytes, and it measure 500HZ, for example for 15 seconds I coolect 15*500*12 = 84KB.
Can I upload this data to ThingSpeak? It is possible to use with Free acount (I am student and this is my project)
How can help me..

I designed and stitched this last week! It uses a total of 20 DMC thread colors, and I frequently stitched with two colors at once to create the gradient.
Did you know that function double with string vector input significantly outperforms str2double with the same input:
x = rand(1,50000);
t = string(x);
tic; str2double(t); toc
tic; I1 = str2double(t); toc
tic; I2 = double(t); toc
isequal(I1,I2)
Recently I needed to parse numbers from text. I automatically tried to use str2double. However, profiling revealed that str2double was the main bottleneck in my code. Than I realized that there is a new note (since R2024a) in the documentation of str2double:
"Calling string and then double is recommended over str2double because it provides greater flexibility and allows vectorization. For additional information, see Alternative Functionality."
Hey cody fellows :-) !
I recently created two problem groups, but as you can see I struggle to set their cover images :
What is weird given : 
- I already did it successfully twice in the past for my previous groups ;
- If you take one problem specifically, Problem 60984. Mesh the icosahedron for instance, you can normally see the icon of the cover image in the top right hand corner, can't you ?
- I always manage to set cover images to my contributions (mostly in the filexchange).
I already tried several image formats, included .png 4/3 ratio, but still the cover images don't set.
Could you please help me to correctly set my cover images ?
Thank you.
Nicolas
Resharing a fun short video explaining what MATLAB is. :)
Is there a hardware support package available for the MP series?



t = turtle(); % Start a turtle
t.forward(100); % Move forward by 100
t.backward(100); % Move backward by 100
t.left(90); % Turn left by 90 degrees
t.right(90); % Tur right by 90 degrees
t.goto(100, 100); % Move to (100, 100)
t.turnto(90); % Turn to 90 degrees, i.e. north
t.speed(1000); % Set turtle speed as 1000 (default: 500)
t.pen_up(); % Pen up. Turtle leaves no trace.
t.pen_down(); % Pen down. Turtle leaves a trace again.
t.color('b'); % Change line color to 'b'
t.begin_fill(FaceColor, EdgeColor, FaceAlpha); % Start filling
t.end_fill(); % End filling
t.change_icon('person.png'); % Change the icon to 'person.png'
t.clear(); % Clear the Axes
classdef turtle < handle
    properties (GetAccess = public, SetAccess = private)
        x = 0
        y = 0
        q = 0
    end
    properties (SetAccess = public)
        speed (1, 1) double = 500
    end
    properties (GetAccess = private)
        speed_reg = 100
        n_steps = 20
        ax
        l
        ht
        im
        is_pen_up = false
        is_filling = false
        fill_color
        fill_alpha
    end
    methods
        function obj = turtle()
            figure(Name='MATurtle', NumberTitle='off')
            obj.ax = axes(box="on");
            hold on,
            obj.ht = hgtransform();
            icon = flipud(imread('turtle.png'));
            obj.im = imagesc(obj.ht, icon, ...
                XData=[-30, 30], YData=[-30, 30], ...
                AlphaData=(255 - double(rgb2gray(icon)))/255);
            obj.l = plot(obj.x, obj.y, 'k');
            obj.ax.XLim = [-500, 500];
            obj.ax.YLim = [-500, 500];
            obj.ax.DataAspectRatio = [1, 1, 1];
            obj.ax.Toolbar.Visible = 'off';
            disableDefaultInteractivity(obj.ax);
        end
        function home(obj)
            obj.x = 0;
            obj.y = 0;
            obj.ht.Matrix = eye(4);
        end
        function forward(obj, dist)
            obj.step(dist);
        end
        function backward(obj, dist)
            obj.step(-dist)
        end
        function step(obj, delta)
            if numel(delta) == 1
                delta = delta*[cosd(obj.q), sind(obj.q)];
            end
            if obj.is_filling
                obj.fill(delta);
            else
                obj.move(delta);
            end            
        end
        function goto(obj, x, y)
            dx = x - obj.x;
            dy = y - obj.y;
            obj.turnto(rad2deg(atan2(dy, dx)));
            obj.step([dx, dy]);
        end
        function left(obj, q)
            obj.turn(q);
        end
        function right(obj, q)
            obj.turn(-q);
        end
        function turnto(obj, q)
            obj.turn(obj.wrap_angle(q - obj.q, -180));
        end
        function pen_up(obj)
            if obj.is_filling
                warning('not available while filling')
                return
            end
            obj.is_pen_up = true;
        end
        function pen_down(obj, go)
            if obj.is_pen_up
                if nargin == 1
                    obj.l(end+1) = plot(obj.x, obj.y, Color=obj.l(end).Color);
                else
                    obj.l(end+1) = go;
                end
                uistack(obj.ht, 'top')
            end
            obj.is_pen_up = false;
        end
        function color(obj, line_color)
            if obj.is_filling
                warning('not available while filling')
                return
            end
            obj.pen_up();
            obj.pen_down(plot(obj.x, obj.y, Color=line_color));
        end
        function begin_fill(obj, FaceColor, EdgeColor, FaceAlpha)
            arguments
                obj
                FaceColor = [.6, .9, .6];
                EdgeColor = [0 0.4470 0.7410];
                FaceAlpha = 1;
            end
            if obj.is_filling
                warning('already filling')
                return
            end
            obj.fill_color = FaceColor;
            obj.fill_alpha = FaceAlpha;
            obj.pen_up();
            obj.pen_down(patch(obj.x, obj.y, [1, 1, 1], ...
                EdgeColor=EdgeColor, FaceAlpha=0));
            obj.is_filling = true;
        end
        function end_fill(obj)
            if ~obj.is_filling
                warning('not filling now')
                return
            end
            obj.l(end).FaceColor = obj.fill_color;
            obj.l(end).FaceAlpha = obj.fill_alpha;
            obj.is_filling = false;
        end
        function change_icon(obj, filename)
            icon = flipud(imread(filename));
            obj.im.CData = icon;
            obj.im.AlphaData = (255 - double(rgb2gray(icon)))/255;
        end
        function clear(obj)
            obj.x = 0;
            obj.y = 0;
            delete(obj.ax.Children(2:end));
            obj.l = plot(0, 0, 'k');
            obj.ht.Matrix = eye(4);
        end
    end
    methods (Access = private)
        function animated_step(obj, delta, q, initFcn, updateFcn)
            arguments
                obj
                delta
                q
                initFcn = @() []
                updateFcn = @(~, ~) []
            end
            dx = delta(1)/obj.n_steps;
            dy = delta(2)/obj.n_steps;
            dq = q/obj.n_steps;
            pause_duration = norm(delta)/obj.speed/obj.speed_reg;
            initFcn();
            for i = 1:obj.n_steps
                updateFcn(dx, dy);
                obj.ht.Matrix = makehgtform(...
                    translate=[obj.x + dx*i, obj.y + dy*i, 0], ...
                    zrotate=deg2rad(obj.q + dq*i));
                pause(pause_duration)
                drawnow limitrate
            end
            obj.x = obj.x + delta(1);
            obj.y = obj.y + delta(2);
        end
        function obj = turn(obj, q)
            obj.animated_step([0, 0], q);
            obj.q = obj.wrap_angle(obj.q + q, 0);
        end
        function move(obj, delta)
            initFcn = @() [];
            updateFcn = @(dx, dy) [];
            if ~obj.is_pen_up
                initFcn = @() initializeLine();
                updateFcn = @(dx, dy) obj.update_end_point(obj.l(end), dx, dy);
            end
            function initializeLine()
                obj.l(end).XData(end+1) = obj.l(end).XData(end);
                obj.l(end).YData(end+1) = obj.l(end).YData(end);
            end
            obj.animated_step(delta, 0, initFcn, updateFcn);
        end
        function obj = fill(obj, delta)
            initFcn = @() initializePatch();
            updateFcn = @(dx, dy) obj.update_end_point(obj.l(end), dx, dy);
            function initializePatch()
                obj.l(end).Vertices(end+1, :) = obj.l(end).Vertices(end, :);
                obj.l(end).Faces = 1:size(obj.l(end).Vertices, 1);
            end
            obj.animated_step(delta, 0, initFcn, updateFcn);
        end
    end
    methods (Static, Access = private)
        function update_end_point(l, dx, dy)
            l.XData(end) = l.XData(end) + dx;
            l.YData(end) = l.YData(end) + dy;
        end
        function q = wrap_angle(q, min_angle)
            q = mod(q - min_angle, 360) + min_angle;
        end
    end
end
I would like to zoom directly on the selected region when using  on my image created with image or imagesc. First of all, I would recommend using image or imagesc and not imshow for this case, see comparison here: Differences between imshow() and image()? However when zooming Stretch-to-Fill behavior happens and I don't want that. Try range zoom to image generated by this code:
 on my image created with image or imagesc. First of all, I would recommend using image or imagesc and not imshow for this case, see comparison here: Differences between imshow() and image()? However when zooming Stretch-to-Fill behavior happens and I don't want that. Try range zoom to image generated by this code:
 on my image created with image or imagesc. First of all, I would recommend using image or imagesc and not imshow for this case, see comparison here: Differences between imshow() and image()? However when zooming Stretch-to-Fill behavior happens and I don't want that. Try range zoom to image generated by this code:
 on my image created with image or imagesc. First of all, I would recommend using image or imagesc and not imshow for this case, see comparison here: Differences between imshow() and image()? However when zooming Stretch-to-Fill behavior happens and I don't want that. Try range zoom to image generated by this code:fig = uifigure;
ax = uiaxes(fig);
im = imread("peppers.png");
h = imagesc(im,"Parent",ax);
axis(ax,'tight', 'off')
I can fix that with manualy setting data aspect ratio:
daspect(ax,[1 1 1])
However, I need this code to run automatically after zooming. So I create zoom object and ActionPostCallback which is called everytime after I zoom, see zoom - ActionPostCallback. 
z = zoom(ax);
z.ActionPostCallback = @(fig,ax) daspect(ax.Axes,[1 1 1]);
If you need, you can also create ActionPreCallback which is called everytime before I zoom, see zoom - ActionPreCallback.
z.ActionPreCallback = @(fig,ax) daspect(ax.Axes,'auto');
Code written and run in R2025a.
I'm facing an issue where my Thinkspeak graph is not displaying, even though I'm using exactly the same code as my friend. The code works perfectly in their Thinkspeak account, but not on mine. I've checked the API keys, channel settings, and data formats, but everything seems similar. Has anyone else faced this problem, or do you have tips on what to check next? Suggestions are welcome!
Hi!
I'm having trouble sending data to a channel using MQTT. I'm using a program that was working perfectly until just a few days ago, but after making some minor changes yesterday, it stopped working. I’ve also tested it manually using the MQTTX client. If I send data using CURL and GET, it works fine. 
It’s a bit strange...
Thankfully,
Ernesto.
I am thrilled python interoperability now seems to work for me with my APPLE M1 MacBookPro and MATLAB V2025a. The available instructions are still, shall we say, cryptic. Here is a summary of my interaction with GPT 4o to get this to work.
===========================================================
MATLAB R2025a + Python (Astropy) Integration on Apple Silicon (M1/M2/M3 Macs)
===========================================================
Author: D. Carlsmith, documented with ChatGPT
Last updated: July 2025
This guide provides full instructions, gotchas, and workarounds to run Python 3.10 with MATLAB R2025a (Apple Silicon/macOS) using native ARM64 Python and calling modules like Astropy, Numpy, etc. from within MATLAB.
===========================================================
Overview
===========================================================
- MATLAB R2025a on Apple Silicon (M1/M2/M3) runs as "maca64" (native ARM64).
- To call Python from MATLAB, the Python interpreter must match that architecture (ARM64).
- Using Intel Python (x86_64) with native MATLAB WILL NOT WORK.
- The cleanest solution: use Miniforge3 (Conda-forge's lightweight ARM64 distribution).
===========================================================
1. Install Miniforge3 (ARM64-native Conda)
===========================================================
In Terminal, run:
    curl -LO https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
    bash Miniforge3-MacOSX-arm64.sh
Follow prompts:
- Press ENTER to scroll through license.
- Type "yes" when asked to accept the license.
- Press ENTER to accept the default install location: ~/miniforge3
- When asked:
    Do you wish to update your shell profile to automatically initialize conda? [yes|no]
  Type: yes
===========================================================
2. Restart Terminal and Create a Python Environment for MATLAB
===========================================================
Run the following:
    conda create -n matlab python=3.10 astropy numpy -y
    conda activate matlab
Verify the Python path:
    which python
Expected output:
    /Users/YOURNAME/miniforge3/envs/matlab/bin/python
===========================================================
3. Verify Python + Astropy From Terminal
===========================================================
Run:
    python -c "import astropy; print(astropy.__version__)"
Expected output:
    6.x.x  (or similar)
===========================================================
4. Configure MATLAB to Use This Python
===========================================================
In MATLAB R2025a (Apple Silicon):
    clear classes
    pyenv('Version', '/Users/YOURNAME/miniforge3/envs/matlab/bin/python')
    py.sys.version
You should see the Python version printed (e.g. 3.10.18). No error means it's working.
===========================================================
5. Gotchas and Their Solutions
===========================================================
❌ Error: Python API functions are not available
→ Cause: Wrong architecture or broken .dylib
→ Fix: Use Miniforge ARM64 Python. DO NOT use Intel Anaconda.
❌ Error: Invalid text character (↑ points at __version__)
→ Cause: MATLAB can’t parse double underscores typed or pasted
→ Fix: Use: py.getattr(module, '__version__')
❌ Error: Unrecognized method 'separation' or 'sec'
→ Cause: MATLAB can't reflect dynamic Python methods
→ Fix: Use: py.getattr(obj, 'method')(args)
===========================================================
6. Run Full Verification in MATLAB
===========================================================
Paste this into MATLAB:
    % Set environment
    clear classes
    pyenv('Version', '/Users/YOURNAME/miniforge3/envs/matlab/bin/python');
    % Import modules
    coords = py.importlib.import_module('astropy.coordinates');
    time_mod = py.importlib.import_module('astropy.time');
    table_mod = py.importlib.import_module('astropy.table');
    % Astropy version
    ver = char(py.getattr(py.importlib.import_module('astropy'), '__version__'));
    disp(['Astropy version: ', ver]);
    % SkyCoord angular separation
    c1 = coords.SkyCoord('10h21m00s', '+41d12m00s', pyargs('frame', 'icrs'));
    c2 = coords.SkyCoord('10h22m00s', '+41d15m00s', pyargs('frame', 'icrs'));
    sep_fn = py.getattr(c1, 'separation');
    sep = sep_fn(c2);
    arcsec = double(sep.to('arcsec').value);
    fprintf('Angular separation = %.3f arcsec\n', arcsec);
    % Time difference in seconds
    Time = time_mod.Time;
    t1 = Time('2025-01-01T00:00:00', pyargs('format','isot','scale','utc'));
    t2 = Time('2025-01-02T00:00:00', pyargs('format','isot','scale','utc'));
    dt = py.getattr(t2, '__sub__')(t1);
    seconds = double(py.getattr(dt, 'sec'));
    fprintf('Time difference = %.0f seconds\n', seconds);
    % Astropy table display
    tbl = table_mod.Table(pyargs('names', {'a','b'}, 'dtype', {'int','float'}));
    tbl.add_row({1, 2.5});
    tbl.add_row({2, 3.7});
    disp(tbl);
===========================================================
7. Optional: Automatically Configure Python in startup.m
===========================================================
To avoid calling pyenv() every time, edit your MATLAB startup:
    edit startup.m
Add:
    try
        pyenv('Version', '/Users/YOURNAME/miniforge3/envs/matlab/bin/python');
    catch
        warning("Python already loaded.");
    end
===========================================================
8. Final Notes
===========================================================
- This setup avoids all architecture mismatches.
- It uses a clean, minimal ARM64 Python that integrates seamlessly with MATLAB.
- Do not mix Anaconda (Intel) with Apple Silicon MATLAB.
- Use py.getattr for any Python attribute containing underscores or that MATLAB can't resolve.
You can now run NumPy, Astropy, Pandas, Astroquery, Matplotlib, and more directly from MATLAB.
===========================================================
Is it possible to create a Simulink model that is independent of specific microcontrollers?
For example, in the model, the STM32 block is used for CAN transmission. But if I want to deploy the same model to an Arduino, I have to replace the STM32 block with an Arduino-compatible one.
So, is it possible to create a custom block or abstraction that works across multiple microcontrollers like STM32, PIC32, and Arduino without changing the hardware-specific block each time?

Hello,
I've successfully tested the Processor-in-the-Loop (PIL) workflow in Simulink using a TI F28069M LaunchPad, following the standard examples provided by MathWorks. The PIL block, code generation, and communication all worked without issues.
Now, I’d like to run a similar PIL setup using the Infineon TLE9879 EVALKIT (based on an ARM Cortex-M0), which is not officially supported by Simulink as a target.
I’m wondering if it’s possible to configure PIL manually or via custom workflows. For example:
- Can I create a custom PIL target using Embedded Coder?
- Would I need to port rtiostream manually for communication over UART?
- Could I somehow integrate with Keil µVision (which I use for TLE9879) to build and run the generated code?
- Is there a workaround to simulate PIL behavior using a non-supported board?
My setup:
- Simulink R2024b
- Infineon TLE9879 EVALKIT
- Keil µVision 5 + Infineon Config Wizard
- UART and JTAG interfaces available
The main purpose is to validate control algorithms and measure execution time, not to implement a full HIL system.
Has anyone attempted PIL with a custom or unsupported microcontroller before? Any tips or resources would be greatly appreciated. Thanks in advance!

Hey MATLAB enthusiasts!
I just stumbled upon this hilariously effective GitHub repo for image deformation using Moving Least Squares (MLS)—and it’s pure gold for anyone who loves playing with pixels! 🎨✨
- Real-Time Magic ✨
- Precomputes weights and deformation data upfront, making it blazing fast for interactive edits. Drag control points and watch the image warp like rubber! (2)
- Supports affine, similarity, and rigid deformations—because why settle for one flavor of chaos?
- Single-File Simplicity 🧩
- All packed into one clean MATLAB class (mlsImageWarp.m).
- Endless Fun Use Cases 🤹
- Turn your pet’s photo into a Picasso painting.
- "Fix" your friend’s smile... aggressively.
- Animate static images with silly deformations (1).
Try the Demo!
                    You are not a jedi yet !
                
 
                
                    20%
                
  
            
                    We not grant u the rank of master !
                
 
                
                    0%
                
  
            
                    Ready are u? What knows u of ready?
                
 
                
                    0%
                
  
            
                    May the Force be with you !
                
 
                
                    80%
                
  
            
            5 votos
        
    Sto tentando inutilmente di salvare il valore dell'enegia che consumo ogni giorno nel field5 di questo canale: https://thingspeak.mathworks.com/channels/2851490 , ma inutilemte in quanto vengono visualizzati sempre e solo 2 dati anche se ho impostato days=30. Ho provato ad aumentare a 365 ma senza variazioni. Come mai?
I saw this on Reddit and thought of the past mini-hack contests. We have a few folks here who can do something similar with MATLAB.

I had an error in the web version Matlab, so I exited and came back in, and this boy was plotted.














