0

我有一个 fsolve 方程中的一个变量的数字矩阵,所以当我运行 matlab 时,我希望得到一个矩阵,而是得到一个标量。我什至尝试了一个 for 循环,但这给了我一个关于大小的错误,所以这不是解决方案。我包括代码以获得一些关于我做错了什么的反馈。

z=0.1;
bubba =[1 1.5 2];
bubba = bubba';

 joe = 0:0.1:1.5;
 joe = repmat(joe,3,1);
 bubba = repmat(bubba,1,length(joe));
 for x=1:1:16
 eqn0 = @(psi0) (joe.-bubba.*(sqrt((psi0+z))));
 result0(x) = fsolve(eqn0,0.1,options);

 end

请注意,我稍后需要 joe 变量进行绘图,所以我剪掉了那部分代码。

4

2 回答 2

1

根据您之前的评论,让我尝试一个解决方案......仍然不确定这是您想要的:

bubba =[1 1.5 2];
joe = 0:0.1:1.5;

for xi = 1:numel(joe)
  for xj = 1:numel(bubba)
    eqn0 = @(psi0) (joe(xi).-bubba(xj).*(sqrt((psi0+z))));
    result(xi,xj) = fsolve(eqn0,0.1,options);
  end
end

是行人;但这是你想要的吗?我现在无法访问 matlab,否则我可能会想出更有效的方法。

于 2013-04-24T18:22:12.657 回答
1

详细说明我的评论:

psi0是求解器中的自变量。当您使用标量作为的第二个参数时,您将它的维度设置为 [1 1] fsolve(eqn0, 0.1, options);- 这告诉 Matlab 优化标量psi0,从 的值开始0.1。结果将是一个标量 - 使函数最小化的值

0.1 * sqrt(psi0 + 0.1)

因为你设置了 z=0.1

您应该为循环的每次迭代返回 -0.1 的值,因为您从未更改任何内容。现在没有足够的信息来确定您希望哪个因子成为矩阵 - 特别是因为您的表达式eqn0涉及矩阵乘法,所以很难知道您期望结果的维度是什么。

我希望您将这个初始答案作为跳板来修改您的问题,以便可以正确回答!?

于 2013-04-23T22:50:05.970 回答