Добрый день!
Вопрос к людям, разбирающимся в численных методах.
Подскажите способ грубого приближения в методах решения СЛАУ. Вметодах уточнения вроде разобрался, но грубое уточнение тоже хочу написать прогграмно. На лекциях спал = конспекта нет А гугл, почему-то не помог Подскажите, что почитать или хотябы что погуглить
11 ноября 2009 в 13:01
и какое отношение эта формула имеет к той которую ты описывал в #15 ?
почитай вывод формулы, там не сложно.
10 ноября 2009 в 17:05
извиняюсь за поднятый гроб,но
#16 нет такой формулы?может я конечно бесконечно глуп, но вот она
N=[ln((1-||c||)/||b||)*Eps)/ln(||c||)]+1
N-количество шагов
||c||-норма C и так далее, eps-необходимая точность
9 ноября 2009 в 12:04
Может поможет))Метод простых итераций,зейделя и релаксации
uses crt;
var i,j,check:integer;
x:array[1..3,1..3] of real;
k,r,ans,pri,prz:array[1..3] of real;
eps,sumans:real;
a,b,c:real;
countx,county,countz: real;
index:integer;
begin
clrscr;
x[1,1]:=3.55/5;x[1,2]:=-2/5;x[1,3]:=-0.4/5;
x[2,1]:=-532/520; x[2,2]:=-0.1/0.44;x[2,3]:=-0.108/0.44;
x[3,1]:=56.1/52.8; x[3,2]:=-10/52.8;x[3,3]:=-4/52.8;
write('Vvedite tochnost: '); readln(eps);
writeln('Vvedite nachalnoe priblischenije:');
write('x: '); readln(pri[1]); prz[1]:=pri[1];
write('y: '); readln(pri[2]); prz[2]:=pri[2];
write('z: '); readln(pri[3]); prz[3]:=pri[3];
writeln;
j:=0;
repeat
j:=j+1; check:=0; sumans:=0;
ans[1]:=x[1,1]+x[1,2]*pri[2]+x[1,3]*pri[3];
ans[2]:=x[2,1]+x[2,2]*pri[1]+x[2,3]*pri[3];
ans[3]:=x[3,1]+x[3,2]*pri[1]+x[3,3]*pri[2];
for i:=1 to 3 do begin
sumans:=sumans+abs(ans[i]-pri[i]);
pri[i]:=ans[i];
end;
if (sumans>eps) then check:=1;
until check=0;
writeln ('Metod iteracy:');
writeln('x = ',ans[1]:12:10);
writeln('y = ',ans[2]:12:10);
writeln('z = ',ans[3]:12:10);
writeln ('Kol-vo iteracy: ',j);
writeln;
j:=0;
repeat
j:=j+1; check:=0; sumans:=0;
ans[1]:=x[1,1]+x[1,2]*prz[2]+x[1,3]*prz[3];
ans[2]:=x[2,1]+x[2,2]*ans[1]+x[2,3]*prz[3];
ans[3]:=x[3,1]+x[3,2]*ans[1]+x[3,3]*ans[2];
for i:=1 to 3 do begin
sumans:=sumans+abs(ans[i]-prz[i]);
prz[i]:=ans[i];
end;
if (sumans>eps) then check:=1;
until check=0;
writeln ('Metod Zeydela:');
writeln('x = ',ans[1]:12:10);
writeln('y = ',ans[2]:12:10);
writeln('z = ',ans[3]:12:10);
writeln ('Kol-vo iteracy:',j);
writeln;
j:=0;
countx:=0; county:=0; countz:=0;
pri[1]:=0; pri[2]:=0; pri[3]:=0;
r[1]:=x[1,1]; r[2]:=x[2,1]; r[3]:=x[3,1];
k[1]:=1; k[2]:=1; k[3]:=1;
repeat
j:=j+1;
r[1]:=k[1]*(r[1]-pri[1]+x[1,2]*pri[2]+x[1,3]*pri[3]);
r[2]:=k[2]*(r[2]+x[2,2]*pri[1]-pri[2]+x[2,3]*pri[3]);
r[3]:=k[3]*(r[3]+x[3,2]*pri[1]+x[3,3]*pri[2]-pri[3]);
for i:=1 to 3 do
k[i]:=1;
for i:=1 to 3 do
pri[i]:=0;
index:=1;
for i:=2 to 3 do
begin
if (abs(r[i])>abs(r[index])) then
index:=i;
end;
pri[index]:=r[index];
if (index=1) then
countx:=countx+pri[1];
if (index=2) then
county:=county+pri[2];
if (index=3) then
countz:=countz+pri[3];
k[index]:=0;
until abs(r[index])<eps;
writeln ('Metod ralaksacii: ');
writeln ('x = ',countx:12:10);
writeln ('y = ',county:12:10);
writeln ('z = ',countz:12:10);
writeln ('Kol-vo iteraciy: ',j);
writeln;
readkey;
end.
8 ноября 2009 в 21:04
как-раз наоборот, в линейной системе никакого закругления в близи решения не предвидится ибо она линейная, потому неусточивая система в далеке, в близи к решению нисколько не улучшится, везение зависит не от близости начального положения а от сферических координат.
8 ноября 2009 в 14:02
чтобы дело было в везении, нам нужна серьезная неустойчивость решения, в линейных системах недостижимая. здесь главное попасть в ту часть поверхности, по которой можно, как по горке, скатиться к решению.
8 ноября 2009 в 14:01
#13
нет, если для x0 будет расходиться то и для a*x0 будет расходиться, чтобы сходился там нужно именно везение в соотношении между разными координатами икса а не просто "близкое".
#15 такой формулы как вы сказали нет, и быть не может так как мы всегда можем взять некоторое начальное приближённое решение, посчитать число необходимых итераций практически, и птом для приближённого решения от которого первая итерация даёт то для которого решали потребуется плюс одна итерация и т.д.
есть формула но другая.
7 ноября 2009 в 23:01
амамам…если не ощибаюсь, но есть формула для вычисления количества шагов с помощью норм матрицы(то есть матрицы C и B),…за вопросами в личку…ну здесь тоже надо написать))
7 ноября 2009 в 21:03
>> грубое приближение достаточно близко к решению
Достаточно близко – это какая погрешность? 2? 0,001?
>> чаще всего это бессмысленно, и такой вариант не стоит рассматривать
7 ноября 2009 в 0:02
>> зейдель и простая итерация или сходятся или как повезёт
>> иногда всё-равно может сойтись
>> при известной доле везения есть шанс найти решение
если задать грубое приближение достаточно близко к решению, то скорее всего сойдется к решению
подбор достаточно близкого приближения я уже привел; если не ошибаюсь, то, как правило, можно привести матрицу к квазидиагональному виду, приблизив который диагональным, получим начальное приближение.
6 ноября 2009 в 18:05
Александр ёZик Коротких
Нгамдкхе Кверос все правильно сказал, только немножко расплывчато.
Методы бывают точные (аналитические) и приближенные (чаще всего численные). Так вот, если аналитически решение (если оно существует в принципе) можно получить всегда, то в случае численных методов нужно, чтобы выполнялись условия, необходимые и достаточные для сходимости метода. Для приближенного решения СЛАУ необходимое и достаточное условие – норма матрицы меньше единицы, при этом начальное приближение не играет вообще никакой роли, разве что увеличится количество итераций. Необходимые условия сходимости шире, и при известной доле везения есть шанс найти решение, но это бессмысленно, и такой вариант не стоит рассматривать.
P.S. Отвечаю без подготовки, коллеги, если что не так, поправьте.
6 ноября 2009 в 10:01
#10 и прочие гауссовики которые про погрешность никогда не слышали, там очень быстро нарастает ошибка и для матриц уже порядка 20 не подходит, не говоря уже про решение какого-нибудь дифура при разбиении области 10к * 10к что (замечу) не так много.
#1 зейдель и простая итерация или сходятся или как повезёт, есть критерий сходимости, если норма матрицы меньше единицы, если нет то иногда всё-равно может сойтись, но это глюк и применять метод нельзя в принципе. так как при корректной матрице сходится можно взять любое начальное приближение. хоть единицы хоть нули, хоть миллионы.
6 ноября 2009 в 8:03
//radiomaster.ru/cad/mc12/glava_08/index14.php
6 ноября 2009 в 1:04
Утчняю – решаю методом простых итераций, функцию для уточнения корней я написал, теперь пытаюсь понять, как задать грубое приближение, которое уточнять
#5 – так просто? Единицы – и сработает, просто больше итераций будет?
6 ноября 2009 в 0:03
гаусса,итераций.проще некуда!!!
6 ноября 2009 в 0:01
Могу скинуть хороший метод по численным. Профессор кафедры писал!
Доступно написано и с примерами!
Если надо – в личку стукни.
5 ноября 2009 в 22:04
грубое приближение – упорядочить переменные так, чтобы на диагонали матрицы стояили как можно бОльшие (по модулю) элементы, остальными элементами пренебречь. решить эн уравнений с одной переменной.
5 ноября 2009 в 20:01
взять свободный член, либо дефолтно забить единицами
5 ноября 2009 в 19:04
Метод Гаусса?
5 ноября 2009 в 19:04
для Гаусса не нужно началнього приближения, оно нужно в итеративных методах: Зейделя, простой итерации.
5 ноября 2009 в 18:02
Емм… поймал себя на мысли, что не помню почти ничего.
сдавал всего два семестра назад.