![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Для преобразования использую
for (p=1; p<n; p++) { for (q=0; q<m; q++); mas[p][q]=mas[p][q]*(mas[0][q]/mas[p][q])-mas[0][q]; } По моей задумке какого размера матрица не была бы, все числа ниже основной диагонали будут нули. При выполнении программы выскакиевает ошибка "floating point root of negative number", хотя не могу понять где здесь может быть корень еще и из отрицательного числа? Если кто-то знает другую формулу преобразования, напишите пожалуйста Добавлено через 6 минут хах...теперь я понял что в корне делаю неправильно, буду думать, но от помощи не откажусь |
|
|
|
|
| Реклама: | SunWind SUN-M24BG110 | кольцо с маленьким изумрудом | интеграция метрики и вк | Мебельный магазин: купить в москве диван кровать - Переходи на сайт! | Магазин бытовой техники: холодильник maunfeld mff50b - переходи на сайт ТАЙМТВ! |
|
|
#2
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Если нужно обнулить нижнюю часть матрицы:
Код:
for (p=0; p<n; p++)
{
for (q=0; q<p; q++)
mas[p][q]=0;
}
__________________
Сергей Сергеевич |
|
|
|
| Сказали спасибо: |
|
|
#3
|
|
Спасибо за подсказку!
p.s. мне нужно использовать метод Гаусса |
|
|
|
|
|
|
#4
|
|
Написал функцию, но преобразовывается только первый столбец, хотя по идее с использованием float last эта проблема должна была решиться.
void zvedennya (float mas[n][m], int p, int q) { float pelem,last=0,f=0; for (p=0; p<n; p++) { for (q=0; q<p; q++) { last=q; pelem=mas[p][last]; for (f=q; f<m; f++) { mas[p][f]=mas[p][f]/pelem-mas[0][f]; } } } } Последний раз редактировалось indie.; 02.12.2010 в 15:20.. |
|
|
|
|
|
|
#5
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
last и f должны быть целого типа (int):
Код:
const int n=5,m=5;
void zvedennya(float mas[n][m])
{
float pelem;
int last=0,f=0;
for (int p=0; p<n; p++)
{
for (int q=0; q<p; q++)
{
last=q;
pelem=mas[p][last];
for (f=q; f<m; f++)
{
mas[p][f]=mas[p][f]/pelem-mas[0][f];
}
}
}
}
void main()
{
float mm[n][m];
for (int p=0; p<n; p++)
{
for (int q=0; q<m; q++)
{
mm[p][q]=p*q+1;
}
}
zvedennya(mm);
for (int p=0; p<n; p++)
{
for (int q=0; q<m; q++)
{
printf("%f ",mm[p][q]);
}
putchar('\n');
}
getch();
}
__________________
Сергей Сергеевич |
|
|
|
|
|
#6
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Реализуем как в Википедии http://ru.wikipedia.org/wiki/%D0%9C%...81%D1%81%D0%B0
Код:
#include <stdio.h>
#include <conio.h>
const int n=3; // К-во строк
const int m=3; // К-во столбцов
void zvedennya(double mas[n][m])
{
for (int p=0; p<n; p++)//номер итерации
{
double p0=mas[p][p]; // знаменатель
for (int q=p+1; q<m; q++) // номер изменяемой строки
{
double pelem=mas[q][p]; // числитель
for (int f=p; f<m; f++)
{
mas[q][f]=mas[q][f]-mas[p][f]/p0*pelem;
}
}
}
}
void main()
{
double mm[n][m]={{2.,1.,-1.},{-3.,-1.,2.},{-2.,1.,2.}};
zvedennya(mm);
for (int p=0; p<n; p++)
{
for (int q=0; q<m; q++)
{
printf("%lf ",mm[p][q]);
}
putchar('\n');
}
puts("OK");
_getch();
return;
}
__________________
Сергей Сергеевич |
|
|
|
|
|
#7
|
|
Спасибо, работает. Вот только 2 проблемы:
1) В очень многих случаях ошибка "Invalid floating point operation" 2) Я НИЧЕГО НЕ ПОНЯЛ ![]() Надеюсь, что мозги есть, буду разбираться p.s. а, и еще я обнаружил ошибку: for (int q=p+1; q<m; q++) // номер изменяемой строки а надо for (int q=p+1; q<n; q++) // номер изменяемой строки Последний раз редактировалось indie.; 07.12.2010 в 00:02.. |
|
|
|
|
|
|
#8
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
1.приведите пример.
2.посмотрите алгоритм в википедии. Думаю станет понятно. 3. Чтобы правильно получалось m должно быть равно n. Иначе надо предусматривать какие-то дополнительные действия.
__________________
Сергей Сергеевич |
|
|
|
|
|
#9
|
|
Я стараюсь сделать по своему методу, т.к. по Вашему не понял. Вот уже 15 минут смотрю в код и делаю все действия постепенно как компилятор, и все-равно программа преобразовывает в нули только первый столбец
|
|
|
|
|
|
|
#10
|
|||||||||||||||||||
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Еще раз смотрим в википедии
http://ru.wikipedia.org/wiki/%D0%9C%...81%D1%81%D0%B0 Там даже есть пример системы из 3 неизвестных
p.s. Код лучше не смотреть а скомпилировать и в отладчике пройти по шагам нажимая клавишу F10.
__________________
Сергей Сергеевич Последний раз редактировалось zss; 14.12.2010 в 07:28.. |
|||||||||||||||||||
|
|
|
| Сказали спасибо: |
|
|
#11
|
|
Ура! Я осилил) Спасибо, zss, за подсказку!
void zvedennya (float mas[n][m], int p, int q) { float pelem; for (p=0; p<m; p++) { for (q=0; q<p; q++) { pelem=mas[p][q]; for (int i=q; i<n; i++) { mas[p][i]=mas[p][i]/(pelem/mas[0][i])-mas[0][i]; } } } } Тему можно закрывать |
|
|
|
|
|
|
#12
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Треугольный вид получается, но числа получаются не те, что в примере на Википедии.
И для чего Вы p,q включили в параметры функции? Это локальные индексы циклов, и описывать их нужно локально. Если очень хочется, то в качестве параметров перешлите n,m: Код:
void zvedennya (double mas[NMAX][MMAX], int n, int m)
{
int i,p,q;
for (p=0; p<m; p++) // номер итерации
{
double p0=mas[p][p]; // знаменатель, т.е. каждую строку делим на p-ый диагональный элемент
for (q=p+1; q<m; q++) // номер изменяемой строки
{
double pelem=mas[q][p]; // числитель, т.е. каждую строку домножаем на элемент (q,p)
for (i=p; i<m; i++)
{
mas[q][i]=mas[q][i]-mas[p][i]/p0*pelem;
}
}
}
}
и еще. Отчего такая жажда использования float? Процесор все операции выполняет с точностью double и float будет полезным только если катастрофически не хватает оперативной памяти.
__________________
Сергей Сергеевич Последний раз редактировалось zss; 15.12.2010 в 18:47.. |
|
|
|
| Сказали спасибо: |
|
|
#13
|
|
p,q это типо деффект. а изменять мне лень
а числа и правда не те... а в вашем коде мне еще предстоит разобраться. он то работает (спасибо!), но это не главное. может я не могу его разобрать из-за того что сейчас температура 38. завтра с утреца еще раз гляну. |
|
|
|
|
|
|
#14
|
|
более-менее разобрался
спасибо! |
|
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Разбила матрицу :( | domokozyavka | Скорая помощь | 7 | 26.08.2010 19:04 |
| Чем преобразовать | Coroconogka | Macromedia Flash | 3 | 03.07.2008 00:15 |
| NEC создаёт ультрабыструю LCD-матрицу | StreLock | Новости железа | 2 | 10.05.2006 22:11 |
| SWF - преобразовать | gavan | Macromedia Flash | 3 | 08.05.2006 02:51 |
|
|