Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: code problem
Replies: 2   Last Post: Jun 19, 2012 8:11 PM

 Messages: [ Previous | Next ]
 Jonathan Allan Posts: 123 Registered: 12/7/04
Re: code problem
Posted: Jun 19, 2012 8:11 PM

> On Wednesday, June 20, 2012 11:22:08 AM UTC+12, Jonathan wrote:
> > Hi,
> > I'm trying to solve a simple function iteratively. My code is as follows...
> > d2=3;
> > z=0.0192;
> > newvar=zeros(1,1552);
> > for n = 1:.1:156
> > newvar(n) = (d2./n).*tanh((2*pi*d2)./n);
> > end
> >
> > The first issue is that Matlab objects to this and gives me the message "Attempted to access newvar(1.1); index must be a positive integer or logical."
> >
> > Ultimately, what I'm trying to find is the n value that equals the solution to the equation, which is indicated by z. I was planning to do this by using find, once I have run the loop.
> >
> > What am I doing wrong?
> >
> > Thanks
> > Jon

>
> First of all, you cannot proclaim that you are not solving it iteratively.
> You are solving it by preparing a look-up table.
> Secondly, as the error message has told you, you are using a floating point number as an index - you can't do that.
> Here's one way to do it without a loop:
> L=[1:0.1:156]; % I'm guessing L is wave length
> newvar = (d2./L).*tanh((2*pi*d2)./L);
>
> Now, you cannot use find, but you can use min:
> [dum,imn]=min(abs(newvar-z));
> and your solution is L(imn)

Thanks Tideman. Very simple! Appreciate the help.

Date Subject Author
6/19/12 Jonathan Allan
6/19/12 Derek Goring
6/19/12 Jonathan Allan