2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 [Matlab] Решение СЛАУ методом Зейделя
Сообщение28.10.2014, 07:52 


28/10/14
3
Доброго времени суток. Очень нужна помощь с лабой по ЧМ в Matlab. Буду рад за любые подсказки...
Решить систему алгебраических уравнений $A\vec{x}=\vec{b}$ методом Зейделя c точностью $\xi=10^{-12}$. Матрицу A взять в виде $A=m^{(-1)} R-E$, где m - желаемый порядок системы, а R и E - матрица, составленная из равномерно распределенных на отрезке от −1 до 1 (включительно) случайных чисел, и единичная матрица соответственно. Правая часть $\vec{b}$ в линейном уравнении - единичный вектор. По результатам вычисления построить графики зависимости точности решения и невязки от номера итерации. Для анализа использовать $\infty$ норму.

Написал такую программу, но есть подозрение что графики не те.
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
clc
clear all
m=8;
E = eye(m) %единичная матрица м*м
n=2;
R =randi([-1,1]*10^n,m)/10^n %случайные значения от -1 до 1 в матрице
disp('Original Matrix')
A = m^-1*R-E % согласно условию

v=randn(1,m,'double');%произвольный вектор
disp('Normal Array B')
b=v/norm(v) %нормированный вектор по условию

eps = 10^-12; %значение точности
disp('Mistake threshold: ')
sprintf('%14.12f',eps)
[x,ct,Rn,Eps]=zeid(A,b,eps); %метод Зейделя
disp ('Result')
x
disp('Iterations')
ct
disp ('Residual:')
Rn
disp ('Mistake:')
Eps

disp('Validating the result...')
r=A*x; %проверяем правильность полученного решения. В положительном случае результат A*x будет равен b
Comparing=[r,b'] %оператор ' транспонирует матрицу

figure('Name','AnalysisD')
hold on
plot(ct,Rn,'-.','Color',[.9 .1 .1],'LineWidth',2), grid on;
xlabel ('Итерация'), ylabel ('Невязка')
title ('Анализ')
figure('Name','AnalysisE')
plot(ct,Eps,'Color',[.1 .1 .9],'LineWidth',2), grid on;
xlabel ('Итерация'), ylabel ('Точность')
title ('Анализ')
pause
close all


код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
function [U,counts,Rn,E] = zeid(A,b,eps)

N = length(b) % длина вектора б
ct = 0;% Счетчик итераций
U = ones(1,N);% Вектор начальных значений
V = ones(1,N);% Вектор начальных значений
h = 1;% критерий остановки = norm(U(k+1)-U(k))/norm(U(k)
counts = [0 0]; %массив с номерами итераций (нужен для графиков)
Rn = [0 0]; %массив со значениями невязки по итерациям (нужен для графиков)
E = [0 0]; %массив со значениями точности по итерациям (нужен для графиков)
while h > eps %пока значение ошибки больше заданной точности
    for i = 1:N
        Prov = U;% Вектор для проверки h, хранит значение вектора на предыдущем шаге
        if i == 1
            V(1) = (b(1)-dot(A(1,2:N),U(1,2:N)))/A(1,1); %dot(а,b) - скалярное произведение векторов a и b
            U(1) = V(1);
        else
            if i == N
                V(N) = (b(N)-dot(A(N,1:N-1),U(1,1:N-1)))/A(N,N);
                U(N) = V(N);
            else
                V(i) = (b(i)-dot(A(i,1:i-1),U(1,1:i-1))-dot(A(i,i+1:N),U(1,i+1:N)))/A(i,i);
                U(i) = V(i);
            end
        end
    end
   
    ct=ct+1; %наращиваем счетчик итераций
   
    Rn(ct)=norm((A*U')'-b,inf); %рассчитываем невязку по l-норме
    counts(ct)=ct;%заносим в массив итераций текущую
    %if ct > 2
        h = norm(U-Prov)/norm(Prov);
    %else
        %h = 1;
    %end
    E(ct)=h;%заносим в массив точность
    if ct == 2000
    error('Zeid','Зацикливание метода')
    end
end

U = U';
end

 Профиль  
                  
 
 Re: [Matlab] Лабы по Числ. Методам в Matlab HELP
Сообщение28.10.2014, 16:45 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Тема перемещена в Карантин.

1. Приведите условия задач непосредственно в теме.

2. Приведите свои попытки решения каждой задачи и объясните, что конкретно вызывает затруднения.

После того как исправите сообщение, сообщите об этом в теме Сообщение в карантине исправлено.

 Профиль  
                  
 
 Posted automatically
Сообщение14.12.2014, 10:53 


20/03/14
12041
 i  Тема перемещена из форума «Карантин» в форум «Околонаучный софт»

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group