如何在不开始猜测的情况下使用fsolve

cod*_*087 1 matlab

我想开发一个用于求解线性和非线性方程组的桌面应用程序.我想用Matlab来使用C#.我之前从未使用过matlab,但我正在努力学习我的项目.

所以,我正在尝试使用fsolve,并按照fsolve文档中给出的示例进行操作.

function F = myfun(x)
F = [2*x(1) - x(2) - exp(-x(1));
    -x(1) + 2*x(2) - exp(-x(2))];

**x0 = [-5; -5];           % Make a starting guess at the solution**
options=optimset('Display','iter');   % Option to display output
[x,fval] = fsolve(@myfun,x0,options)  % Call solver
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我不知道起始猜测即x0

我只有n个未知的等式.请指导我做什么以及如何进行.

一些示例方程式:

a * b = 10^-14
(a * d)/c = 10^-6.3
(a * e)/d = 10^-10.3
.
.
.
c+d+e = 2.3 * 10^-3
Run Code Online (Sandbox Code Playgroud)

Dan*_*hoa 5

fsolve使用数值方法来解决代数方程组 - 你绝对需要初始猜测才能使用fsolve.如果你要分析求解方程,你需要系统的线性化(如果它是非线性的,并注意这可能会或可能不会给你带来好的结果),你可以使用mldivideLU分解或其他一些矩阵分解快速解决系统问题Ax=b.

您可能会推出自己的有限根寻找方法(黄金分割搜索,抛物线插值等)来解决您需要初步猜测的事实 - 这里的权衡是(a)有界根寻找方法比无界方法花费更长时间这需要初步猜测; (b)您需要确保您的解决方案位于下限和上限之内.

简单地说,没有办法数字地指定一组方程并分析地解决它 - 你应该分析解决系统(这可能是不可能的 - 如果是的话,如果你需要非线性系统工作,我建议使用Mathematica而不是MATLAB没有线性化)或必须满足于指定初始猜测或界限.

在我看到的基于物理动机的基于工程的系统中,零向量通常是一个足够好的猜测,但这不应该是硬编码的 - 如果你想解决任何任意系统,你不应该强迫用户使用它作为初步猜测.