【发布时间】:2013-10-19 06:36:04
【问题描述】:
我在 matlab 中看到了几个 fsolve 的示例,但似乎找不到任何显示如何以矩阵形式传递参数的示例。
这是我的代码。
[A,b] = equationsToMatrix(eq1,eq2)
X0 = [0 0]
fsolve([A,b], X0)
这是输出
eq1 = - sx - sy/2 == 5
eq2 = - (3*sx)/2 - (3*sy)/2 == 9
A =
[ -1, -1/2]
[ -3/2, -3/2]
b =
5
9
X0 =
0 0
Error using lsqfcnchk (line 109)
If FUN is a MATLAB object, it must have an feval method.
Error in fsolve (line 198)
funfcn = lsqfcnchk(FUN,'fsolve',length(varargin),funValCheck,gradflag);
Error in SolveTesting (line 70)
fsolve([A,b], X0)
如您所见,我已经得到了一个很好的求解格式的方程组,为什么 matlab 不接受这个?我也不明白 x0 论点的意义。我提供了一个方程组,那我为什么需要一个起点?
【问题讨论】:
-
您需要提供一个“球场”起点,这样算法就不会被与答案相距甚远而导致的巨大错误所迷惑。第一个参数应该是一个评估函数(它返回离你的答案有多远)。你不能只传递一个矩阵。但是,您可以创建一个匿名函数并将数据包装在其中。
-
那么 x0 不应该有 4 个变量吗?系统中两个未知数的最小值/最大值?我当然参考了帮助文档,但我不明白。它的例子都直接提供了被评估的方程。我无法对方程式进行硬编码,因为它们来自其他代码的结果。
-
不,您正在尝试求解
sx和sy。这是两个变量。您的评估函数应该通过您的方程运行它们以生成b。然后,您使用c = b - [5 9]并想出一些能产生单一正值的东西。 例如sum(c .* c)。那是你的错误。fsolve试图最小化这个错误。你不需要那个A矩阵。如果您想以这种方式解决它,那您就找错地方了。fsolve旨在最大限度地减少可能没有 100% 准确解决方案的系统。 -
什么评价函数?我不明白这是什么意思。方程为矩阵形式。您说 x0 是一个“球场”图形,边界条件,这意味着一个范围。因此,对于要解决的每个未知数,您都需要一个最小值和最大值。进入这个问题,我可以预测一个范围,但我不知道提前多少准确度的答案。
标签: matlab