Difference between revisions of "Maple/Simultaneous Equations"
Line 54: | Line 54: | ||
</math></center> | </math></center> | ||
where ''x'', ''y'', and ''z'' are unknowns, ''a'' through ''i'' are known | where ''x'', ''y'', and ''z'' are unknowns, ''a'' through ''i'' are known | ||
− | coefficients, and ''j'' through ''l'' are known variables. | + | coefficients, and ''j'' through ''l'' are known variables. |
− | + | === Initialization === | |
− | + | Go ahead and put | |
+ | <syntaxhighlight> | ||
+ | restart | ||
+ | </syntaxhighlight> | ||
+ | as the first executable in your worksheet. | ||
+ | |||
+ | === Define Equations === | ||
+ | Now there are three different equations to store; you could store all three in a single variable containing a set or you could define three variables and then include them in a set in a solve command. We will do the latter, so at the prompt, type: | ||
<source lang=text> | <source lang=text> | ||
eqn1:=a*x+b*y+c*z=j | eqn1:=a*x+b*y+c*z=j | ||
Line 72: | Line 79: | ||
The three lines will now be in a single execution group and all three will run when you hit return at the end of that line. | The three lines will now be in a single execution group and all three will run when you hit return at the end of that line. | ||
− | Whichever way you entered and ran the code, at this point, Maple now has three variables, each of which defined as an equation. It is perfectly happy having undefined items in the equations. | + | Whichever way you entered and ran the code, at this point, Maple now has three variables, each of which defined as an equation. It is perfectly happy having undefined items in the equations. Note that in Maple the complex number $$\sqrt{-1}$$ is given with a capital $$I$$; you must avoid using $$I$$ as a variable in Maple. We are using lower case $$i$$, which is fine. |
− | == | + | ===Solve Equations With Maple=== |
− | + | Now we just need to give the <code>solve</code> command a set of equations and a list of variables. Note that you need to give a complete list of the unknowns for a system even if yuo are only looking for the value of one of them. That is to say, even if we are just trying to solve $$x$$, we still need to let Maple know that $$x$$, $$y$$, and $$z$$ are the unknowns -- anything '''not''' listed as an unknown variable is considered known, and thus a system can become overconstrained and not have a solution. Add the line: | |
− | |||
− | |||
− | |||
− | |||
− | Maple | ||
− | |||
<source lang=text> | <source lang=text> | ||
− | solve({eqn1, eqn2, eqn3}, [x, y, z]) | + | soln1:=solve({eqn1, eqn2, eqn3}, [x, y, z]) |
</source> | </source> | ||
− | + | Hit return, and you will once again note that Maple produces a list of lists of expressions for the solution. | |
− | + | ||
− | you will note that Maple produces a list | + | As an aside, if we had not included the variable list and |
− | |||
− | the | ||
instead had asked | instead had asked | ||
<source lang=text> | <source lang=text> | ||
− | solve({eqn1, eqn2, eqn3}) | + | soln2:=solve({eqn1, eqn2, eqn3}) |
</source> | </source> | ||
Maple would have given all possible combinations of all 15 symbols that | Maple would have given all possible combinations of all 15 symbols that | ||
Line 98: | Line 97: | ||
''x'' to work with as an unknown by typing: | ''x'' to work with as an unknown by typing: | ||
<source lang=text> | <source lang=text> | ||
− | + | soln3:=solve({eqn1, eqn2, eqn3}, [x]) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> | </source> | ||
− | + | the answer would come back as an empty list empty because no value | |
− | + | of ''x'' satisfies the three equations for arbitrary values of the other 14 variables. | |
− | == | + | === Make Substitutions === |
− | Now that you have the symbolic answers to the variables ''x'', ''y'', and | + | Now that you have the symbolic answers to the variables ''x'', ''y'', and ''z'', you may want to substitute the actual coefficient values to |
− | ''z'', you may want to substitute the actual coefficient values to | + | obtain a numerical solution. In the simple example above we put the substitution expressions directly into the <code>subs</code>command. Given that we may want to re-use those expressions, or that we may have multiple sets of substitutions, another way to use the <code>subs</code> command is to generate a list |
− | obtain a numerical solution. | + | of the known values then tell Maple to substitute in the numerical |
− | of the known values | + | values. Add the following |
− | values | ||
lines of code: | lines of code: | ||
<source lang=text> | <source lang=text> | ||
Vals := a=-1, b=2, c=3, d=4, e=5, f=6, g=7, h=8, i=9, j=10, k=11, l=12 | Vals := a=-1, b=2, c=3, d=4, e=5, f=6, g=7, h=8, i=9, j=10, k=11, l=12 | ||
− | subs(Vals, | + | subs(Vals, soln1) |
</source> | </source> | ||
Remember if you cut and paste these into a single group you will need to add a semi-colon after the first line or else you will get a parsing error. | Remember if you cut and paste these into a single group you will need to add a semi-colon after the first line or else you will get a parsing error. | ||
− | The list in | + | The list of lists in <code>soln1</code> will now be shown with numerical valuesinstead of symbols. Note that you have ''not'' made any actual changes to any of the variables - you have just asked Maple to show you what they would look like given the particular substitutions presented in '''Vals'''. This is a very powerful tool, since you can substitute in a variety of values to see how one or more parameters influence a particular variable or variables. |
− | |||
− | changes to any of the variables - you have just asked Maple to show | ||
− | you what they would look like given the particular substitutions | ||
− | presented in '''Vals'''. This is a very powerful tool, since you can | ||
− | substitute in a variety of values to see how one or more parameters | ||
− | influence a particular variable or variables. | ||
− | |||
<!-- | <!-- |
Revision as of 18:45, 12 January 2024
Contents
Introduction
This page focuses on using Maple to find both the symbolic and the numeric solutions to equations obtained from electric circuits. It assumes that you have already taken the steps in Maple/Initialization and Documentation to start Maple and begin documenting your work.
Very Basic Example
The example code below assumes you are running a worksheet in Maple. There is a finished example at the end of this section which also includes the commands to display different variables. Imagine you have the equation $$ax=d$$ and you want to solve for x. You can do this in Maple as follows:
Initialization
You are not explicitly required to include the restart
command in a worksheet, but it does help if you end up making edits later and need to re-run everything from scratch. Go ahead and put
restart
as the first executable in your worksheet.
Define Equations
In Maple, the way you define a variable is by typing the name of the
variable, followed by the symbols :=, followed by whatever items
you want to store in the variable. Note the importance of the colon
directly in front of the equals sign - without it, Maple will not assign a value to a variable but will merely print out the
equation you typed.
One benefit of this is you can define variables to hold on to
equations and then use those variables later, in concert with Maple's
solver, to get answers for the unknowns. Given that, we will define a variable eqn1
to store the equation $$ax=d$$:
eqn1:=a*x=d
Solve Equations
The easiest way to solve an equation (or a system) of equations is to use the solve
command. The most formal, and flexible, way to use this command is to give it a set of equations (surrounded by curly brackets) and a list of variables (surrounded by square brackets). The result will be an expression, set of expressions, list of expressions, or list of list of expressions depending on the nature and number of the equations and the solutions. For example, if you add the code:
soln1 := solve({eqn1}, [x])
then Maple will produce a variable called soln1
that has a list with a list with an expression; specifically, $$soln1 := [[x = \frac{d}{a}]]$$
Make Substitutions
Now that you have symbolic answers, you can make numerical substitutions for those symbols using the subs
command. The subs command expects a series of equalities to define the substitutions followed by a single item into which to make those substitutions. For example, to see what x is when d is 10, you can write:
subs(d = 10, soln1)
and you will get the new list of lists $$[[x = \frac{10}{a}]]$$. If you want to see multiple substitutions, you can put them all at the start of the soln command:
subs(a=3, d = 10, soln1)
will give $$[[x = \frac{10}{3}]]$$
More Complicated Example
Let us now assume that we want to solve the following equations:
where x, y, and z are unknowns, a through i are known coefficients, and j through l are known variables.
Initialization
Go ahead and put
restart
as the first executable in your worksheet.
Define Equations
Now there are three different equations to store; you could store all three in a single variable containing a set or you could define three variables and then include them in a set in a solve command. We will do the latter, so at the prompt, type:
eqn1:=a*x+b*y+c*z=j
eqn2:=d*x+e*y+f*z=k
eqn3:=g*x+h*y+i*z=l
Note that each time you hit return to go to the next line, Maple processes your input and reports back what it has done. It will also number the outputs for you so you can refer to them later. As an aside, if you try to copy and paste this whole block, when you hit return, you will get a parsing error. Maple is trying to interpret the whole group as one long string of code and gets confused at the end of the first equation. To fix this, if you copy and paste multiple lines of codes, you can end them with a semi-colon:
eqn1:=a*x+b*y+c*z=j;
eqn2:=d*x+e*y+f*z=k;
eqn3:=g*x+h*y+i*z=l;
The three lines will now be in a single execution group and all three will run when you hit return at the end of that line.
Whichever way you entered and ran the code, at this point, Maple now has three variables, each of which defined as an equation. It is perfectly happy having undefined items in the equations. Note that in Maple the complex number $$\sqrt{-1}$$ is given with a capital $$I$$; you must avoid using $$I$$ as a variable in Maple. We are using lower case $$i$$, which is fine.
Solve Equations With Maple
Now we just need to give the solve
command a set of equations and a list of variables. Note that you need to give a complete list of the unknowns for a system even if yuo are only looking for the value of one of them. That is to say, even if we are just trying to solve $$x$$, we still need to let Maple know that $$x$$, $$y$$, and $$z$$ are the unknowns -- anything not listed as an unknown variable is considered known, and thus a system can become overconstrained and not have a solution. Add the line:
soln1:=solve({eqn1, eqn2, eqn3}, [x, y, z])
Hit return, and you will once again note that Maple produces a list of lists of expressions for the solution.
As an aside, if we had not included the variable list and instead had asked
soln2:=solve({eqn1, eqn2, eqn3})
Maple would have given all possible combinations of all 15 symbols that would satisfy the equations. Conversely, if we had given Maple only x to work with as an unknown by typing:
soln3:=solve({eqn1, eqn2, eqn3}, [x])
the answer would come back as an empty list empty because no value of x satisfies the three equations for arbitrary values of the other 14 variables.
Make Substitutions
Now that you have the symbolic answers to the variables x, y, and z, you may want to substitute the actual coefficient values to
obtain a numerical solution. In the simple example above we put the substitution expressions directly into the subs
command. Given that we may want to re-use those expressions, or that we may have multiple sets of substitutions, another way to use the subs
command is to generate a list
of the known values then tell Maple to substitute in the numerical
values. Add the following
lines of code:
Vals := a=-1, b=2, c=3, d=4, e=5, f=6, g=7, h=8, i=9, j=10, k=11, l=12
subs(Vals, soln1)
Remember if you cut and paste these into a single group you will need to add a semi-colon after the first line or else you will get a parsing error.
The list of lists in soln1
will now be shown with numerical valuesinstead of symbols. Note that you have not made any actual changes to any of the variables - you have just asked Maple to show you what they would look like given the particular substitutions presented in Vals. This is a very powerful tool, since you can substitute in a variety of values to see how one or more parameters influence a particular variable or variables.
Multiple and Dependent Substitution Lists
If you have several sets of equations you want to use for substitution
- including some which are dependent on values set in other equations,
you can still use subs
-- you just need to be careful about the
order of the substitutions. As an example, imagine some variable:
where
and
To get m in terms of r, s, t, and u, you could write:
MyEqn:=m=p+q;
SubsList1:=p=r*s, q=t-u;
subs(SubsList1, MyEqn);
If you want to get m's numerical value, you must first get m in terms of r, s, t, and u, and then you can substitute in the numbers for those variables. Specifically:
MyEqn:=m=p+q;
SubsList1:=p=r*s, q=t-u;
SubsList2:=r=1, s=2, t=3, u=4;
subs(SubsList1, SubsList2, MyEqn);
Putting the equations in the wrong order will end up yielding an
answer that is still in terms of r, s, t, and u. The reason
is that subs
only makes substitutions into the last entry
in the argument list.
Sometimes, you will need to take equations out of a set of brackets to use them. For example, assume that you have some variable you want to calculate called alpha, which has a formula of:
You can put in the solutions for x, y, and z to get alpha
in terms of those characters. What makes
this a bit difficult is that MySoln
is given as a
single-row matrix and subs
just wants the equations
themselves. To extract only the equations, you can write:
subs(MySoln[1][], Vals, ThingToSubInFor)
Go ahead and add the line
subs(MySoln[1][], Vals, alpha)
to the end of your worksheet.
Again - the order is important - you need to first substitute in the
equations for the variables higher in the dependency list, then give values to the
known quantities, then substitute all that into whatever is in the
final argument of subs
.
Run the entire script and make sure that \(\alpha\) is
\(\frac{1}{3}\) when everything gets substituted in.
Cleaning Things Up
Many times, Maple will produce an expression that is more complicated than it needs to be. To get what it considers to be the simplest form, use the simplify(expand( )) compound function. The expand will take the expression and represent it using as many simple terms as necessary while simplify will recombine them in the most compact form. Finally, to get a decimal value, use the evalf[N]( ) function, where N represents the number of decimal digits to use. For example,
simplify(expand(alpha))
will produce the most symbolically simplified version of \(\alpha\) while
evalf[8](subs(Vals, alpha))
will produce a floating point result for \(\alpha\). With practice, you
will see how best to combine evalf
, simplify
, and expand
to get the form of answer you want.
Memory Issues
A major issue to consider with Maple is its memory. At the end of the worksheet above, there are several variables that are defined, including x, y, and z. If you go back near the beginning, click in the line where eqn1 is defined, and hit return, you will notice that where x, y, and z were before, their symbolic solutions from much further down the worksheet are being used. This is why the restart command is so helpful - if you need to to run a worksheet again, it is best to always start from scratch. A shortcut for running an entire worksheet is the !!! button at the top of the window.