我有一个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变量进行绘图,因此我剪切了该部分代码。
答案 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,否则我可能会提出更有效的方法。