defining function which generates 3d array within a class. Different behavior in class versus command window
显示 更早的评论
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 个评论
Steven Lord
2025-6-12
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
2025-6-12
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
2025-6-18
Steven Lord
2025-6-18
To close the loop, would you mind giving a brief description of what the error was?
采纳的回答
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



