我正在尝试使用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
尽管如此,此代码的输出是:
“无法找到明确的解决方案。”
我不确定为什么会有这个问题。有可能找到解决方案吗?
答案 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
用作非线性方程的数值求解器