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

  • Thread starter Thread starter roam
  • Start date Start date
  • Tags Tags
    Matlab Method
AI Thread Summary
The discussion centers on a MATLAB coding issue related to implementing the Gauss-Seidel method for solving linear equations. The user encounters an error stating that function definitions are not permitted in the current context, which is due to defining a function within a script file. The solution involves creating a separate file named GaussSeidel.m for the function definition and using a script file to call this function. Additionally, there is a suggestion that the current implementation may resemble the Jacobi method rather than the Gauss-Seidel method, indicating a potential misunderstanding of the algorithm. The user also inquires about determining the number of iterations (N) needed for convergence, which remains unanswered in the discussion. Overall, the conversation highlights the importance of proper file structure in MATLAB and clarifies the distinction between the two numerical methods.
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:
Physics news 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.
 

Similar threads

Replies
4
Views
1K
Replies
2
Views
3K
Replies
8
Views
2K
Replies
5
Views
2K
Replies
10
Views
3K
Back
Top