Sorry for the many question lately, but somehow I'm running into a lot of problems trying to use Matlab to solve multiple equations. I'm also not finding much online and in the Matlab help about this. So if someone can recommend a nice tutorial, I'm thankful. So here is my question:
I created a set of equations with variable names that make sense to me:
Eq = X11 + X12*v1_2 + X13*v1_3 - 1 X12*v2_2 - 2*X11 + X13*v2_3 + 4 3*X11 + X12*v3_2 + X13*v3_3 + 9 X21 - v1_2 + X22*v1_2 + X23*v1_3 X22*v2_2 - 2*v2_2 - 2*X21 + X23*v2_3 3*X21 + 3*v3_2 + X22*v3_2 + X23*v3_3 X31 - v1_3 + X32*v1_2 + X33*v1_3 X32*v2_2 - 2*v2_3 - 2*X31 + X33*v2_3 3*X31 + 3*v3_3 + X32*v3_2 + X33*v3_3
for this I used:
X = sym('X%d%d',3,'real'); V = sym('v',[C,C],'real');
for example which automatically creates numbered symbolic variables. After some operations I get the above equations. So far so good. Now I want to find values for which all the equations are (close to) zero.
Now I can turn these equations into a function handle with matlabFunction which gives me a handle of the form:
fun=matlabFunction(eq); fun=@(X11,X12...)
However, when trying to use fmincon or other solvers, this does not work, since they seem to only accept function handles of the form
fun=@(x) f(x(1),...,x(n))
(or do they?). Ok, well..then I thought to replace the original variables with x(1),…x(n) and then try to convert it into a function handle.
allVars=symvar(Eq);newVars = sym(['[',sprintf('x(%d) ',1:length(allVars)),']']);Eq2 = subs(Eq,allVars,newVar);
which gives:
Eq2 = x(1) + x(2)*x(10) + x(3)*x(11) - 1 x(2)*x(12) - 2*x(1) + x(3)*x(13) + 4 3*x(1) + x(2)*x(14) + x(3)*x(15) + 9 x(4) - x(10) + x(5)*x(10) + x(6)*x(11) x(5)*x(12) - 2*x(12) - 2*x(4) + x(6)*x(13) 3*x(4) + 3*x(14) + x(5)*x(14) + x(6)*x(15) x(7) - x(11) + x(8)*x(10) + x(9)*x(11) x(8)*x(12) - 2*x(13) - 2*x(7) + x(9)*x(13) 3*x(7) + 3*x(15) + x(8)*x(14) + x(9)*x(15)
I was quite happy after this step. But when I then try to convert this into a function handle it doesn't work either, since it gives me something like this:
matlabFunction(Eq2) @()[x(1.0)+x(2.0).*x(1.0e1)+x(3.0).*x(1.1e1)-1.0;x(1.0).*-2.0+x(2.0).*x(1.2e1)+x(3.0).*x(1.3e1)+4.0;x(1.0).*3.0+x(2.0).*x(1.4e1)+x(3.0).*x(1.5e1)+9.0;x(4.0)-x(1.0e1)+x(5.0).*x(1.0e1)+x(6.0).*x(1.1e1);x(4.0).*-2.0-x(1.2e1).*2.0+x(5.0).*x(1.2e1)+x(6.0).*x(1.3e1);x(4.0).*3.0+x(1.4e1).*3.0+x(5.0).*x(1.4e1)+x(6.0).*x(1.5e1);x(7.0)-x(1.1e1)+x(8.0).*x(1.0e1)+x(9.0).*x(1.1e1);x(7.0).*-2.0-x(1.3e1).*2.0+x(8.0).*x(1.2e1)+x(9.0).*x(1.3e1);x(7.0).*3.0+x(1.5e1).*3.0+x(8.0).*x(1.4e1)+x(9.0).*x(1.5e1)]
Along with a warning:
Warning: Function 'x' not verified to be a valid MATLAB function.
Alternatively, I could specify the function handle as file/function like it is mentioned in another post by me, but this also does not seem to be a solution since I have to specify the equations manually then and loops do not work.
In short, I seem to have no idea what I'm doing, so any help appreciated.
Best Answer