【发布时间】:2021-01-07 11:28:55
【问题描述】:
我使用的是 GNU Octave,版本 4.4.1。我试图通过包含两个滑块来制作简单振荡器的交互式绘图,这将允许更改初始速度和振荡器质量。 该图本身显示良好,以及带有一个滑块(用于速度)的脚本。这是带有回调函数的脚本的一部分:
function titranje_ia1 (hslider, event)
v0 = get ( hslider, "value" );
m = 1;
k = 1;
t = 0:0.1:30;
x = v0*sin(sqrt(k/m)*t);
axes ('position', [0.1, 0.2, 0.8, 0.75]);
h = plot ( t, x );
axis ([0 30 -11 11]);
set (h, "linewidth", 2);
set (gca, "xlabel", "t (s)", "ylabel", "x (m)", "fontsize", 12);
set (gca, 'XTick', 0:pi:10*pi)
set (gca, 'XTickLabel', {'0','\pi','2\pi','3\pi','4\pi','5\pi','6\pi','7\pi','8\pi','9\pi','10\pi'})
grid on;
l = legend (sprintf('v0 = %f', v0));
set (l, "fontsize", 12)
endfunction
但是,当我包含第二个滑块时
function titranje_ia2 (hslider1, hslider2, event)
v0 = get ( hslider1, "value" );
m = get ( hslider2, "value" );
k = 1;
t = 0:0.1:30;
x = v0.*sin(sqrt(k./m).*t);
axes ('position', [0.1, 0.2, 0.8, 0.75]);
h = plot ( t, x );
axis ([0 30 -11 11]);
set (h, "linewidth", 2);
set (gca, "xlabel", "t (s)", "ylabel", "x (m)", "fontsize", 12);
set (gca, 'XTick', 0:pi:10*pi)
set (gca, 'XTickLabel', {'0','\pi','2\pi','3\pi','4\pi','5\pi','6\pi','7\pi','8\pi','9\pi','10\pi'})
grid on;
l = legend (sprintf('v0 = %f', v0));
set (l, "fontsize", 12)
endfunction
我收到一个错误:
错误:titranje_ia2:产品:参数不一致(op1 为 0x0,op2 为 1x301) 图形回调函数执行错误
因为我知道“k”是标量而“t”是向量(但我不确定 v0 和 m 是什么;我想是标量),所以我在函数“x”定义中包含了元素操作。 't' 大小是 1x301,所以我假设 'sqrt(k./m)' 是 0x0(如 Octave 所示)。不应该是1x1吗? 确实,当我尝试时
size(m)
我收到 ans = 0 0(对于 size(v0) 我得到 ans = 1 1)。会不会是滑块定义有问题?我在最后包含了两个滑块定义:
%Definiramo ui element: 'klizac' za v0
hslider1 = uicontrol (
"style", "slider",
"units", "normalized",
"position", [0.1, 0.0, 0.8, 0.1],
"min", 1,
"max", 10,
"value", 4,
"callback", @titranje_ia2
);
%Definiramo ui element: 'klizac' za m
hslider2 = uicontrol (
"style", "slider",
"units", "normalized",
"position", [0.1, 0.05, 0.8, 0.1],
"min", 1,
"max", 10,
"value", 1,
"callback", @titranje_ia2
);
提前谢谢你! 最好的问候,
伊戈尔
【问题讨论】: