MATLAB Matlab solve function in for loops

AI Thread Summary
The discussion focuses on using the "solve" function in MATLAB within nested "for" loops to solve a matrix of equations. The user is attempting to solve for 'x' in a symbolic matrix 'y', where each element of 'y' is set to zero. The initial code attempts to create a 2x2 matrix of solutions but encounters errors related to indexing and the symbolic toolbox. The main issue arises from defining 'y' as a matrix of a single variable, leading to confusion about indexing elements like 'y(a,b)'. The user also provides a more complex example involving multiple variables but continues to face similar errors. The discussion highlights the need for a clearer understanding of how to structure symbolic equations in MATLAB, particularly when dealing with matrices and loops.
NJP
Messages
3
Reaction score
0
Matlab "solve" function in "for" loops

I need to solve a similar problem like shown in the below codes for a larger matrix,
The 'x' here needs to be solved for each y(a,b). Each of this y(a,b) is equal to zero and 'x' will vary accordingly , so it will give a 2by 2 matrix for 'x' as well.

syms x;
y = [sin(x)+5 3*cos(x)-4
cos(x)-1 cos(x)-0.6];

C=zeros(2,2);
for a=1:2
for b=1:2

B(a,b)= solve('y(a,b)=0',x);
%B(a,b)=solve('y(a,b)=C(a,b)',x);
end
end

When I try to solve it without the loop it gives the following error,
(Warning: 4 equations in 1 variables.
Warning: Explicit solution could not be found.
> In solve at 81)
When I try with the loop it gives me the following error,
? Error using ==> mupadmex
Error in MuPAD command: Invalid index
  • ;

    during evaluation of 'matchNonSingletonLHS'

    Error in ==> sym.sym>sym.subsasgn at 1420
    C = mupadmex('mllib::subsasgn',A.s,B.s,inds{:});


    It will be great if someone can give me a clue to solve this problem.
 
Physics news on Phys.org


I don't often use the symbolic toolbox, but I think the issue is that you've defined y to be a 2x2 matrix of one variable (x).
I am not even sure what you think y(a,b) would mean in this case?
 


Thanks for the reply. Like I said y here is just a random matrix. My actual problem needs to be solved for voltage angle difference between busbars and contains a 96by10 matrix. However the the matrix I need to solve is quite similar to 'y'. But each element contains larger first order trigonometric equations.
 


Try this:

syms x,y,z,w;
y = [sin(x)+5 3*cos(y)-4
cos(z)-1 cos(w)-0.6];

C=zeros(2,2);
for a=1:2
for b=1:2

B(a,b)= solve('y(a,b)=0',x);
B(a,b)= solve('y(a,b)=0',y);
B(a,b)= solve('y(a,b)=0',z);
B(a,b)= solve('y(a,b)=0',w);
end
end
 


It gives me the below errors,
:(

?? Error using ==> mupadmex
Error in MuPAD command: Invalid index
  • ;

    during evaluation of 'matchNonSingletonLHS'

    Error in ==> sym.sym>sym.subsasgn at 1420
    C = mupadmex('mllib::subsasgn',A.s,B.s,inds{:});

    Error in ==> Untitled2 at 9
    B(a,b)= solve('y(a,b)=0',x);
 
Back
Top