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

fori=1:length(x)ifx(i,1)*x(i,2)-50>0z(i)=0.25*(x(i,1)^2+x(i,2)^2)+2*x(i,1)*(1-x(i,2))... 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,会不会是版本的原因?
展开
 我来答
lizzystate
2009-03-07 · TA获得超过138个赞
知道小有建树答主
回答量:66
采纳率:0%
帮助的人:0
展开全部
不是什么版本问题。提示说的很明白:你赋值时元素个数不符。

具体说来,问题出在
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
即可。
wacs5
2009-03-07 · TA获得超过1.6万个赞
知道大有可为答主
回答量:3724
采纳率:82%
帮助的人:2754万
展开全部
有几个小问题不解

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

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

=========================
那个length我可能没有吃透。不好意思

按你说的。
应当是
lamada=z(i)*lamada
不是lamada=z*lamada
因为for i=1:8
当执行到i=2时,
已经有z(1),并计算出z(2)此时
你如果写z的话,它是数组不是一个数。
而z(i)是一个数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ufohjl
2009-03-07 · TA获得超过453个赞
知道小有建树答主
回答量:155
采纳率:0%
帮助的人:286万
展开全部
好久没用过matlab了.
因为我手头也没这个软件,我只能提出有疑问的地方
1.length(Matrix)这个函数的可靠性
2.lamada=z*lamada lamada常数,z可能是Matrix,不匹配
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f13d2c3f0
2009-03-07
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
问题出在lamada=z*lamada; 根据你的程序,我估计z是8*1的矩阵,而lamada是1*1的常数,不匹配.建议将lamada=z*lamada;改为lamada=z(i)*lamada;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式