Статус: 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)
| Причина: Исправление ошибок)
Статус: Administration
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Сказал «Спасибо»: 640 раз Поблагодарили: 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)
Статус: Member
Группы: Registered
Зарегистрирован: 19.11.2008(UTC)
Сообщений: 19
Откуда: Санкт-Петербург
Сказал «Спасибо»: 2 раз
Спасибо за ответ, это в принципе и так понятно, я же хотел расписать все действия. Лан, бум по старинке, на бумажке))
Статус: Administration
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Сказал «Спасибо»: 640 раз Поблагодарили: 262 раз в 102 постах
И так, по случаю, всвязи с множеством найденных критических ошибок, пришлось выпусть новую версию программы
SMath Studio 0.68 (уже доступна для загрузки). Одно из изменений - это исправление работы с циклами. Теперь могу ответить на Ваш вопрос:
Цитата: Ой а еще вопрос, можно ли как-нибудь с помощью цикла заполнять поэлементно или построчно матрицы?
Теперь можно
. Вот пример:
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)
Статус: Administration
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Сказал «Спасибо»: 640 раз Поблагодарили: 262 раз в 102 постах
XroM написал: P.S. На форуме не правильно отображается i<5 (а отображается как i/\lt;5)
Исправил, теперь спец. символы обрабатываются корректно.
Статус: 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
И опять же если в матрице 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) Я так понимаю просто не правлиьно обрабатывается условие, она делает все наоборот))
Статус: Administration
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Сказал «Спасибо»: 640 раз Поблагодарили: 262 раз в 102 постах
Ох... Вы правы. Очень странно. Что ж, займусь полной проверкой функций программирования программы. О результатах сообщу здесь. Спасибо за подробный отчёт.
Статус: Administration
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Сказал «Спасибо»: 640 раз Поблагодарили: 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) (
скачать листинг )
Надеюсь это поможет в Ваших задачах.
Быстрый переход
Форум проекта SMath
SMath Studio
- Скачать SMath Studio
--- Архив
--- Ночные сборки
- Примеры использования
- Вопросы по использованию
- Предложения
- Ошибки
Математика
- Документы
- Алгоритмы
- Математические задачи
Общение
- О проекте
- Общение
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.