What is the correct implementation of the Gauss-Seidel method in Matlab?

  • Context: MATLAB 
  • Thread starter Thread starter roam
  • Start date Start date
  • Tags Tags
    Matlab Method
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 · 42K views
roam
Messages
1,265
Reaction score
12
I need to solve the following problem using Matlab

http://img641.imageshack.us/img641/6448/matlabe.jpg

This is my code so far:

Code:
clear all
clc
clf
function x=GaussSeidel(A,b,y,N)
n = length(y);
for k = 1:N
    for i=1:n
        s=b(i);
        for j =1:i-1
            s=s-A(i,j)*y(j);
        end
        for j = i+1:n
            s=s-A(i,j)*y(j);
        end
        x(i)=s/A(i,i);
        x(i)=x(k);
    end
    y = x'
end

But I keep getting the following error:

Code:
Error: File: Untitled.m Line: 4 Column: 1
Function definitions are not permitted in this context.

Why am I getting this error? What do I need to do?

And my inputs would be:

Code:
A=[-5 0 2 0 -1 ;
    0 9 0 3 0 ; 
    2 0 5 0 2 ;
    0 -2 0 4 0 ;
    -1 0 7 0 7]
b = [8;4;-8;-4;0]
x0=[8;4;-8;-4;0]

For N, how do I know many iterates N are necessary for this problem?

Any help with the code is greatly appreciated.
 
Last edited by a moderator:
on Phys.org
You're defining a function in a script file. In MATLAB, functions are defined in a separate file with the same name as the function.

Create a file GaussSeidel.m with the following:
Code:
[b]function[/b][/color] [/color]x=GaussSeidel[/color](A,b,y,N)
[/color]n = length[/color](y);
[b]for[/b][/color] k = 1:N
    [b]for[/b][/color] i[/color]=1:n
        s=b(i[/color]);
        [b]for[/b][/color] j[/color] =1:i[/color]-[/color]1
            s=s-[/color]A(i[/color],j[/color])*[/color]y(j[/color]);
        [b]end[/b][/color]
        [b]for[/b][/color] j[/color] = i[/color]+[/color]1:n
            s=s-[/color]A(i[/color],j[/color])*[/color]y(j[/color]);
        [b]end[/b][/color]
        x(i[/color])=s/[/color]A(i[/color],i[/color]);
        x(i[/color])=x(k);
    [b]end[/b][/color]
    y = x'[/color]
[b]end[/b][/color]

and a script file that calls the function.
 
I'm not familiar with matlab, but I believe this is an incorrect implementation of the Gauss-Seidel method. This looks like the Jacobi method to me.

I'm going to fool around with this and get back.