kgotlele...@galmail.co.za wrote:
Hi,
I am trying to write a program in python that solves a system of nonlinear
equations using newton's method. I don't know what I am doing wrong.
> Please help

In general, it helps for both you and us if you show what happens when you run the program, and how that is not according to your expectations.

In this case, you just say "I don't know what I am doing wrong".
We can look at the code and see what will happen when one executes it, but we don't know how that is wrong for you.

from scipy import*

Many readers here (including self) don't know much about numerical stuff, so if that's your problem, maybe posting at a scipy related list may be more useful.

x = array([0.0,0.0,0.0])
n=len(x)
tol= 0.00001
N=30

k=1
while k <= N:
    def f(x):
        f= zeros((len(x)),float)
        f[0][k]= x[0][k]**2 + x[1][k]-37
        f[1][k]=x[0][k]- x[1][k]**2- 5
        f[2][k]= x[0][k] + x[1][k]+ x[2][k]- 3
        return f[k]
        def J(x):
            J= zeros((n,n),float)
            for i in range(n):
                ei=zeros(n,float)
                ei[i]=1.0
                J[:i]=(f(x[k]+tol*ei)-f(x[k]))/tol
                return J

        y[k] = -(J.I)*f[k]
        x[k+1]=x[k]+y[k]

You have a while loop, and inside the loop you define a function called 'f'.
Can you explain what you think should happen here?


if sqrt(dot(f0,f0)/len(x)) < tol: print x

f0 is never defined above, so you will get an 'undefined identifier f0' error here.
What is f0 supposed to be?
(if you intended to call 'f' here, type 'f(0)' instead of 'f0')
(Calling f probably makes sense only if the 'if' statement is inside the 'while' loop. See also below.)

else:
    k=k+1

The 'if' statement is after the 'while' loop. Incrementing k here does not make much sense here.
Maybe you meant the 'if' inside the 'while'?
If so, indent the statement accordingly (same amount as the "def f(x):" line).


Albert

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to