# Convert symbolic inequality to matrix form

2 ビュー (過去 30 日間)
Cedric Kotitschke 2023 年 7 月 4 日

Let's say I have a symbolic inequality:
2*x + 3*y <= 5
Is there a way to elegantly extract the matrices A, b for the equivalent inequality A*[x;y] <= b?
I know the function equationsToMatrix but that only works for equalities.
Thanks!
##### 3 件のコメント1 件の古いコメントを表示1 件の古いコメントを非表示
Nathan Hardenberg 2023 年 7 月 4 日
My thought was the same as the one from @Torsten (I think). But I would not consider it an elegant way
syms x y
eq = 2*x + 3*y <= 5;
eq1 = lhs(eq) == rhs(eq) % convert to equality
eq1 =
[A, b] = equationsToMatrix(eq1, [x y])
A =
b =
Cedric Kotitschke 2023 年 7 月 4 日
I would surely call that elegant, thanks!

サインインしてコメントする。

### 回答 (2 件)

Gandham Heamanth 2023 年 7 月 4 日
Yes, in MATLAB, you can use the symbolic math toolbox to extract the matrices A and b from a symbolic inequality. Here's how you can do it:
syms x y;
% Define the symbolic inequality
inequality = 2*x + 3*y <= 5;
% Extract the coefficients of x and y
coefficients = coeffs(inequality, [x, y]);
% Extract the matrix A and vector b
A = [coefficients(1), coefficients(2)];
b = coefficients(3);
% Display the matrices A and b
disp('Matrix A:');
disp(A);
disp('Vector b:');
disp(b);
Note that this code assumes you have the Symbolic Math Toolbox installed in MATLAB.
##### 2 件のコメントなしを表示なしを非表示
Nathan Hardenberg 2023 年 7 月 4 日
The coeffs functions does not seem to work.
syms x y;
% Define the symbolic inequality
inequality = 2*x + 3*y <= 5;
% Extract the coefficients of x and y
coefficients = coeffs(inequality, [x, y])
coefficients =
% Extract the matrix A and vector b
A = [coefficients(1), coefficients(2)];
Index exceeds the number of array elements. Index must not exceed 1.

Error in indexing (line 936)
R_tilde = builtin('subsref',L_tilde,Idx);
b = coefficients(3);
% Display the matrices A and b
disp('Matrix A:');
disp(A);
disp('Vector b:');
disp(b);
As an advice: you can past your code and mark it as code. Then you can run it in the browser and it is easier to read
Cedric Kotitschke 2023 年 7 月 4 日
But this assumes a very specific structure of the inequality. I also want to be able to deal with those structurs:
syms x y
ineq1 = 2*x <= 2-y;
ineq2 = 0 >= 4*x + 6*y;
ineq3 = 3 >= 5*y;
etc.

サインインしてコメントする。

Nathan Hardenberg 2023 年 7 月 4 日
Moved my comment to an answer (to be accepted only if satisfied):
syms x y
eq = 2*x + 3*y <= 5; % inequality
eq1 = lhs(eq) == rhs(eq) % convert to equality
eq1 =
[A, b] = equationsToMatrix(eq1, [x y]) % use equationsToMatrix-function
A =
b =

サインインしてコメントする。

### カテゴリ

Help Center および File ExchangeAssumptions についてさらに検索

R2021a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by