【问题标题】:vecorization of fzero() iterative solution in MatlabMatlab中fzero()迭代解的向量化
【发布时间】:2018-01-25 02:54:57
【问题描述】:

我有一系列问题需要搜索 2 个最优/根值。举个例子吧:

F+(FG)/3=1 和 G+(FG)/4=19/16

(当然,用代数解决这个问题真的很简单)实际问题太复杂了,无法在这里写,但这简化了我打算实现的想法。

我需要解决问题的方法是使用 matlab 的 fzero() 函数,这是我目前的代码,但无法正常工作

x = fzero(@(F) [1;19/16]-F-myfun(F),[0;0]);

myfun() 被定义为

function [FF]=myfun(F)

FFx=(F(1,1)*F(2,1))/3;  
FFy=(F(2,1)*F(1,1))/4;  

FF=[FFx;FFy];
end

而 F 是一个包含两个元素的数组 (F=[fx;fy])。 1D 版本没有问题。但是,当我升级到 2D 时,会出现以下错误

Attempted to access F(2,1); index out of bounds because numel(F)=1.

据我了解,fzero() 自动使 F 成为 1x1 变量。为了使 fzero 假设 F 为 2x1 数组,我需要做什么?

【问题讨论】:

  • help fzero 的第一行写着“fzero Single-variable nonlinear zero finding.”,这意味着它只适用于一维。

标签: matlab optimization iteration vectorization


【解决方案1】:

函数fzero 不适用于方程组

请改用fsolve

另外,所有的代码都可以简化,只写成如下两行:

myfun=@(F) [1;19/16]-F-[ (F(1)*F(2))/3 ; (F(1)*F(2))/4]; x = fsolve(@(F) myfun(F),[1;1]);

【讨论】:

  • 感谢这真的帮助我在实际问题中实施解决方案
  • @JaredLo 很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
相关资源
最近更新 更多