gpt4 book ai didi

Matlab 相当于 Mathematica 的 FindInstance

转载 作者:行者123 更新时间:2023-12-04 00:31:18 25 4
gpt4 key购买 nike

我几乎所有的事情都在 Matlab 中完成,但我还没有想出一个在 Matlab 中复制 Mathematica 的 FindInstance 函数的好方法。例如,使用 Mathematica,我可以输入:

FindInstance[x + y == 1 && x > 0 && y > 0, {x, y}]

它会给我:

{{x -> 1/2, y -> 1/2}}

当不存在解决方案时,它会给我一个空的Out。我在工作中经常使用它来检查是否存在不平等系统的解决方案——我并不真正关心特定的解决方案。

似乎应该有一种方法可以用 Solve 在 Matlab 中复制它.帮助文件中有一些部分是关于求解带条件的参数化解的一组不等式。还有另一节介绍使用 PrincipalValue 仅吐出一个解决方案,但这似乎只是从有限的解决方案集中选择,而不是提出满足参数的解决方案。

谁能想出一种在 Matlab 中复制 FindInstance 功能的方法?

最佳答案

根据 jlandercy 所说的内容,您当然可以使用 MATLAB 的 linprog函数,它是 MATLAB 的线性规划求解器。 MATLAB 宇宙中的线性程序可以这样表述:

您寻求在 R^n 中找到一个解决方案 x,它最小化目标函数 f^{T}*x一组不等式约束,等式约束,并且 x 中的每个组件都在下限和上限之间。因为您想找到满足上述给定约束的最小可能值,所以您真正想要的是:

因为 MATLAB 只支持小于的不等式,所以您需要取前两个约束的负数。此外,MATLAB 不支持strict 不等式,因此您必须执行一个约束,以便检查每个变量是否小于一个小数,也许是比如将阈值 epsilon 设置为 1e-4。因此,根据以上内容,您的公式现在是:

请注意,我们没有任何上限或下限,因为这些条件已在等式和不等式约束中得到满足。您现在要做的就是将此问题插入 linproglinprog 以下列方式接受语法:

x = linprog(f,A,b,Aeq,beq);

f 是与目标函数一起使用的系数向量,A 是与不等式一起使用的系数矩阵,b是每个不等式约束右侧的系数向量,Aeqbeq 与不等式相同,但用于等式约束。 x 将是线性规划问题的解决方案。如果我们将您的问题重新表述为上述矩阵形式,我们现在得到:

关于线性规划公式,我们现在可以看到 MATLAB 宇宙中的每个变量需要是什么。因此,在 MATLAB 语法中,每个变量变为:

f = [1; 1];
A = [-1 0; 0 -1];
b = [1e-4; 1e-4];
Aeq = [1 1];
beq = 1;

因此:

x = linprog(f, A, b, Aeq, beq);

我们得到:

Optimization terminated.

x =

0.5000
0.5000

如果线性规划不是您想要的,请考虑查看 MATLAB 的 MuPAD 界面:http://www.mathworks.com/help/symbolic/mupad_ug/solve-algebraic-equations-and-inequalities.html - 这或多或少模仿了您在 Mathematica 中看到的内容,如果您对此感到更舒服的话。


祝你好运!

关于Matlab 相当于 Mathematica 的 FindInstance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com