View Full Version : Matlab problem - Power Series implementation
skillz
25 Apr 2007, 11:48pm
Hi guys!
If anyone has any tips on starting this problem it will be a plus! i understand it, but im not so sure on implementing it in matlab.:confused:
This equation Implements the exponential power series, defined as:
y(x) = ex = 1 + x + (x^2)/2! + (x^3)/3! + (x^4)/4! + ...
Your function statement should be of the form:
function [x, y, err] = eseries(xs, xe, ns, nt)
The first and second arguments define the range of x over which the series is calculated, ns is the number of points at which the series is calculated, and nt is the number of terms (so nt = 3 are all terms up to and including the quadratic term).
The first output argument is the values of x at the which the series is calculated, and the second output
argument the values of the series. The third output argument should be the root-mean-square error between
your approximation to ex and the Matlab exp function defined over the same interval. An appropriate error
message should be printed in the command window if
• nargout < 3.
• nt < 3 or nt > 15.
• xs < 0.
• xs > xe.
• ns < 50.
I think i know how to implement the error stuff, its just getting started - not realy sure - please help!!!!
skillz
25 Apr 2007, 11:56pm
i heard that this can be done possible in as little as 5 lines of code!
shwaip
26 Apr 2007, 06:03pm
Yes, it is possible to write the code in a very small amount of lines...however, your assignment is for you to write this code. Why don't you give it a shot, and we can give feedback...
skillz
26 Apr 2007, 06:08pm
Yes, it is possible to write the code in a very small amount of lines...however, your assignment is for you to write this code. Why don't you give it a shot, and we can give feedback...
I have attempted it using loops - but the aim is to show that matlab can do it without loops and im not sure where to start this is how i done it with loops:
Let's say my X vector is
X = [0 1 2 3 4 5];
Then I loop so
Y(1) = 1 + 0 + 0^2/2! + 0^3/3! + .....
Y(2) = 1 + 1 + 1^2/2! + 1^3/3! + .....
Y(3) = 1 + 2 + 2^2/2! + 2^3/3! + .....
Y(3) = 1 + 3 + 3^2/2! + 3^3/3! + .....
Y(4) = 1 + 4 + 4^2/2! + 4^3/3! + .....
Y(5) = 1 + 5 + 5^2/2! + 5^3/3! + .....
and for each Y value I would loop for each term (since you don't know
this when you write the function).</pre>I just need some help getting started, pointers in the right direction on doing this with Matlab and using no loops.
Any help will be gr8.
thanks
shwaip
26 Apr 2007, 06:13pm
well, matlab treats all variables as matricies.
so if:
a=[1 2];
Then:
2*a = [2 4]
and (more usefully)
a.*a = [1 4]
or
a.^2 = [1 4]
Note that you have to use the .* operator, rather than the * operator to specify that you want matlab to multiply each element, rather than trying to do a matrix multiply. + and - have this behavior by default and ./ has behavior similar to .*
Hope that helps.
skillz
26 Apr 2007, 06:16pm
so if i treat my variables as matricies and manipulate them using element wise multiplication and devision, i would be heading in the right direction?
skillz
26 Apr 2007, 07:22pm
i think i may have a break through - would i need to use linspace at all to generate N points between xs and xe?
Does repmat come into play at any point also?
shwaip
26 Apr 2007, 11:03pm
you could use linspace or the colon ( : ) operator. The former is probably better.
You shouldn't need repmat, though.
skillz
26 Apr 2007, 11:51pm
you could use linspace or the colon ( : ) operator. The former is probably better.
You shouldn't need repmat, though.
i have managed to right this so far:
function [x, y, err] = eseries(xs, xe, ns, nt)
linspace = (xs, xe, ns)
But this only gives out a result in vector form - do i need to change this into matrix and manipulate it that way, i have been trying to do that but with no luck.
to manipulate linspace, i thought i would need to use repmat to replicate it and then use .* for some reason.
Am i going wrong? what could i think about doing next?
shwaip
27 Apr 2007, 07:54am
so linspace is a function (type help linspace).
x = linspace(0,1,10);
creates a vector called x which has 10 linearly spaced points between 0,1.
once you have that x vector, you could do whatever operations you want...
x.^2 would square every element in that matrix.
Also, remember that a vector is just a matrix with one dimension that is of size 1, so you don't need to "convert" a vector to a matrix.
I'm trying to be intentionally vague, because if I'm any more specific, I'll have done the problem for you...
skillz
27 Apr 2007, 09:54am
now that i have found out the values of x, i need to find out the values of the series.
this is where the x.^2 comes into play - i think, would i need to write out all the values i.e:
x.^2 + x.^3 + x.^4 + x.^5 ... x.^n
in a way that
x(1) =
x(2) =
x(3) =
but this seems very long winded, what if i had x(100) it would take ages!?
shwaip
27 Apr 2007, 04:24pm
lets say that you do this...
x=linspace(0,1,10); %x is a linearly spaced vector between 0,1
y = x.^2 + x.^3 + x.^4;
what does this give you if you run that code?
skillz
27 Apr 2007, 06:01pm
i get:
>> x = linspace(0,1,10)
x =
0 0.1111 0.2222 0.3333 0.4444 0.5556 0.6667 0.7778 0.8889 1.0000
>> y = x.^2 + x.^3 + x.^4
y =
0 0.0139 0.0628 0.1605 0.3243 0.5754 0.9383 1.4414 2.1168 3.0000
skillz
27 Apr 2007, 06:04pm
although i have now tried to do something like this:
y = (x.^0/factorial(0)) + (x.^1/factorial(1)) + (x.^2/factorial(2))+ (x.^3/factorial(3)) + (x.^4/factorial(4))
shwaip
27 Apr 2007, 06:38pm
did you get what you expected from trying that?
skillz
27 Apr 2007, 10:49pm
did you get what you expected from trying that?
no, there is something not quite right, i just cant put my finger on it.
vBulletin® v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.