Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Метод Якоби для решения СЛУР

Автор: Visnyshka 17.02.2010 21:45

Доброго времени суток!
Помогите пожалуйста решить задачу на Pascal. Мне дана система уравнений, необходимо написать программу решающую её методом Якоби. Не знаю с чего начать, подскажите пожалуйста! Прикрепляю файл с описанием метода. Заранее благодарю!

DOC-файл удален

Автор: volvo 18.02.2010 6:14

Цитата
Не знаю с чего начать
С прочтения и осознания алгоритма. Ты его читала? Что именно непонятно? Я уж не говорю о том, что DOC-файлы выкладывать запрещено: http://forum.pascal.net.ru/rules.html, поэтому файл удален.

Взамен - вот ссылка на описание метода в Вики: http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8. Зайди туда обязательно...

Автор: Visnyshka 18.02.2010 22:42

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

Автор: Lapp 19.02.2010 4:10

Цитата(Visnyshka @ 18.02.2010 18:42) *
О ужас(( я как раз и не понимаю алгоритм, вернее понимаю только частями(( спасибо за ссылку, но я уже много раз читала про этот метод...
Начни с того, что опиши саму матрицу и вектор решений. Это нужно для любого метода. Как ты собираешься задавать матрицу? Читать из файла? Какая ее максимальная размерность? Выведи хотя бы уравнения на экран. Сделай хотя бы это. Если не знаешь как - спроси нас )).
А дальше можно будет приступать и к методу..

Автор: Visnyshka 25.02.2010 23:13

Хм...проще всего наверное будет сразу в программе задавать матрицу. У меня система из пяти уравнений:
10х1+х2+2х3-3х4+х5=10
х1+9х2+3х3+2х4+х5=40
х1-5х2+10х3-2х4-х5=9
4х1+2х2+5х3+15х4+х5=87
2х1+2х2-х3+х4-8х5=-25
если я все правильно понимаю матрица состоит из коэффициентов при х, а вектор B это то чему равны уравнения) Так?))

Автор: Lapp 26.02.2010 8:46

Цитата(Visnyshka @ 25.02.2010 19:13) *
Хм...проще всего наверное будет сразу в программе задавать матрицу. У меня система из пяти уравнений:
...
если я все правильно понимаю матрица состоит из коэффициентов при х, а вектор B это то чему равны уравнения) Так?))
Ну, пусть он будет B - хоть горшком назови smile.gif. Главное состоит в том, что для реализации МЯ тебе потребуются операции над веторами и матрицами. И, значит, тебе нужно их сначала воплотить - либо сделать самой с нашей помощью, либо где-то позаимствовать юнит. И реализация самих матриц и векторов будет определяться этим.
Так что выбирай. Сделать свой модуль для работы с матрицами несложно (особенно, если заглянуть в наш FAQ).

Автор: Visnyshka 1.03.2010 23:28

А разве в паскале не предусмотрен юнит который работает с матрицами? Вот я задаю матрицу:

Код

program metodyakobi;
uses crt;

var A: array[1..5,1..5]of integer;
    i,j: integer;

begin
clrscr;
A[1,1]:=10;
A[1,2]:=1;
A[1,3]:=2;
A[1,4]:=-3;
A[1,5]:=1;

A[2,1]:=1;
A[2,2]:=9;
A[2,3]:=3;
A[2,4]:=2;
A[2,5]:=1;

A[3,1]:=1;
A[3,2]:=-5;
A[3,3]:=10;
A[3,4]:=-2;
A[3,5]:=-1;

A[4,1]:=4;
A[4,2]:=2;
A[4,3]:=5;
A[4,4]:=15;
A[4,5]:=1;

A[5,1]:=2;
A[5,2]:=2;
A[5,3]:=-1;
A[5,4]:=1;
A[5,5]:=-8;

writeln('пробую вывести один эл-т ',A[2,5]); end;
readkey;
end.

Автор: Ozzя 2.03.2010 18:49

Цитата
А разве в паскале не предусмотрен юнит который работает с матрицами?

Нет.

Автор: Lapp 2.03.2010 19:06

И не лень тебе было это все писать? smile.gif
Не проще ли так:

const
m=5;
var
A: array[1..m,1..m]of integer;
i,j: integer;
f: text;

begin
Assign(f,'in.txt');
ReSet(f);
for i:=1 to m do begin
for j:=1 to m do Read(A[i,j];
ReadLn(f)
end;
Close(f);
writeln('пробую вывести один эл-т ',A[2,5]);
end.

И сделать файл in.txt (например, в блокноте)
10 1 2 -3 1
1 9 3 2 1
1 -5 10 -2 -1
4 2 5 15 1
2 2 -1 1 -8


Юнит для алгебры нужно написать. В этом вся прелесть! smile.gif

Автор: Visnyshka 2.03.2010 22:06

Нет, не легче, как препод требует так и пишу)) а если будет слишком заумно все равно не поверит и придерёться))

Автор: volvo 2.03.2010 22:33

Visnyshka

program metodyakobi;
uses crt;

const
A: array[1 .. 5, 1 .. 5] of integer =
(
(10, 1, 2, -3, 1),
( 1, 9, 3, 2, 1),
( 1, -5, 10, -2, -1),
( 4, 2, 5, 15, 1),
( 2, 2, -1, 1, -8)
);

var i,j: integer;

begin
clrscr;
writeln('пробую вывести один эл-т ', A[2,5]);
readkey;
end.
У кого "заумнее", как ты думаешь? Тот код, что ты привела, или этот - практически математическое описание матрицы?

Автор: Visnyshka 3.03.2010 21:02

Ой здорово))) спасибо, просто я даже не подумала что можно как константу задать, а элементы так же как и в обычном массиве вызываются?

Автор: Ozzя 4.03.2010 18:56

Цитата
а элементы так же как и в обычном массиве вызываются?


Для кого писано? Постом выше? blink.gif
 writeln('пробую вывести один эл-т ', A[2,5]);

Автор: Visnyshka 5.03.2010 20:20

Что вы тут все на меня так кидаетесь?!((( Да, я не умею на pascal программировать, ну так поэтому и пишу сюда, а вы прям сразу такие не довольные((( и спрашивай после этого...((

Автор: Lapp 6.03.2010 8:54

Цитата(Visnyshka @ 5.03.2010 16:20) *
Что вы тут все на меня так кидаетесь?!((( Да, я не умею на pascal программировать, ну так поэтому и пишу сюда, а вы прям сразу такие не довольные((( и спрашивай после этого...((
Все правильно, Visnyshka, продолжай спрашивать. Я извиняюсь от имени всего Форума. Надеюсь, дальнейшие ответы будут корректнее.

Да, работа с массивом, заданным константой, абсолютно ничем не отличается от работы с массивом, не заданным константой.

Можно, один совет тебе дам? Смотри, допустим - возник у тебя вопрос: "элементы так же как и в обычном массиве вызываются?" У тебя есть компилятор, перед тобой редактор - этого достаточно, чтоб быстро найти ответ на этот вопрос. Набираешь простенькую программу, задаешь массив константой и вызываешь элемент, как обычно, и выводишь его на печать - а потом смотришь на результат. Вывод получился верный? Значит, твоя гипотеза о том, что элементы вызываются, как в обычном массиве - верна. И ты это сама выяснила! smile.gif Если гипотеза не подтверждается и других гипотез для проверки нет - смело спрашивай тут.

Понимаешь? Активнее экспериментируй, у тебя есть для этого все средства. Если же эксперимент не дает ответа или вопрос сложный (не знаешь, как что-то написать) - тогда спрашивай. Экспериментирование СИЛЬНО ускорит твое обучение. Не бойся его. А мы поможем.

Тебе надо бы и учебник почитать.. Как минимум до раздела "процедуры и функции". Давай, тут ничего сложного нет. Начни писать процедуру для умножения матрицы на вектор. Показывай, что выходит (даже если ПОЧТИ ничего не выходит). Поможем.

Автор: Visnyshka 9.03.2010 22:06

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