Maple Loop Troubles: Fixing Newton's Method Procedure

  • Thread starter Thread starter cdotter
  • Start date Start date
  • Tags Tags
    Loop Maple
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 3K views
cdotter
Messages
305
Reaction score
0

Homework Statement


I'm trying to make a Newton's method procedure in Maple, but I can't figure out what's wrong.

Homework Equations



Code:
Newton := proc (func, iterations, guess)
f := unapply(func, x);
fprimej := diff(f(x), x);
fprime := unapply(fprimej, x);
for i from 1 to iterations do:
     value := evalf(guess-f(guess)/fprime(guess));
     printf("Iteration %d: %a\n", i, value);
     guess := value;
end do;
end proc;

The Attempt at a Solution



Something is going wrong when I assign "guess" to "value" because it works fine if I hard code a "guess" value in. What's the correct (and error free) way of assigning "guess" to "value?" Thank you.
 
Physics news on Phys.org
I've got very little experience in coding Maple, so this is probably a bit of a hack. Apparently you can't properly define new variables in the function input, i.e. the "guess" you give the function seems not to be a proper variable. I changed it to guesso and added guess := guesso; as the first line. It worked.

Code:
Newton := proc (func, iterations, guesso)
guess := guesso;
f := unapply(func, x);
fprimej := diff(f(x), x);
fprime := unapply(fprimej, x);
for i from 1 to iterations do:
     value := evalf(guess-f(guess)/fprime(guess));
     printf("Iteration %d: %a\n", i, value);
     guess := value;
end do;
end proc;
 
Päällikkö said:
I've got very little experience in coding Maple, so this is probably a bit of a hack. Apparently you can't properly define new variables in the function input, i.e. the "guess" you give the function seems not to be a proper variable. I changed it to guesso and added guess := guesso; as the first line. It worked.

Code:
Newton := proc (func, iterations, guesso)
guess := guesso;
f := unapply(func, x);
fprimej := diff(f(x), x);
fprime := unapply(fprimej, x);
for i from 1 to iterations do:
     value := evalf(guess-f(guess)/fprime(guess));
     printf("Iteration %d: %a\n", i, value);
     guess := value;
end do;
end proc;

Thank you, that works perfectly.