Русскоязычный форум закрыт из-за отсутствия активности (доступен только для чтения).
Пожалуйста, пользуйтесь англоязычной его версией. Приносим извинения за неудобства
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline XroM  
#1 Оставлено : 19 ноября 2008 г. 17:22:35(UTC)
XroM


Статус: Member

Группы: Registered
Зарегистрирован: 19.11.2008(UTC)
Сообщений: 19
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 2 раз
У меня возник вопрос по использованию циклов в программе,
Вот я пытаюсь более менее автоматизировать решение СЛАУ методом Ж.Г. и подобные действия
Допустим есть матрица 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)
Выполняем цикл:
for(i:=2;i<5;i:=i+1;Q:=row(Z;i)+row(Z;1)*(-el(Z;i;1)))
И при вводе после цикла Q= видим
Q=mat(0;1;-3;1;1;1;0;0;1;8) т.е. результат выполненных действий над первой строкой,
а как получить другие результаты?
Или вообще может кто сможет подсказать более простой вариант решения))

P.S. На форуме не правильно отображается i<5 (а отображается как i/\lt;5)

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

Отредактировано модератором 20 ноября 2008 г. 1:54:35(UTC)  | Причина: Исправление ошибок)

Offline smath  
#2 Оставлено : 19 ноября 2008 г. 17:41:36(UTC)
smath


Статус: Administration

Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Мужчина
Российская Федерация

Сказал «Спасибо»: 573 раз
Поблагодарили: 262 раз в 102 постах
Если говорить именно про "решение СЛАУ методом Ж.Г.", то можно просто использовать A^{-1}*B, например так:
A←mat(1;-1;-3;2;-1;2;0;-1;2;-4;1;1;-1;-2;9;-1;4;4) B←mat(0;1;2;3;4;1)
A^{-1}*B=mat(79;49;22;18;4;1)
Offline XroM  
#3 Оставлено : 19 ноября 2008 г. 17:49:30(UTC)
XroM


Статус: Member

Группы: Registered
Зарегистрирован: 19.11.2008(UTC)
Сообщений: 19
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 2 раз
Спасибо за ответ, это в принципе и так понятно, я же хотел расписать все действия. Лан, бум по старинке, на бумажке))
Offline smath  
#4 Оставлено : 19 ноября 2008 г. 21:54:25(UTC)
smath


Статус: Administration

Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Мужчина
Российская Федерация

Сказал «Спасибо»: 573 раз
Поблагодарили: 262 раз в 102 постах
И так, по случаю, всвязи с множеством найденных критических ошибок, пришлось выпусть новую версию программы SMath Studio 0.68 (уже доступна для загрузки). Одно из изменений - это исправление работы с циклами. Теперь могу ответить на Ваш вопрос:
Цитата:
Ой а еще вопрос, можно ли как-нибудь с помощью цикла заполнять поэлементно или построчно матрицы?

Теперь можно Biggrin. Вот пример:
A←matrix(6;6)
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))
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)
(скачать файл сохранения с примером - только с версии 0.68)
Offline smath  
#5 Оставлено : 20 ноября 2008 г. 1:56:08(UTC)
smath


Статус: Administration

Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Мужчина
Российская Федерация

Сказал «Спасибо»: 573 раз
Поблагодарили: 262 раз в 102 постах
XroM написал:
P.S. На форуме не правильно отображается i<5 (а отображается как i/\lt;5)

Исправил, теперь спец. символы обрабатываются корректно.
Offline XroM  
#6 Оставлено : 20 ноября 2008 г. 16:28:03(UTC)
XroM


Статус: Member

Группы: Registered
Зарегистрирован: 19.11.2008(UTC)
Сообщений: 19
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 2 раз
Еще есть вопросы, например есть матрица:
Z←mat(1;2;3;4;5;6;7;8;9;3;3)
Я, например, хочу из первой строки, если она не равна 1, вычесть 5:
A←matrix(3;3)
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)))
И получаем:
A=mat(-4;-3;-2;0;0;0;0;0;0;3;3)
т.е. программа считает что 1 ≠ 1 Good
И опять же если в матрице Z первый элемент, например, равен 5:
Z←mat(5;2;3;4;5;6;7;8;9;3;3)
То
A=mat(10;7;8;0;0;0;0;0;0;3;3)
Я так понимаю просто не правлиьно обрабатывается условие, она делает все наоборот))
Offline smath  
#7 Оставлено : 20 ноября 2008 г. 17:54:53(UTC)
smath


Статус: Administration

Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Мужчина
Российская Федерация

Сказал «Спасибо»: 573 раз
Поблагодарили: 262 раз в 102 постах
Ох... Вы правы. Очень странно. Что ж, займусь полной проверкой функций программирования программы. О результатах сообщу здесь. Спасибо за подробный отчёт.
Offline smath  
#8 Оставлено : 23 ноября 2008 г. 6:28:27(UTC)
smath


Статус: Administration

Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Мужчина
Российская Федерация

Сказал «Спасибо»: 573 раз
Поблагодарили: 262 раз в 102 постах
Как и обещал, протестировал все "программные" функции SMath Studio и выявил множество ошибок. Все найденные мной и Вами недочёты исправил. Итого: SMath Studio 0.69

Специально для этой темы накидал алгоритм преобразования матрицы на листе программы: прямой ход по методу Гаусса (вычисление занимает 77 мс. на Desktop версии) :
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)
B←matrix(rows(A);cols(A))
for(s←1;s<rows(A);s←s+1;line(for(j←s;j≤rows(A);j←j+1;for(k←s;k≤cols(A);k←k+1;if((j>s)&(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))
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)
(скачать листинг)
Надеюсь это поможет в Ваших задачах.
Пользователи, просматривающие эту тему
Similar Topics
Использование циклов (Примеры использования)
по smath 11.07.2008 20:33:41(UTC)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.