当MATLAB无法找到明确的解决方案时,可能采取的任何步骤?

时间:2019-02-09 16:32:48

标签: matlab function solver

我正在尝试使用MATLAB解决问题,其中有9个未知数和8个方程式,我的目标是将F的值写为x2: F=f(x2)的函数,所以我可以为x2提供不同的值并获得F。实现的代码是:

%-------- Variables description -------
%3 constants: P, h and c
%9 unknowns: F, x1,...,x8

syms F P h c x1 x2 x3 x4 x5 x6 x7 x8

%--------System of 8 Equations---------
Eq1 = F == P/(x1*x2/x3);
Eq2 = x1 == x3 - h;
Eq3 = x4 == x2 - x1;
Eq4 = x5 == sqrt(x4^2+(h-c)^2);
Eq5 = x6 == sqrt(x3^2+(x1+x4)^2);
Eq6 = x6 == 3*x5;
Eq7 = x7 == atan((h-c)/x4);
Eq8 = x8 == atan(x3/(x1+x4));

%----------------Solver----------------
Solution = solve([Eq1, Eq2, Eq3, Eq4, Eq5, Eq6, Eq7, Eq8],...
[F P c h x1 x3 x4 x5 x6 x7 x8]);

%----- Solution desired: F=f(x2) ------
Solution.F

尽管如此,此代码的输出是:

  

“无法找到明确的解决方案。”

我不确定为什么会有这个问题。有可能找到解决方案吗?

1 个答案:

答案 0 :(得分:-1)

以下代码为我解决了这个问题。然后,您可以在Eq9中使用x2来生成不同的解决方案。您的问题是您将P, c, h交给了求解器。因此,它不会将它们视为给定的常量。

syms F P h c x1 x2 x3 x4 x5 x6 x7 x8

%--------System of 8 Equations---------
Eq1 = F == P/(x1*x2/x3);
Eq2 = x1 == x3 - h;
Eq3 = x4 == x2 - x1;
Eq4 = x5 == sqrt(x4^2+(h-c)^2);
Eq5 = x6 == sqrt(x3^2+(x1+x4)^2);
Eq6 = x6 == 3*x5;
Eq7 = x7 == atan((h-c)/x4);
Eq8 = x8 == atan(x3/(x1+x4));
Eq9 = x2 == 5;

%----------------Solver----------------
Solution = solve([Eq1, Eq2, Eq3, Eq4, Eq5, Eq6, Eq7, Eq8, Eq9],...
[F x1 x2 x3 x4 x5 x6 x7 x8]);

%----- Solution desired: F=f(x2) ------
Solution.F

此外,您可以将fsolve用作非线性方程的数值求解器

链接到文档Matlab Documentation for FSolve