0

我正在尝试在 Matlab 中创建一个 GUI,一旦您在编辑文本区域中输入了数据,它就会绘制一个特定的图形。我的问题是,当我尝试使用此代码绘制图表时:

  function pushbutton3_Callback(hObject, eventdata, handles)
  a = str2num(get(handles.edit1,'string'));
  b = str2num(get(handles.edit2,'string'));
  n1 = str2num(get(handles.edit6,'string'));
  n2 = str2num(get(handles.edit4,'string'));
  lambda = str2num(get(handles.edit5,'string'));
  m = ones(1,a)
  s = ones(1,b)
  f = ones(1,n1)
  g = ones(1,n2)
  k = ones(1,lambda) 
  c = k.*(m.*s/f.*g)
  i = -3:1:5 
  figure
  p= plot(c,i) 

此错误消息不断弹出:Error times Matrix dimensions must agree。我不知道该怎么办?我真的需要帮助,因为我有这个项目的最后期限,我一无所知!提前致谢。

4

1 回答 1

1
m = ones(1,a)
s = ones(1,b)
f = ones(1,n1)
g = ones(1,n2)
k = ones(1,lambda) 
c = k.*(m.*s/f.*g)

你没有忘记除法运算符的一个点吗?

c = k.*(m.*s./f.*g)

对于错误本身:除非 a==b==n1==n2==lambda,否则您创建的向量的维度是不同的,并且您将无法(按元素)将它们相乘,这会导致Error times Matrix dimensions must agree

编辑

plot(x,y)绘制一条连接点 (x,y) 彼此的线。如果您删除 x 并仅使用plot(y),则假定 x 为 1:N(N 是向量 y 中的元素数)

如果你想绘制 c=lambda*(a*b/n1*n2) 的值,那么 plot(c) 将只绘制该值。我不明白为什么有人告诉你使用向量将其转换为向量?

可以肯定的是,如果

lambda=2
a  = 3
b  = 4
n1 = 5
n2 = 6

那么 c=2*(3*4/5*6)=28.8 那么你想要的是绘制值 28.8??

如果这是你想要的,那么这是使用

c = k.*(m.*s./f.*g);
plot(c);

如果参数包含更多值,例如:

lambda= [2 4]
a  = [3 5]
b  = [4 8]
n1 = [5 4]
n2 = [6 1]

同样的事情适用,但c = k.*(m.*s./f.*g);会返回c=[28.8 40]plot(c)连接点 (1; 28.8) 和 (2; 40)

好?清除?那么主要问题是您必须确保用户在每个文本框中输入相同数量的数字,否则您的向量之间会出现不匹配,并且它们不会计算:[1 4 5].*[6 7]会出错

于 2012-05-07T16:19:27.660 回答