首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab中的fsolve函数

Matlab中的fsolve函数
EN

Stack Overflow用户
提问于 2013-04-24 06:31:12
回答 2查看 734关注 0票数 0

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

代码语言:javascript
复制
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变量进行绘图,因此我对该部分代码进行了裁剪。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-25 02:22:13

基于你之前的评论,让我试一试解决方案...仍然不确定这是你想要的:

代码语言:javascript
复制
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,否则我可能会想出更有效的方法。

票数 1
EN

Stack Overflow用户

发布于 2013-04-24 06:50:06

详述我的评论:

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

代码语言:javascript
复制
0.1 * sqrt(psi0 + 0.1)

因为您已经设置了z=0.1

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

我希望你能以这个最初的答案为跳板来修改你的问题,这样它就可以得到正确的回答!?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16180266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档