我有一系列问题需要搜索2个最佳/根值。仅作为一个例子,让我们说:
F +(F G)/ 3 = 1且G +(F G)/ 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数组,我需要做什么?
答案 0 :(得分: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]);