Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2013, 20:52   #1
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию Matlab. Решение СЛАУ итерационными методами.

Задача.
1. С помощью программы сгенерировать матрицу A и вектор правых частей b для СЛАУ вида Ax=b.
2. Проверить условия сходимости итерационных методов для матрицы A. При необходимости преобразовать матрицу A к виду, позволяющему вычислить решения.
3. Вычислить решения с помощью метода простой итерации и Гаусса-Зейделя, количество итерации n=20. Построить графики зависимости xi от n. Вычислить вектор невязки решения и ее норму.
4. Получить точное решение СЛАУ, вычислить вектор погрешности решений по методам простой итерации и Гаусса-Зейделя и их нормы.
5. Оценить относительную погрешность решения СЛАУ, если ∆A определяется десятипроцентным увеличением диагональных элементов, а ∆b таким же уменьшением всех элементов.


Решение

Код:
n1=input('Введите номер группы: ');
n2=input('Введите ваш номер в списке группы: ');
n=n1+n2;
rand('seed',n);
A=rand(7);
b=10*rand(7,1);
Au=triu(A);
Al=tril(A);
Ad=diag(diag(A));
su=sum(sum(abs(Au)));
sl=sum(sum(abs(Al)));
Su=sum(abs(Au));
Sl=sum(abs(Al));
sigma=5;
O=ones(7);
Ou=triu(O);
S6=diag(sigma*(Su./Sl));
At=sigma*((Al+Ou)./(Au'+Ou));
neo=rem(n2,2);
mode=rem(n2,3);
if (mode==0) Al=(sigma*su/sl)*Al; end
if (mode==1) Al=S6*Al; end
if (mode==2) Al=At.*Al; end
A=Al+Ad+Au;
ma=max(max(abs(A)));
if (ma>1000) A=0.08*A; end
A=0.5*A+2.75*diag(diag(A)), b
%простая итерация
x=b;
v=x;
m=20;
d=diag(A);
S=diag(d);
Si=inv(A);
T=S-A;
for i=1:m
    y=(T*x+b)/d;
    B=T*Si;
    mis=(norm(B))*m*(norm(x-y));   <--------------------------  Тут ошибка
    x=y;
    v=[vx];
end
%normaB=norm(B)
x
mis
figure(1)
plot(v);
grid
pause
%Зейдель
x=b;
v=x;
S=tril(A);
Si=inv(A);
T=S-A;
for i=1:m
    y1=Si*(T*x+b);
    B=T*Si;
    Bu=triu(B);
    Bl=tril(B);
    mis=(norm(y1-x))*(norm(Bu)/(1-(norm(Bl))));
    x=y1;
    v=[vx];
end
normaB=norm(B)
x
mis
figure(2)
plot(v);
grid
Косяк
Строка 39, а именно:

??? Error using ==> minus
Matrix dimensions must agree.

Error in ==> Untitled at 39
mis=(norm(B))*m*(norm(x-y));

Просьба помочь с исправлением ошибки. Заранее спасибо.
MyQwErTy вне форума Ответить с цитированием
Старый 24.03.2013, 23:25   #2
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

____________up
MyQwErTy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение полинома 2го порядка 3мя методами в Delphi Strongstone Помощь студентам 2 01.12.2012 00:07
Решение СНЛ указанными методами (Pascal) manbo Помощь студентам 0 29.11.2011 20:06
Решение систем линейных уравнений численными методами. Spyke Паскаль, Turbo Pascal, PascalABC.NET 7 02.10.2011 17:46
Решение СЛАУ Alex2012 Общие вопросы .NET 2 10.02.2010 02:07