1 страниц (8 вхождений)
Использование циклов - Сообщения
#1 Опубликовано: 19.11.2008 11:22:35
У меня возник вопрос по использованию циклов в программе,
Вот я пытаюсь более менее автоматизировать решение СЛАУ методом Ж.Г. и подобные действия
Допустим есть матрица [MATH]Z:=mat(1;-1;-3;2;1;0;0;0;-1;2;0;-1;0;1;0;0;2;-4;1;1;0;0;1;0;-1;-2;9;-1;0;0;0;1;4;8)[/MATH]
Выполняем цикл:
[MATH]for(i:=2;i<5;i:=i+1;Q:=row(Z;i)+row(Z;1)*(-el(Z;i;1)))[/MATH]
И при вводе после цикла Q= видим
[MATH]Q=mat(0;1;-3;1;1;1;0;0;1;8)[/MATH] т.е. результат выполненных действий над первой строкой,
а как получить другие результаты?
Или вообще может кто сможет подсказать более простой вариант решения))
P.S. На форуме не правильно отображается i<5 (а отображается как i/\lt;5)
Ой а еще вопрос, можно ли как-нибудь с помощью цикла заполнять поэлементно или построчно матрицы?
Вот я пытаюсь более менее автоматизировать решение СЛАУ методом Ж.Г. и подобные действия
Допустим есть матрица [MATH]Z:=mat(1;-1;-3;2;1;0;0;0;-1;2;0;-1;0;1;0;0;2;-4;1;1;0;0;1;0;-1;-2;9;-1;0;0;0;1;4;8)[/MATH]
Выполняем цикл:
[MATH]for(i:=2;i<5;i:=i+1;Q:=row(Z;i)+row(Z;1)*(-el(Z;i;1)))[/MATH]
И при вводе после цикла Q= видим
[MATH]Q=mat(0;1;-3;1;1;1;0;0;1;8)[/MATH] т.е. результат выполненных действий над первой строкой,
а как получить другие результаты?
Или вообще может кто сможет подсказать более простой вариант решения))
P.S. На форуме не правильно отображается i<5 (а отображается как i/\lt;5)
Ой а еще вопрос, можно ли как-нибудь с помощью цикла заполнять поэлементно или построчно матрицы?
#2 Опубликовано: 19.11.2008 11:41:36
Если говорить именно про "решение СЛАУ методом Ж.Г.", то можно просто использовать [MATH]A^{-1}*B[/MATH], например так:
[MATH]A←mat(1;-1;-3;2;-1;2;0;-1;2;-4;1;1;-1;-2;9;-1;4;4)[/MATH] [MATH]B←mat(0;1;2;3;4;1)[/MATH]
[MATH]A^{-1}*B=mat(79;49;22;18;4;1)[/MATH]
[MATH]A←mat(1;-1;-3;2;-1;2;0;-1;2;-4;1;1;-1;-2;9;-1;4;4)[/MATH] [MATH]B←mat(0;1;2;3;4;1)[/MATH]
[MATH]A^{-1}*B=mat(79;49;22;18;4;1)[/MATH]
#3 Опубликовано: 19.11.2008 11:49:30
Спасибо за ответ, это в принципе и так понятно, я же хотел расписать все действия. Лан, бум по старинке, на бумажке))
#4 Опубликовано: 19.11.2008 15:54:25
И так, по случаю, всвязи с множеством найденных критических ошибок, пришлось выпусть новую версию программы SMath Studio 0.68 (уже доступна для загрузки). Одно из изменений - это исправление работы с циклами. Теперь могу ответить на Ваш вопрос:
Теперь можно :d. Вот пример:
[MATH]A←matrix(6;6)[/MATH]
[MATH]for(j←1;j≤rows(A);j←j+1;for(k←1;k≤cols(A);k←k+1;el(A;j;k)←(j-1)*rows(A)+k))[/MATH]
[MATH]A=mat(1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;6;6)[/MATH]
(скачать файл сохранения с примером - только с версии 0.68)
ЦитатаОй а еще вопрос, можно ли как-нибудь с помощью цикла заполнять поэлементно или построчно матрицы?
Теперь можно :d. Вот пример:
[MATH]A←matrix(6;6)[/MATH]
[MATH]for(j←1;j≤rows(A);j←j+1;for(k←1;k≤cols(A);k←k+1;el(A;j;k)←(j-1)*rows(A)+k))[/MATH]
[MATH]A=mat(1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;6;6)[/MATH]
(скачать файл сохранения с примером - только с версии 0.68)
#5 Опубликовано: 19.11.2008 19:56:08
WroteP.S. На форуме не правильно отображается i<5 (а отображается как i/\lt;5)
Исправил, теперь спец. символы обрабатываются корректно.
#6 Опубликовано: 20.11.2008 10:28:03
Еще есть вопросы, например есть матрица:
[MATH]Z←mat(1;2;3;4;5;6;7;8;9;3;3)[/MATH]
Я, например, хочу из первой строки, если она не равна 1, вычесть 5:
[MATH]A←matrix(3;3)[/MATH]
[MATH]for(j←1;j≤rows(A);j←j+1;for(k←1;k≤cols(A);k←k+1;if(el(Z;1;1)≠1;el(A;1;k)←el(Z;1;k)-5;el(A;1;k)←el(Z;1;k)+5)))[/MATH]
И получаем:
[MATH]A=mat(-4;-3;-2;0;0;0;0;0;0;3;3)[/MATH]
т.е. программа считает что 1 ≠ 1
И опять же если в матрице Z первый элемент, например, равен 5:
[MATH]Z←mat(5;2;3;4;5;6;7;8;9;3;3)[/MATH]
То
[MATH]A=mat(10;7;8;0;0;0;0;0;0;3;3)[/MATH]
Я так понимаю просто не правлиьно обрабатывается условие, она делает все наоборот))
[MATH]Z←mat(1;2;3;4;5;6;7;8;9;3;3)[/MATH]
Я, например, хочу из первой строки, если она не равна 1, вычесть 5:
[MATH]A←matrix(3;3)[/MATH]
[MATH]for(j←1;j≤rows(A);j←j+1;for(k←1;k≤cols(A);k←k+1;if(el(Z;1;1)≠1;el(A;1;k)←el(Z;1;k)-5;el(A;1;k)←el(Z;1;k)+5)))[/MATH]
И получаем:
[MATH]A=mat(-4;-3;-2;0;0;0;0;0;0;3;3)[/MATH]
т.е. программа считает что 1 ≠ 1

И опять же если в матрице Z первый элемент, например, равен 5:
[MATH]Z←mat(5;2;3;4;5;6;7;8;9;3;3)[/MATH]
То
[MATH]A=mat(10;7;8;0;0;0;0;0;0;3;3)[/MATH]
Я так понимаю просто не правлиьно обрабатывается условие, она делает все наоборот))
#7 Опубликовано: 20.11.2008 11:54:53
Ох... Вы правы. Очень странно. Что ж, займусь полной проверкой функций программирования программы. О результатах сообщу здесь. Спасибо за подробный отчёт.
#8 Опубликовано: 23.11.2008 00:28:27
Как и обещал, протестировал все "программные" функции SMath Studio и выявил множество ошибок. Все найденные мной и Вами недочёты исправил. Итого: SMath Studio 0.69
Специально для этой темы накидал алгоритм преобразования матрицы на листе программы: прямой ход по методу Гаусса (вычисление занимает 77 мс. на Desktop версии) :
[MATH]A←mat(1;3;2;-1;1;0;0;0;0;2;1;1;0;1;0;0;-2;1;0;2;0;0;1;0;0;1;1;-1;0;0;0;1;4;8)[/MATH]
[MATH]B←matrix(rows(A);cols(A))[/MATH]
[MATH]for(s←1;ss)&(el(A;j;s)≠0);el(B;j;k)←(el(A;s;s))*(el(A;j;k))-(el(A;j;s))*(el(A;s;k));el(B;j;k)←el(A;j;k))));A←B;2;1))[/MATH]
[MATH]B=mat(1;3;2;-1;1;0;0;0;0;2;1;1;0;1;0;0;0;0;1;-7;4;-7;2;0;0;0;0;4;-4;6;-2;2;4;8)[/MATH]
(скачать листинг)
Надеюсь это поможет в Ваших задачах.
Специально для этой темы накидал алгоритм преобразования матрицы на листе программы: прямой ход по методу Гаусса (вычисление занимает 77 мс. на Desktop версии) :
[MATH]A←mat(1;3;2;-1;1;0;0;0;0;2;1;1;0;1;0;0;-2;1;0;2;0;0;1;0;0;1;1;-1;0;0;0;1;4;8)[/MATH]
[MATH]B←matrix(rows(A);cols(A))[/MATH]
[MATH]for(s←1;s
[MATH]B=mat(1;3;2;-1;1;0;0;0;0;2;1;1;0;1;0;0;0;0;1;-7;4;-7;2;0;0;0;0;4;-4;6;-2;2;4;8)[/MATH]
(скачать листинг)
Надеюсь это поможет в Ваших задачах.
1 страниц (8 вхождений)
-
Новые сообщения
-
Нет новых сообщений