singlepost

решение СЛАУ – грубое приближение << На главную или назад  

Добрый день!
Вопрос к людям, разбирающимся в численных методах.
Подскажите способ грубого приближения в методах решения СЛАУ. Вметодах уточнения вроде разобрался, но грубое уточнение тоже хочу написать прогграмно. На лекциях спал = конспекта нет ;) А гугл, почему-то не помог :( Подскажите, что почитать или хотябы что погуглить

32 ответов в теме “решение СЛАУ – грубое приближение”

  1. 20
    Нгамдкхе Кверос ответил:

    и какое отношение эта формула имеет к той которую ты описывал в #15 ?
    почитай вывод формулы, там не сложно.

  2. 19
    Михаил Демидов ответил:

    извиняюсь за поднятый гроб,но
    #16 нет такой формулы?может я конечно бесконечно глуп, но вот она
    N=[ln((1-||c||)/||b||)*Eps)/ln(||c||)]+1
    N-количество шагов
    ||c||-норма C и так далее, eps-необходимая точность

  3. 18
    ответил:

    Может поможет))Метод простых итераций,зейделя и релаксации

    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.

  4. 17
    Нгамдкхе Кверос ответил:

    как-раз наоборот, в линейной системе никакого закругления в близи решения не предвидится ибо она линейная, потому неусточивая система в далеке, в близи к решению нисколько не улучшится, везение зависит не от близости начального положения а от сферических координат.

  5. 16
    Леонид Максимов ответил:

    чтобы дело было в везении, нам нужна серьезная неустойчивость решения, в линейных системах недостижимая. здесь главное попасть в ту часть поверхности, по которой можно, как по горке, скатиться к решению.

  6. 15
    Нгамдкхе Кверос ответил:

    #13
    нет, если для x0 будет расходиться то и для a*x0 будет расходиться, чтобы сходился там нужно именно везение в соотношении между разными координатами икса а не просто "близкое".

    #15 такой формулы как вы сказали нет, и быть не может так как мы всегда можем взять некоторое начальное приближённое решение, посчитать число необходимых итераций практически, и птом для приближённого решения от которого первая итерация даёт то для которого решали потребуется плюс одна итерация и т.д.
    есть формула но другая.

  7. 14
    Михаил Демидов ответил:

    амамам…если не ощибаюсь, но есть формула для вычисления количества шагов с помощью норм матрицы(то есть матрицы C и B),…за вопросами в личку…ну здесь тоже надо написать))

  8. 13
    Денис Гублин ответил:

    >> грубое приближение достаточно близко к решению

    Достаточно близко – это какая погрешность? 2? 0,001?
    >> чаще всего это бессмысленно, и такой вариант не стоит рассматривать

  9. 12
    Леонид Максимов ответил:

    >> зейдель и простая итерация или сходятся или как повезёт
    >> иногда всё-равно может сойтись
    >> при известной доле везения есть шанс найти решение

    если задать грубое приближение достаточно близко к решению, то скорее всего сойдется к решению ;)

    подбор достаточно близкого приближения я уже привел; если не ошибаюсь, то, как правило, можно привести матрицу к квазидиагональному виду, приблизив который диагональным, получим начальное приближение.

  10. 11
    Денис Гублин ответил:

    Александр ёZик Коротких
    Нгамдкхе Кверос все правильно сказал, только немножко расплывчато.
    Методы бывают точные (аналитические) и приближенные (чаще всего численные). Так вот, если аналитически решение (если оно существует в принципе) можно получить всегда, то в случае численных методов нужно, чтобы выполнялись условия, необходимые и достаточные для сходимости метода. Для приближенного решения СЛАУ необходимое и достаточное условие – норма матрицы меньше единицы, при этом начальное приближение не играет вообще никакой роли, разве что увеличится количество итераций. Необходимые условия сходимости шире, и при известной доле везения есть шанс найти решение, но это бессмысленно, и такой вариант не стоит рассматривать.

    P.S. Отвечаю без подготовки, коллеги, если что не так, поправьте.

  11. 10
    Нгамдкхе Кверос ответил:

    #10 и прочие гауссовики которые про погрешность никогда не слышали, там очень быстро нарастает ошибка и для матриц уже порядка 20 не подходит, не говоря уже про решение какого-нибудь дифура при разбиении области 10к * 10к что (замечу) не так много.

    #1 зейдель и простая итерация или сходятся или как повезёт, есть критерий сходимости, если норма матрицы меньше единицы, если нет то иногда всё-равно может сойтись, но это глюк и применять метод нельзя в принципе. так как при корректной матрице сходится можно взять любое начальное приближение. хоть единицы хоть нули, хоть миллионы.

  12. 9
    Дмитрий Ерохин ответил:

    //radiomaster.ru/cad/mc12/glava_08/index14.php

  13. 8
    Александр Коротких ответил:

    Утчняю – решаю методом простых итераций, функцию для уточнения корней я написал, теперь пытаюсь понять, как задать грубое приближение, которое уточнять :)
    #5 – так просто? Единицы – и сработает, просто больше итераций будет?

  14. 7
    Николай Каршаков ответил:

    гаусса,итераций.проще некуда!!!

  15. 6
    Женя Гаврилов ответил:

    Могу скинуть хороший метод по численным. Профессор кафедры писал!
    Доступно написано и с примерами!
    Если надо – в личку стукни.

  16. 5
    Леонид Максимов ответил:

    грубое приближение – упорядочить переменные так, чтобы на диагонали матрицы стояили как можно бОльшие (по модулю) элементы, остальными элементами пренебречь. решить эн уравнений с одной переменной.

  17. 4
    Денис Гублин ответил:

    взять свободный член, либо дефолтно забить единицами

  18. 3
    Андрей Юткин ответил:

    Метод Гаусса?

  19. 2
    Любомир Семків ответил:

    для Гаусса не нужно началнього приближения, оно нужно в итеративных методах: Зейделя, простой итерации.

  20. 1
    Любомир Семків ответил:

    Емм… поймал себя на мысли, что не помню почти ничего. :(
    сдавал всего два семестра назад.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.