matlab 如何在应用设计器中实现surfc?

pnwntuvh  于 2022-11-24  发布在  Matlab
关注(0)|答案(1)|浏览(151)

我有一个问题,在matlab中我可以用surfc编码来绘制复杂函数的三维图这是我的代码:\

figure
X=-2*pi:0.2:2*pi; 
Y=-2*pi:0.2:2*pi; 
[x,y]=meshgrid(X,Y);
z=3*x+5i*y; 
sc=surfc(x,y,abs(z)) 
xlabel('Re(x)'); 
ylabel('Im(y)'); 
colormap jet 
colorbar

但是在这里我想在应用设计器中实现这个。我想让用户输入他们在笛卡尔坐标系中的复杂函数x和y(而不是极坐标),然后向他们显示该图。但是当我用相同的代码运行,只做了一点点修改时,我总是得到错误消息:使用surfc时出错。表面z必须包含多行或多列。
以下是我的应用设计师回调:

% Button pushed function: MakeGraphButton         
function MakeGraphButtonPushed(app, event)
             x=-2*pi:0.2:2*pi;
             y=-2*pi:0.2:2*pi;
             [x,y]=meshgrid(x,y);
             z=app.ComplexFunctionEditField.Value;
             axes(app.UIAxes);
             surfc(x,y,abs(z))
             axis equal
             grid on
         end
     end

我希望它会在我设计的应用程序上显示图形,但它只显示了错误消息。如何使其工作?

6ie5vjzr

6ie5vjzr1#

您正在使用编辑字段的.Value,因此它很可能是一个字符。然后您使用它,就好像您已经计算了xy的某个函数一样,但实际上您并没有这样做!您可能需要这样的内容

% Setup...
x = -2*pi:0.2:2*pi;
y = -2*pi:0.2:2*pi;
[x,y] = meshgrid(x,y);

% Get char of the function from input e.g. user entered '3*x+5i*y'
str_z = app.ComplexFunctionEditField.Value; 
% Convert this to a function handle. Careful here, you're converting
% arbitrary input into a function! 
% Should have more sanity checking that this isn't something "dangerous"
func_z = str2func( ['@(x,y)', str_z] );
% Use the function to evaluate z
z = func_z( x, y );

现在,您已经从字符输入(通过函数)转到了实际生成z的值(可用于绘图

相关问题