麻烦大家帮忙看一下我的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,会不会是版本的原因? 展开
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
即可。
具体说来,问题出在
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由一个数,变成一个数组,我觉得你这里应当有点问题。
=========================
那个length我可能没有吃透。不好意思
按你说的。
应当是
lamada=z(i)*lamada
不是lamada=z*lamada
因为for i=1:8
当执行到i=2时,
已经有z(1),并计算出z(2)此时
你如果写z的话,它是数组不是一个数。
而z(i)是一个数。
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)是一个数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好久没用过matlab了.
因为我手头也没这个软件,我只能提出有疑问的地方
1.length(Matrix)这个函数的可靠性
2.lamada=z*lamada lamada常数,z可能是Matrix,不匹配
因为我手头也没这个软件,我只能提出有疑问的地方
1.length(Matrix)这个函数的可靠性
2.lamada=z*lamada lamada常数,z可能是Matrix,不匹配
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题出在lamada=z*lamada; 根据你的程序,我估计z是8*1的矩阵,而lamada是1*1的常数,不匹配.建议将lamada=z*lamada;改为lamada=z(i)*lamada;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询