在Matlab

时间:2018-01-25 02:54:57

标签: matlab optimization iteration vectorization

我有一系列问题需要搜索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数组,我需要做什么?

1 个答案:

答案 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]);