Matlab中的fsolve函数

时间:2013-04-23 22:31:12

标签: matlab

我有一个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变量进行绘图,因此我剪切了该部分代码。

2 个答案:

答案 0 :(得分:1)

详细说明我的评论:

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

0.1 * sqrt(psi0 + 0.1)

因为您设置了z = 0.1

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

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

答案 1 :(得分: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,否则我可能会提出更有效的方法。