在matlab中象征性地求解非线性最小化方程

时间:2013-08-30 12:28:09

标签: matlab math mathematical-optimization symbolic-math

我有一个很大的欠定方程系统,我根据任何给定的约束搜索一个独特的解决方案。我将我的问题简化为以下问题:

x²-4=0,
y²-9=0,
x*y=myMin,
x+y=myMin.

在Matlab中以符号方式实现此功能的最佳方法是什么,以便返回

x=2
y=-3

我正在搜索类似

的内容
syms x y
S=solve(...
x²-4==0,...
y²-9==0,...
x*y==myMin,...
x+y==myMin);

2 个答案:

答案 0 :(得分:1)

我不知道如何将min指定为solve的函数命令。但这是一种解决方程式然后根据约束对结果进行后处理的方法:

syms x y
S=solve(x^2-4==0,y^2-9==0);

[~,idx] = min(double(S.x .* S.y)+double(S.x + S.y));

X = double(S.x(idx))
Y = double(S.y(idx))

这给出了:

X =
  2

Y =
 -3 

必须使用double命令转换符号结果,以允许使用min函数进行处理。

答案 1 :(得分:0)

你似乎遇到的问题是没有解决方案,甚至matlab也无法解决这个问题。

试试这样:

myMin = -6;

syms x y
S=solve(...
x²-4==0,...
y²-9==0,...
x*y==myMin,...
x+y==myMin + 5); %Note the +5 to make it feasible

无法尝试自己,但快速计算告诉我,这个至少是可以解决的。