Google Answers Logo
View Question
 
Q: while loop in Mathematica ( No Answer,   8 Comments )
Question  
Subject: while loop in Mathematica
Category: Science > Math
Asked by: eyal32ny-ga
List Price: $4.00
Posted: 27 Sep 2004 07:48 PDT
Expires: 27 Oct 2004 07:48 PDT
Question ID: 406877
I am trying to make a loop in mathematica around:
  
  If  [Sign [fc] == Sign[fa], {a = c}, {b = c}]
      fa = f[a]
        fb = f[b]
          c = a + 0.5*(b - a)
              fc = f[c]

when I do:
While [n < 10,
  If  [Sign [fc] == Sign[fa], {a = c}, {b = c}]
      fa = f[a]
        fb = f[b]
          c = a + 0.5*(b - a)
              fc = f[c]; n++]

I am getting errors all around:
Set::write: Tag Plus in 0.0222862 +2 is Protected.

Set::write: Tag Times in -0.0112788\2.5 is Protected.

Set::write: Tag Times in -0.0112788\0.110031 is Protected.

General::stop: Further output of Set::write will be suppressed during
this calculation.


what am I doing wrong?

my full code is:
Clear[a]
Clear[b]
Clear[c]
Clear[b]
Clear[f]
f[x_]=(x*E^(-x))-0.16064
a=2
b=3
n=1
fa=f[a]
fb=f[b]
c=a+0.5*(b-a)
fc=f[c]
While [n < 10,
  If  [Sign [fc] == Sign[fa], {a = c}, {b = c}]
      fa = f[a]
        fb = f[b]
          c = a + 0.5*(b - a)
              fc = f[c]; n++]
Answer  
There is no answer at this time.

Comments  
Subject: Re: while loop in Mathematica
From: biophysicist-ga on 28 Sep 2004 11:09 PDT
 
You need to put semicolons at the end of each command.  If you need to
see the output, you can put in additional lines like
Write["stdout",fa]
to look at the values.
Subject: Re: while loop in Mathematica
From: eyal32ny-ga on 28 Sep 2004 12:35 PDT
 
I dont think this is the problem.
using : 
 While[n <  10^2 ,
     If[Sign[f[a]] \[Equal] Sign[f[c]], 
      a = c,   b = c;
       f[b] = f[c];]
          c = a + 0.5*(b - a);
           n++;]
works without any problems

removing f[b] = f[c] makes it complain.
Subject: Re: while loop in Mathematica
From: xpertise-ga on 28 Sep 2004 12:46 PDT
 
It's hard to guess what you are really trying to do, what's sure that
you are attempting some very ugly procedural programming in
Mathematica!
(I am looking at it)
Subject: Re: while loop in Mathematica
From: xpertise-ga on 28 Sep 2004 12:53 PDT
 
well here's your working solution anyway, 4 bucks please :)

f[x_]:=(x*E^(-x))-0.16064;

a=2;
b=3;
n=1;
c=a+0.5*(b-a);

fa=f[a];
fb=f[b];
fc=f[c];

While [n<10,
  If [Sign[fc]==Sign[fa],a=c,b=c];
  fa=f[a];
  fb=f[b];
  c=a+0.5(b-a);
  fc=f[c];
  n++]
Subject: Re: while loop in Mathematica
From: xpertise-ga on 28 Sep 2004 13:10 PDT
 
if you explain me what you really wanna do though I can make the code
twice as short at least
Subject: Re: while loop in Mathematica
From: eyal32ny-ga on 28 Sep 2004 15:58 PDT
 
the 4$ is yours :) though I think you need to post it as an answer.
what I am trying to do is to find the root of the function between the
points 2,3 using the bisection method.
I have managed to run it without any problems with the following code:
f[x_] :=(x*E^(-x))-0.16064
a=2;
b=3
c=a+0.5*(b-a);
n=0;
While [n<10^2,
  If[Sign[f[a]] == Sign[f[c]],
  a = c, b = c;
    f[b] = f[c];]
     c= a+ 0.5 * (b-a);
      n++;]
Print[a]
Print[n]

now. when I take out the line : f[b] = f[c]; 
it complains again that its protected.
Why this line is so important?
more than that when I put the line back I still get the error and the
only way for me to fix it is to copy the whole if statement from the
previous version (the one I didnt remove f[b]=f[c] from ) and
miraclously it works.

HELP ME :)
Subject: Re: while loop in Mathematica
From: xpertise-ga on 28 Sep 2004 16:31 PDT
 
f[b] = f[c]; 

doesn't make sense to me, it could mean your asking to assign 3 to 2 (2=3).
If you want to solve equation=0 then just use Solve[] it's 100 times
more efficient than some crappy procedural programming.
Subject: Re: while loop in Mathematica
From: xpertise-ga on 28 Sep 2004 16:37 PDT
 
Find the complete Mathematica listing to your prob on:
http://math.fullerton.edu/mathews/n2003/Web/BisectionMod/BisectionMod.html

:)

Important Disclaimer: Answers and comments provided on Google Answers are general information, and are not intended to substitute for informed professional medical, psychiatric, psychological, tax, legal, investment, accounting, or other professional advice. Google does not endorse, and expressly disclaims liability for any product, manufacturer, distributor, service or service provider mentioned or any opinion expressed in answers or comments. Please read carefully the Google Answers Terms of Service.

If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you.
Search Google Answers for
Google Answers  


Google Home - Answers FAQ - Terms of Service - Privacy Policy