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 lookup 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(newvarz));
and your solution is L(imn)
