Multi Objective nonlinear functions with unknown multi parameters

Dear Matlabers,
Lets say my system of equations are as below:
((1-x(1))*(10+x(5)))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.154;
((1-x(1))*(10-x(5)))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.254;
(x(1)*(10+x(4)))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.545;
(x(1)*(10-x(4)))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.034;
(10+(x(1)*x(4))+(1-x(1))*x(5))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.994;
(10-(x(1)*x(4))-(1-x(1))*x(5))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.063;
and I want to find x(1) ... x(5) values so that the equalities hold.
I already tried so many optimization methods but the problem is, after finding the values when I replace them with x values the error values I came across are very large.
Any help is appreciated..
Best,

10 commentaires

Where is x(6) in your equations ?
You are right my fault. I correct it to x(1) ... x(5).
Then your system is overdetermined and errors in the equations for a least-squares solution from an optimizer are normal.
Yes that exactly is and I am trying to find the best way with the minimum error.
lsqnonlin, e.g., will give you a solution for x(1),...,x(5) that minimizes the sum of errors squared of the equations. Do you have another error in mind ?
I want to solve the whole equations simultaneously but the error for each equation be minimum not the square root of sum of squared errors of each equation.
I mean when I calculate the x(1) ... x(5) values and replace them for example in any of the
((1-x(1))*(10+x(5)))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.154;
or
(10-(x(1)*x(4))-(1-x(1))*x(5))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.063;
equations, the equality holds.
I already tried many methods like fmincon, fsolve, gamultiobj but I was not satisfied by the results,
I mean when I calculate the x(1) ... x(5) values and replace them for example in any of the
((1-x(1))*(10+x(5)))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.154;
or
(10-(x(1)*x(4))-(1-x(1))*x(5))^2/(((x(1)^2)*x(3)^2)+((1-x(1))^2*x(2)^2)) = 0.063;
equations, the equality holds.
Say (for simplicity) your equations read
x(1) = 7
x(1) = 13
(2 equations in one unknown), you can't simultaneously find x(1) that makes the error in both equations equal to zero. The best compromise is x(1) = (7+13)/2 = 10.
That's the problem if you have more equations than unknowns.
so in this case I think the best way is to use fmincon to minimize the square root of overall error.
lsqnonlin is especially designed to solve problems like yours, but you are of course free in the choice of the optimizer.
Thank you for your time and your effort.
Best

Connectez-vous pour commenter.

Réponses (1)

Alex Sha
Alex Sha le 28 Août 2019
There are multi-solutions:
1:
x1: 0.387245311047365
x2: -0.00972723068513297
x3: -40.2902696169456
x4: 18.9579782048437
x5: -2.65707955299356
2:
x1: 0.387245311627332
x2: 7.2906925850934
x3: 38.6033440479639
x4: 18.9579781524691
x5: -2.65707955385685
3:
x1: 0.387245311366753
x2: -24.1738267443381
x3: 12.6548907569997
x4: 18.9579781707223
x5: -2.65707955330091

Catégories

Question posée :

le 22 Juil 2019

Réponse apportée :

le 28 Août 2019

Community Treasure Hunt

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

Start Hunting!

Translated by