Помогите, ребята! Про линейные системы информацию нашла.
А вот про нелинейные - не нашла ни слова...
Задана система:
cos(x+0.5)-y=2
siny-2x=1
Требуется решить систему методом итераций и методом Зейделя. Метод Зейделя нашла только для линейных систем. Про итерации вообще молчу...
Помогите, плз!
у нас на форуме такого не припомню, а вот в интернете полно, например http://np.vspu.ac.ru/doc/s32.htm?num=32 или http://www.bestreferat.ru/referat-46738.html
и у нас нашел, тут : http://forum.pascal.net.ru/index.php?s=&showtopic=3902&view=findpost&p=34479
klem4, пересмотри ссылки - там везде ЛИНЕЙНЫЕ системы
...или разницы нет?
и у нас и в инете я искала, и все эти исходники мне попадались
но мне необходимы НЕЛИНЕЙНЫЕ
Попробую что-нибуь поискать.
зы
Вот мне просто интересно, извиняюсь за оффтоп конечено, ты такая уже не первая, приходят люди и говорят : Привет, мне надо решить уровнение методом Васи Пупкина, у вас на сайте его нету что мне делать ? А перед тем как выдать задание, вам в течении семестра не давали этот алгоритм ? Просто сказали вот тебе начальные условия, вот название метода ищи где хочешь ?
оффф: самое интересное, что так оно и есть
учусь на заочном, препод дает конспект / одна из тем в конспекте - решение систем линейных уравнений / про нелинейные ни слова / а задание - сам видишь
кроме того, конспектов зачастую оказывается ох как недостаточно, а времени преподам дается слишком мало - они и десятой части не вычитывают...
вот так
Вот посмотри, только решение на basic-e
http://gorkavchuk.chat.ru/QBASIC/ZEYDEL.BAS
ps сочувствую ...
не открывается: "Невозможно найти страницу"
Прикрепляю (это - то самое решение, которое нашел klem4):
Прикрепленные файлы
zeydel.rar ( 956 байт )
Кол-во скачиваний: 384
та да, ребятЫ...
если б я еще не в первый раз листинг на бейсике видела....
Сейчас попробую перевести на паскаль, заняться нечем .. но мне почему-то кажется что это не совсем то, что тебе нужно.
Хм вроде перевел с горем пополам, но что-то я не догоняю, программ практически при любых данных выдает один и тот-же результат, хотя возможно где-то я и ошибся :
Добавлено : гыгы надо просто ф-ю поменять ;)
uses crt;
const
n = 2;
var
f,x,w : array[1..n] of double;
eps,d,e,g : double;
i,k,m,fin,mis : integer;
procedure snur;
begin
f[1] := sqrt(x[1]) - sqrt(x[2] -1) - x[1] + 8;
f[2] := -sqrt(x[1]) - sqrt(9 - x[2]) - x[2] + 10;
end;
begin
clrscr;
write('Введите предельную погрешность : '); readln(eps);
writeln('Введите начальное приближение');
clrscr;
for i := 1 to n do begin
write('x[',i,']='); readln(x[i]);
end;
k := 0; d := 0.5; fin := 1; mis := 1;
repeat
inc(k);
d := -d;
gotoxy(4,60);
writeln(k,' - e приближение');
e := 0;
for i := 1 to n do begin
snur;
x[i] := x[i] + f[i];
end;
for i := 1 to n do e := e + f[i] * f[i];
e := sqrt(e);
g := e; w[round(1.5 + d)] := e;
gotoxy(5,60);
write('Текущая невязка ');
gotoxy(6,60);
writeln(g:3:3);
delay(100);
if (w[round(1.5 - d)] - w[round(1.5 + d)] < 0) and (k > 9) then begin
mis := 0;
fin := 0;
end;
if e > eps then
for i := 1 to n do x[i] := x[i] + f[i]
else begin
fin := 0;
for i := 1 to n do x[i] := x[i] + eps;
end;
gotoxy(1, 1);
for i := 1 to n do writeln('x[',i,']=',x[i]:3:2);
until (fin = 0) or (k>1000);
if mis = 1 then begin
writeln('Окончательный результат : ');
writeln('Точность удовлетворительная ');
end
else writeln('Процесс расходится ');
readln;
end.
выдавало ошибку 116 Must be in 8087 mode to compile this
добавила {N+}, тип данных изменила на real
я так поняла, что сами функции надо забивать так:
согласна, что можно было просто Real
а вот только с {$N+} ошибка сохраняется...
volvo, получается, что система нерешаемая? вот, блин
хотя маткад решает...
Приведи данные, которые ты вводишь в программу, и у тебя возникает ошибка... Только не надо говорить "любые" - меня интересует, что ТЫ вводишь...
ок, volvo, я поняла
погрешность 0,01
приближенные значения вводила 1 и 1 (потом еще -1 и -1 - маткад выдает решение -0.945 и -1.097)
Если вдруг кто-то знает метод итераций, то подскажите, а то у меня не получается.
Один из главных вопросов который меня волнует--это приведение системы линейных уравнений к виду удобному для итераций.
Т.е. если есть система АХ=В, то её надо привести к виду Х=GX+F.
Я написал прогу, но она не работает.
Вот алгоритм: АХ=В- исходная система, Х=GX+F- эквивалентная ей система, где
G=E-(A^t*A)/нормуA^t*A
. F=A^t*B/норуA^t*A
нормаA^t*A=максимальная сумма элементов строки.
A^t- транспонированая матрица
X1=GX0+F {X0=F}
X1-X0—невязка(точность)
X2=GX1+F
X2-X1
X3=GX2+F
X3-X2
И т.д.
М | теги... мисс_граффити |