defining function which generates 3d array within a class. Different behavior in class versus command window
Show older comments
This code:
lam = @(t) 3*(1 + 0.8*cos(2*pi*t));
A1 = @(t) reshape([lam(t(:).'); lam(t(:).'); zeros(1, numel(t)); lam(t(:).')], [2, 2, numel(t)]);
tt=0:1/400:1-1/400;
A1stack=A1(tt);
generates a 2x2x400 array. This is what I want to happen. When I embed the code within a class function however, it returns a 2x800 array. How do I fix this?
6 Comments
Steven Lord
on 12 Jun 2025
Can you show us the whole class method definition? I'm wondering if you have defined a variable in the method that's shadowing a function used by that code.
Barbara Margolius
on 12 Jun 2025
Perhaps you can add the command whos to the code immediately before the place where you included these lines of code and show us that output. That may indicate if you've shadowed a function with a variable.
plot = 42;
y = digraph();
z = @sin;
whos
% plot(1:10) % would not work due to the shadowing
Since the standalone code behaves as expected and the issue arises only within your class, it is very likely that a variable name inside your method or class is shadowing a built-in function like reshape, cos, or pi.
To diagnose this, please try adding the following just before the line where A1(tt) is evaluated in your class method:
disp('--- Function shadow check ---');
disp('reshape:'); which reshape
disp('cos:'); which cos
disp('pi:'); which pi
disp('--- Variables in scope ---');
whos
Then run your method and paste the output here. This will help determine whether a variable or property is unintentionally overriding a built-in function and causing the unexpected 2×800 result.
Barbara Margolius
on 18 Jun 2025
Steven Lord
on 18 Jun 2025
To close the loop, would you mind giving a brief description of what the error was?
Accepted Answer
More Answers (0)
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


