请问matlab gui中如和取得函数内部变量的值,然后在回调函数中使用?

如果设置一个句柄
x = 0 : 0.1 : 2 * pi;
fun_handle = line(x,sin(x));
现在我想要在callback中对line函数中的参数x赋值,或者取得sin(x)在此时刻的值,应该如何做,非常感谢了。我使用get函数的时候不能够取得line中的值啊?
现在
程序如下:
fig_handle = figure('numbertitle','off',... %2去掉matlab默认窗口标题如:figure1 figure2...
'name','设置曲线的形状与颜色');

hm = findall(fig_handle , 'type', 'uimenu'); %查找标准菜单
delete(hm) %删除标准菜单
h = findall(fig_handle , 'type', 'uipushtool',...
'-or',...
'type', 'uitoggletool'); %查找工具按钮
set(h, 'visible', 'off') %隐藏工具按钮
h12 = findall(fig_handle , 'Tooltip', 'Zoom In',...
'-or', ...
'Tooltip', 'Zoom Out',...
'-or',...
'Tooltip', 'Pan',...
'-or',...
'Tooltip', 'Data Cursor');
set(h12, 'visible', 'on',...
'Separator', 'off') %显示指定的4个工具按钮

set(gcf,'toolbar','figure')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 创建坐标轴,h1也可以去掉
h1 = axes('parent',fig_handle,... %注意h0这里人为定义的一个句柄,作为父对象句柄,创建坐标轴
'position',[0.15 0.45 0.75 0.45],... % 'position',[右移 下移 左右压缩或者延展 上下压缩或者延展],...
'visible','on'); %只有可视化以后,才可以使用下面三句话
xlabel('自变量x'); %x轴标签
ylabel('函数值y'); %y轴标签
title('y=sin(x)','color','y'); %标题,颜色

x = 0 : 0.1 : 2 * pi; %x轴数据
fun_handle = line(x,sin(x)); %绘制数据曲线也可以换成plot,k为一个函数指针z
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

set(0,'DefaultUicontrolfontsize',12) %设置控件默认的字体大小
p1 = uicontrol('parent',fig_handle,... %创建【加号】按钮
'string','加号',...
'position',[60 100 50 30],...
'callback',['set(fun_handle,''x'',3);'...
ttt=get(fun_handle,''sin(x)''); ]);
请问最后两句错在哪里了?非常感谢了!
我的问题如下:
1:自定义一个函数,fun(x,y=3,z)
然后希望在callback中使用set个x赋值,用get取到y的值。请问可以吗!如果不可以请问用什么方法。
2:如果是matlab自带的函数如line画线函数。像"1“中那样赋值和取值line函数中的参数,又应该怎么办,非常感谢了!

    你程序最后的callback表达式语法就是错的。

    变量fun_handle是一条曲线的句柄,而不是函数句柄。这点相信你知道,但还是应该提醒一下:变量命名应该尽量避免引起误解。

    设置line的x数据和y数据,必须保证二者长度相同,你单独设置x是不对的。

    我没看明白你到底想要实现什么功能,请再说清楚点。

 

10-24补充:

    如果还要继续提问或者有什么补充说明,建议用追问的方式,不要用补充,那样我回答也只能修改原来的回答,感觉比较别扭。

    需要编写回调函数的程序最好写成function而非script,像你现在这种做法,把回调函数的内容全写成字符串,如果功能稍微复杂一点就很不好写。另外一个弊病是,回调函数用的是MATLAB的base工作区,执行会受基本工作区影响(也会反过来影响基本工作区)。

    你的补充说明写得仍然不太清楚。看你写程序注释的习惯很不错,这种风格和你提问描述问题的草率不太相符。如果你稍微多用点心,把问题描述的足够清楚,那样既有助于你的问题尽快得到解决,也可以减少浪费我的时间。

    我没搞太清楚你到底想要做什么,这里就简单点演示一下怎样在回调函数里获取以及修改曲线的数据(得到原来的x和y,并把x*2相当于横轴放大,y取平方),代码在你原有基础上修改(把p1=uicontrol(...)之后的替换成下面的代码),请自行对照看看实现方法,希望你能从中得到启发。

 

set(gcf,'userdata', fun_handle);
call_str = [ ...
        'hLine=get(gcbf,''user'');' ...
        'x=get(hLine,''x'');' ...
        'y=get(hLine,''y'');' ...
        'set(hLine,''x'',2*x,''y'',y.^2);' ...
    ];
p1 = uicontrol('parent',fig_handle,...       %创建【加号】按钮
               'string','加号',...
               'position',[60 100 50 30],...
               'callback',call_str);

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网