# Result for solve( ) with minimized number of parameters

2 visualizzazioni (ultimi 30 giorni)
Nicolas Mira Gebauer il 26 Ott 2021
I have an underdetermined system with the following variables:
vars = [x1;u;x2;x1_d;u_d;x2_d]
and the following equations:
eq = [x2_d == 0;
log(x2) + sin(u) == 0]
I want to solve the system using the 'ReturnConditions' function, in order to get a parametrized solution.
Is it possible to obtain a parametrization such that the number of parameters is minimized? For example, if I run in this case the following:
Sol = solve(eq, [u;x2], 'ReturnConditions', true)
I get the following solution:
Sol.parameters = [k, z4, z5, z6, z7]
Where the second equations was parametrized as u in terms of x2:
Sol.x2 = z5
Sol.u = pi + asin(log(z5)) + 2*pi*k
However, if the solver would have chosen to parametrize x2 in terms of u, I could have get something like this (the following was done by hand, just to show my expected result):
Sol.u = z5
Sol.x2 = exp(-sin(z5))
In this case, we don't need the parameter k, thus our parameters would be as follows:
Sol.parameters = [z4, z5, z6, z7]
I would really appreciate your help in here, I hope it's clear enough.
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

John D'Errico il 26 Ott 2021
Modificato: John D'Errico il 26 Ott 2021
The problme is, the "minimal" solution that you ask for is not the complete solution. You asked solve to provide a solution. How is solve to know that you want a half baked job, only a partial solution? Solve cannot read your mind.
Of course, if you knew in advance which parameters mattered to you, then you could manage things slightly better. So you might decide to choose in advance, that some of the parameters are perhaps zero. So you might decide to try setting all combinations of 4 of the 6 parameters to zero, and then seeing if solve can solve the problem in a way that makes you happy.
Or, you might look at the solution you did get, with essentially:
Sol.x2 = z5
Sol.u = pi + asin(log(z5)) + 2*pi*k
and then recognize that k has been introduced because there are infinitely many solutions. So set k==0, and then it reduces a bit. But now we still have the problem, is x2==z5 real? Is x2 bounded? is u real? Look at the original problem you posed. We see:
log(x2) + sin(u) == 0
But if x2 is such that log(x2) is greater than 1, or less than -1, then u will not be real valued. And of course, solve has not been told of any of that, so it cannot know how far to reduce the problem. But all of this is doing the thinking for solve, and if you do not want to do any thinking at all, then solve will be hopelessly stuck.
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Nicolas Mira Gebauer il 11 Nov 2021
Sorry for the late reply. At the end your answer helped me solve my problem. Thank you!

Accedi per commentare.

### Più risposte (1)

Walter Roberson il 26 Ott 2021
No. You asked to solve in terms of u and x2, so the results always have to have u and x2 expressed in terms of constants or independent variables.
##### 2 CommentiMostra NessunoNascondi Nessuno
Nicolas Mira Gebauer il 26 Ott 2021
I understand. I probably wasn't clear enough. But I think my question still stands. How could I get the second result instead of the first? I mean a result with
Sol.u = z5
Sol.x2 = exp(-sin(z5))
(They are both expressed in terms of constants or independent variables as well)
Thank you for your time Walter!
Walter Roberson il 26 Ott 2021
syms x1 u x2 x1_d u_d x2_d
vars = [x1;u;x2;x1_d;u_d;x2_d]
eq = [x2_d == 0;
log(x2) + sin(u) == 0]
x2_sol = solve(eq(2), x2)
eq2 = subs(eq(1), x2, x2_sol)
u_sol = solve(eq2, u, 'returnconditions', true)

Accedi per commentare.

### Categorie

Scopri di più su Conversion Between Symbolic and Numeric in Help Center e File Exchange

R2020b

### Community Treasure Hunt

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

Start Hunting!

Translated by