Решение системы нелинейных уравнений, Метод итераций и метод Зейделя... |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Решение системы нелинейных уравнений, Метод итераций и метод Зейделя... |
Jill |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
Помогите, ребята! Про линейные системы информацию нашла.
А вот про нелинейные - не нашла ни слова... Задана система: cos(x+0.5)-y=2 siny-2x=1 Требуется решить систему методом итераций и методом Зейделя. Метод Зейделя нашла только для линейных систем. Про итерации вообще молчу... Помогите, плз! |
klem4 |
Сообщение
#2
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
у нас на форуме такого не припомню, а вот в интернете полно, например вот или вот
и у нас нашел, тут : http://forum.pascal.net.ru/index.php?s=&sh...indpost&p=34479 Сообщение отредактировано: klem4 - -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Jill |
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
klem4, пересмотри ссылки - там везде ЛИНЕЙНЫЕ системы
...или разницы нет? и у нас и в инете я искала, и все эти исходники мне попадались но мне необходимы НЕЛИНЕЙНЫЕ |
klem4 |
Сообщение
#4
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Попробую что-нибуь поискать.
зы Вот мне просто интересно, извиняюсь за оффтоп конечено, ты такая уже не первая, приходят люди и говорят : Привет, мне надо решить уровнение методом Васи Пупкина, у вас на сайте его нету что мне делать ? А перед тем как выдать задание, вам в течении семестра не давали этот алгоритм ? Просто сказали вот тебе начальные условия, вот название метода ищи где хочешь ? -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Jill |
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
оффф: самое интересное, что так оно и есть
учусь на заочном, препод дает конспект / одна из тем в конспекте - решение систем линейных уравнений / про нелинейные ни слова / а задание - сам видишь кроме того, конспектов зачастую оказывается ох как недостаточно, а времени преподам дается слишком мало - они и десятой части не вычитывают... вот так |
klem4 |
Сообщение
#6
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Вот посмотри, только решение на basic-e
Pешение нелинейной системы уpавнений методом Зейделя ps сочувствую ... Сообщение отредактировано: klem4 - -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Jill |
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
не открывается: "Невозможно найти страницу"
|
volvo |
Сообщение
#8
|
Гость |
Прикрепляю (это - то самое решение, которое нашел klem4):
Прикрепленные файлы zeydel.rar ( 956 байт ) Кол-во скачиваний: 409 |
Jill |
Сообщение
#9
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
та да, ребятЫ...
если б я еще не в первый раз листинг на бейсике видела.... |
klem4 |
Сообщение
#10
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Сейчас попробую перевести на паскаль, заняться нечем .. но мне почему-то кажется что это не совсем то, что тебе нужно.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
klem4 |
Сообщение
#11
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Хм вроде перевел с горем пополам, но что-то я не догоняю, программ практически при любых данных выдает один и тот-же результат, хотя возможно где-то я и ошибся :
Добавлено : гыгы надо просто ф-ю поменять ;) uses crt; Сообщение отредактировано: volvo - -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Jill |
Сообщение
#12
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
выдавало ошибку 116 Must be in 8087 mode to compile this
добавила {N+}, тип данных изменила на real я так поняла, что сами функции надо забивать так: Код f[1] := cos(x[1]+0.5)-x[2]-2; {перекидываю из правой части числа 2} f[2] := sin(x[2])-2*x[1]-1; {и 1} в результате работает, но: - считает неправильно - выдает большие числа - ругается, что система расходится... жах |
volvo |
Сообщение
#13
|
Гость |
|
Jill |
Сообщение
#14
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
согласна, что можно было просто Real
а вот только с {$N+} ошибка сохраняется... volvo, получается, что система нерешаемая? вот, блин хотя маткад решает... |
volvo |
Сообщение
#15
|
Гость |
Приведи данные, которые ты вводишь в программу, и у тебя возникает ошибка... Только не надо говорить "любые" - меня интересует, что ТЫ вводишь...
|
Jill |
Сообщение
#16
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
ок, volvo, я поняла
погрешность 0,01 приближенные значения вводила 1 и 1 (потом еще -1 и -1 - маткад выдает решение -0.945 и -1.097) |
willhunting |
Сообщение
#17
|
Пионер Группа: Пользователи Сообщений: 52 Пол: Мужской Репутация: 0 |
Если вдруг кто-то знает метод итераций, то подскажите, а то у меня не получается.
Один из главных вопросов который меня волнует--это приведение системы линейных уравнений к виду удобному для итераций. Т.е. если есть система АХ=В, то её надо привести к виду Х=GX+F. |
willhunting |
Сообщение
#18
|
|||
Пионер Группа: Пользователи Сообщений: 52 Пол: Мужской Репутация: 0 |
Я написал прогу, но она не работает.
Вот алгоритм: АХ=В- исходная система, Х=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 И т.д. Код program metod_iteracii; Uses CRT; type matrica=array [1..4,1..4] of extended; matrica1=array [1..4,1..1] of real; var R,G,G1,w,a,at,ata,e:matrica; t,i,j,m,n,l,k:byte; x,d,raz,c,b,b1,f,f1:matrica1; max,max1,s:real; procedure udo;{privedenie sistemi k vidu udobnomu dli iteracii} begin for i:=1 to n do for j:=1 to m do begin s:=0; at[j,i]:=s+a[i,j]; {tranponirue matricu} end; writeln('matrica a '); for i:=1 to n do begin for j:=1 to m do write(a[i,j]:2:2,' '); readln; end; writeln('matrica яtranponirovanay'); for i:=1 to n do begin for j:=1 to m do write(at[i,j]:2:2,' '); readln; end; {------------------------------} for i:=1 to n do for j:=1 to l do begin s:=0; for k:=1 to m do s:=s+a[i,k]*at[k,j]; {matrica=A*A tranponirovanai} ata[i,j]:=s; end; writeln('matrica at*a '); for i:=1 to n do begin for j:=1 to m do write(ata[i,j]:2:2,' '); readln; end; {-----------------------} for i:=1 to n do begin s:=0; begin for j:=1 to m do s:=s+abs(ata[i,j]); { vichislenie normirovanoi matrici} w[i,1]:=s; end; end; {--------------------------} { writeln('normirovanay matrica '); for i:=1 to n do begin write(w[i,1]:2:2,' '); writeln; end;} {-----------------------} max:=0; for i:=1 to n do begin for j:=1 to m do if w[i,j]>max then max:=w[i,j]; end; writeln('norma=', max:2:4); {-----------------------------} for i:=1 to n do begin for j:=1 to m do G[i,j]:=e[i,j]-(1/max)*ata[i,j]; {vichislenie matrici G} end; {-----------------} writeln('G '); for i:=1 to n do begin for j:=1 to m do write(G[i,j]:2:5,' '); readln; end; {---------------------} for i:=1 to n do begin s:=0; for k:=1 to m do s:=s+at[i,k]*b[k,1]*(1/max); {vichislenie matrico F} f[i,1]:=s; end; writeln('matrica f '); for i:=1 to n do begin write(f[i,1]:2:5,' '); writeln; end; f1:=f; end; {-------------------------} {----------------------} procedure iterac(f:matrica1); begin for i:=1 to n do for j:=1 to l do begin s:=0; for k:=1 to m do s:=s+G[i,k]*f[k,1];{G*X} c[i,j]:=s; end; {------------------------------------------------------} writeln ('matrica c=G*f'); for i:=1 to n do write(c[i,1]:2:2,' '); writeln; {-------------------------------------------------} begin for i:=1 to m do for j:=1 to n do x[i,j]:=c[i,j]+f1[i,j]; end; writeln('matrica x'); for i:=1 to l do write('x[',i,'1]=', x[i,1]:2:4,' '); writeln; {---------------------------------------------------} begin for i:=1 to m do for j:=1 to n do raz[i,j]:=(x[i,j])-(f[i,j]); {nevyzca} end; writeln('matrica raz'); for i:=1 to l do write( raz[i,1]:2:4,' '); writeln; {--------------------------------------} begin max:=abs(raz[1,1]); {nahodim max nevyzcu} for i:=1 to m do if abs(raz[i,1])>max then max:=abs(raz[i,1]); end; write('max=',max:2:4,' ' ); readln; begin if Abs(max)>0.00001 then begin f[i,j]:=x[i,j]; iterac(x); end else begin writeln('matrica x '); for i:=1 to l do write(x[i,1]:2:4,' '); writeln; end; end; end; procedure proverca; begin for i:=1 to n do begin R[i,m]:=A[i,1]*x[1,1]+A[i,2]*x[2,1]+A[i,3]*x[3,1]+A[i,4]*x[4,1]; writeln('b[',i,m,']=',R[i,m]:2:2); end; end; BEGIN n:=4;l:=4; m:=4; a[1,1]:=3.51; a[1,2]:=0.17; a[1,3]:=3.68; a[1,4]:=-0.28; a[2,1]:=4.52; a[2,2]:=2.11; a[2,3]:=6.63; a[2,4]:=-0.12; a[3,1]:=-2.11; a[3,2]:=3.17; a[3,3]:=1.06; a[3,4]:=-0.15; a[4,1]:=3.17; a[4,2]:=1.81; a[4,3]:=-3.17; a[4,4]:=0.22; e[1,1]:=1; e[1,2]:=0; e[1,3]:=0; e[1,4]:=0; e[2,1]:=0; e[2,2]:=1; e[2,3]:=0; e[2,4]:=0; e[3,1]:=0; e[3,2]:=0; e[3,3]:=1; e[3,4]:=0; e[4,1]:=0; e[4,2]:=0; e[4,3]:=0; e[4,4]:=1; b[1,1]:=0.75; b[2,1]:=1.11; b[3,1]:=0.21; b[4,1]:=0.05; { a[1,1]:=0.63; a[1,2]:=1.00; a[1,3]:=0.71; a[1,4]:=0.34; a[2,1]:=1.17; a[2,2]:=0.18; a[2,3]:=0.65; a[2,4]:=0.71; a[3,1]:=1.80; a[3,2]:=1.18; a[3,3]:=1.36; a[3,4]:=-2.35; a[4,1]:=3.58; a[4,2]:=0.21; a[4,3]:=3.45; a[4,4]:=-1.18; b[1,1]:=2.08; b[2,1]:=0.17; b[3,1]:=1.28; b[4,1]:=0.05;} udo; iterac(f); proverca; END.
|
|||
willhunting |
Сообщение
#19
|
Пионер Группа: Пользователи Сообщений: 52 Пол: Мужской Репутация: 0 |
|
Текстовая версия | 23.12.2024 21:14 |