From help-octave-request at bevo dot che dot wisc dot edu Fri Dec 27 17:52:24 2002 Subject: Re: Newbie question solving lin sys From: "William Lash" To: , "John B. Thoo" CC: Date: Fri, 27 Dec 2002 17:51:45 -0600 ---------- Original Message ---------------------------------- From: John B. Thoo Date: Fri, 27 Dec 2002 14:56:39 -0800 >Bill--- > >Yowzer! Your suggestion worked perfectly. > >octave:80> for s = [0:11] > > s.^[0:11] * x > > end >ans = 22 >ans = 28.000 >ans = 31.000 >ans = 39.000 >ans = 46.000 >ans = 53.000 >ans = 56.000 >ans = 55.000 >ans = 49.000 >ans = 42.000 >ans = 33.000 >ans = 27.000 > >I didn't realize there would be a loss of precision. (Not only am I new >to Octave, but I'm also new to numerics in general.) > >**Three follow-up questions. (I hope that you don't mind.) > >1. What does the dot after the s in s.^[0:11] mean in the "for" loop? In Octave (and Matlab), usually things like multiplication and exponentiation are matrix type operations. Putting a "." in front of the operation makes it do things in an "element by element" fashion. To be honest, I wasn't sure that s.^[0:11] would give me a row vector with the elements s^0 through s^11 untill I tried it. > >2. What in the "for" loop tells Octave to add the terms? The multiplication of the row vector containing the powers of s and the column vector containing the values of x in matrix arithmetic give you the sum of the products as above. Think of it as S*X where S is 1x12, and X is 12x1. You could do the same using: sum(x'.*s.^[0:11]) > >3. How do I plot the graph on [0:11] without a loss of precision? I >tried this without success: > >octave:84> gplot [0:11] "x(1) + x(2)*x + x(3)*x**2 + x(4)*x**3 + >x(5)*x**4 + x(6)*x**5 + x(7)*x**6 + x(8)*x**7 + x(9)*x**8 + x(10)*x**9 + >x(11)*x**10 + x(12)*x**11" > line 0: undefined function: x I would probably do something like: for s = [0:11] z(s+1) = s.^[0:11] * x; end plot([0:11],z) > > >Thanks for your patience. > >---John. > > >On Friday, December 27, 2002, at 02:15 PM, William Lash wrote: > >> Whenever you type in the numbers for you calculation in s you are >> losing precision. Instead of typing in: >> >>> octave:55> 22 + 129.32*s - 330.01*s**2 + 356.74*s**3 - 211.74*s**4 + >>> 77.512*s**5 - 18.446*s**6 + 2.9092*s**7 - 0.30191*s**8 + >>> 0.019818*s**9 - >>> 0.0007457*s**10 + 0.00001225*s**11 >> >> Try the following: >> >> x(1)+x(2)*s+x(3)*s**2+x(4)*s**3+x(5)*s**4+x(6)*s**5+x(7)*s**6+x(8)*s**7+x( >> 9)*s**8+x(10)*s**9+x(11)*s**10+x(12)*s**11 >> >> There are better ways to write this in octave, one way is: >> >> s.^[0:11] * x >> >> and you could check all the values with a for loop: >> >> for s = [0:11] >> s.^[0:11] * x >> end >> >> >> Bill > > ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------