麻烦大家帮忙看一下我的matlab代码错在什么地方

来源:百度知道 编辑:UC知道 时间:2024/07/06 08:52:18
for i=1:length(x)
if x(i,1)*x(i,2)-50>0
z(i)=0.25*(x(i,1)^2+x(i,2)^2)+2*x(i,1)*(1-x(i,2))+lamada*(x(i,1)+x(i,2)-50); lamada=z*lamada;
else z(i)=0.25*(x(i,1)^2+x(i,2)^2)+2*x(i,1)*(1-x(i,2));
end
end

其中:
lamada=100;
x是一个8*2的矩阵
x =

76.1802 77.5226
84.3212 13.8710
21.9207 47.6851
10.3580 56.0957
1.5363 0.5032
34.1422 91.7063
1.4914 91.6769
35.2252 28.2907

运行提示错误:
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

Error in ==> gafun1 at 6
z(i)=0.25*(x(i,1)^2+x(i,2)^2)+2*x(i,1)*(1-x(i,2))+lamada*(x(i,1)+x(i,2)-50);

麻烦大家帮忙看一下错在那里,谢谢了
谢谢楼下的朋友,关于你提出的两点是这样的:
1、size(z)返回一个数组[8 2],length(z)返回一个数8
2、我的设想是这样的,i从1取到8,对每个i计算出相应的z,也就是z(i),所以在for 循环中z(i)是一个数,所以它和lamada相乘后还是一个数。
但调试提示错误,搞不懂什么原因。另:我以前是用matlab5,然后好久没用matlab了,现在用的matlab7.1,会不会是版本的原因?

不是什么版本问题。提示说的很明白:你赋值时元素个数不符。

具体说来,问题出在
lamada=z*lamada;
是的,“对每个i计算出相应的z,也就是z(i),所以在for 循环中z(i)是一个数,所以它和lamada相乘后还是一个数”但是你用作累乘的:注意,在上式是z,不是z(i).
再具体点儿说:
z在i=1时第一维z(1)可被赋值,(z(i)=0.25*(x(i,1)^2+x(i,2)^2)+2*x(i,1)*(1-x(i,2))+lamada*(x(i,1)+x(i,2)-50); lamada=z*lamada;
或者z(i)=0.25*(x(i,1)^2+x(i,2)^2)+2*x(i,1)*(1-x(i,2)); i=1),z在i=2时第一维z(2)依然可被赋值,但是注意,如果if语句满足,那么lamada=z*lamada; 这里z=[z(1),z(2)]已经是二维数组了,当然现在的lamada(=z*lamada)也是二维的了!这样到了i=3,
if x(i,1)*x(i,2)-50>0 满足,
z(i)=0.25*(x(i,1)^2+x(i,2)^2)+2*x(i,1)*(1-x(i,2))+lamada*(x(i,1)+x(i,2)-50); 左边给出一个数的位置,右边是数+数+二维数组,到此报错了:the number of elements in B and I must be the same.

修改意见:只需把lamada=z*lamada句改为
lamada=z(i)*lamada
即可。

有几个小问题不解

1。for i=1:length(x)
我看了你的循环体,这个可能有点问题。
length(x)是求出x总共有几个元素,不是求出它有多少行。
求行数:[m,n]=size(x)。其中m为行数,n为列数。

2。
lamada=z*lamada;
z你用循环后,它应当是一个数组,而lamada是一个数。
这样处理后lamada由一个数,变成一个数组,我觉得你