出现如下报错:The number of columns in A must be the same as the number of elements of f.其中A为A = []; b = [];for i = 1:n A = [A; [1, 1, 0, 0, -1, 0, 0; 0, -1, 0, 0, 1, 0, 0; -1, 0, 0, 0, 1, 0, 0; 1, 0, 1, 0, 0, -1, 0; 0, 0, -1, 0, 0, 1, 0; -1, 0, 0, 0, 1, 0, 0; 1, 0, 0, 1, 0, 0, -1; 0, 0, 0, -1, 0, 0, 1; -1, 0, 0, 0, 0, 0, 1]]; b = [b; [1; 0; 0; 1; 0; 0; 1; 0; 0]]; end A=double(A); b=double(b);f为:function f=fun(y) global p x yi1 yi2 yi3 y=double(reshape(y,234,4)); zi1=double(y(:,1).*y(:,2)); zi2=double(y(:,1).*y(:,3)); zi3=double(y(:,1).*y(:,4)); f=double(0); for i=1:234 f=f+(2*p(i,1).*(1-x(i,1)).*y(i,1)+p(i,1).*yi3(i,1).*(y(i,2)-zi1(i,1))+p(i,1).*zi1(i,1).*(1-yi1(i,1))+p(i,1).*zi1(i,1).*(1-yi2(i,1))+p(i,1).*zi1(i,1).*(1-yi3(i,1))) end f=double(f); end该如何修改代码
时间: 2023-09-30 22:06:12 浏览: 79
C#例子代码 A0040_Indexer
根据你提供的代码,问题出在 `f` 的长度与 `A` 的列数不匹配。`f` 应该是一个列向量,其长度应与 `A` 的列数相同。
在 `fun(y)` 函数中,你计算了一个标量 `f`。为了将其转换为一个列向量,你可以使用方括号将其括起来。修改代码如下:
```matlab
f = [fun(y)]; % 将 f 转换为一个列向量
```
另外,根据你提供的代码,`y` 是一个 234x4 的矩阵。但在 `fun(y)` 函数中,你将其重新定义为 `y=double(reshape(y,234,4))`,这似乎没有必要。你可以省略这一行代码。
修改后的代码如下:
```matlab
A = [];
b = [];
for i = 1:n
A = [A; [1, 1, 0, 0, -1, 0, 0;
0, -1, 0, 0, 1, 0, 0;
-1, 0, 0, 0, 1, 0, 0;
1, 0, 1, 0, 0, -1, 0;
0, 0, -1, 0, 0, 1, 0;
-1, 0, 0, 0, 1, 0, 0;
1, 0, 0, 1, 0, 0, -1;
0, 0, 0, -1, 0, 0, 1;
-1, 0, 0, 0, 0, 0, 1]];
b = [b; [1; 0; 0; 1; 0; 0; 1; 0; 0]];
end
A = double(A);
b = double(b);
f = [fun(y)]; % 将 f 转换为一个列向量
```
希望这可以解决你的问题。如果还有其他问题,请随时提问。
阅读全文