Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решение СЛАУ на С++, ошибка в коде 
:(
    Опции темы
Tinysik
  Дата 23.12.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



подскажите кто знает.... :( ниже код для решения СЛАУ методом простой итерации. На парах мы делали след. образом - писали код(проверяли его), затем в него вставляли какой-ниб. пример и этот пример решался. 

в этом коде есть ошибка в выделенной строке...

#include<math.h>

 #define N 100

 double A[N][N], F[N], mf, X[N], X1[N], S[N], msf;

 

main()

 { int i, j;

   long int dt;

   double t, e;



   mf = 0;

   for(i = 0; i < N; i++)

    { for(j = 0; j < N; j++)

       (i==j)?(A[i][j]=2):(A[i][j]=1);

      F[i] = N+1;



      mf += F[i]*F[i];

    }

 


   t = 0.01;

   e = 0.00001;

 


   for(i = 0; i < N; i++)

    X1[i] = 0.6;


    do

      { for(i = 0; i < N; i++)



         X[i] = X1[i];

 

        for(msf=0,i = 0; i < N; i++)

         { for(S[i] = 0,j = 0; j < N; j++)

             S[i] += A[i][j] * X[j];

           X1[i] = X[i] - t*(S[i] - F[i]);


           msf += (S[i]-F[i])*(S[i]-F[i]);

         }

      }

    while(msf/mf > e*e);  

    for(i = 0; i < 4; i++)

     printf(" %f\n",X[i]);

 return(0);

  }



что это за ошибка?! до сег. дня все работало...не знаю как так может быть:( 


МНЕ НУЖНО - избавиться от ошибки и посчитать например такой пример 
-  3x1 - x2 = 5
-2x1+ x2+ x3 = 0
-2x1- x2+ 4x3 = 15                                                                               
PM MAIL   Вверх
bsa
Дата 23.12.2007, 14:10 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



какая ошибка? Почему не воспользовался тегом "код"?
Почему после while, который перед for с проблемным printf, стоит точка с запятой?
PM   Вверх
Tinysik
  Дата 23.12.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



вообще этот код я нашла в интернете... он выглядел так - 

#include<stdio.h>
#include<sys/time.h>
#define N 100

 double A[N][N], F[N], mf, X[N], X1[N], S[N], msf;

 main()

 { int i, j;

   long int dt;

   double t, e;

   struct timeval tv1, tv2;   

 /* Генерация данных. Здесь задается матрица с элементами равными 1,

  * по диагонали равными 2. Матрица берется хорошо обусловленной.

  * При правой части равной N+1 все корни будут равными 1. */

   mf = 0;

   for(i = 0; i < N; i++)

    { for(j = 0; j < N; j++)

       (i==j)?(A[i][j]=2):(A[i][j]=1);

      F[i] = N+1;

 /* Сразу вычисляем сумму квадратов элементов вектора F,

  * т.е. подкоренное выражение формулы (4). */ 

      mf += F[i]*F[i];

    }


/* Задаем шаг t и e. */

   t = 0.01;

   e = 0.00001;

/* Задаем начальное приближение корней. В Х1 хранятся значения корней

 * к+1-й итерации. */

   for(i = 0; i < N; i++)

    X1[i] = 0.6;

/* Засекаем время начала вычислений. */

    gettimeofday(&tv1,NULL);

    do

      { for(i = 0; i < N; i++)


/* В Х хранятся значения корней к-й итерации. */

         X[i] = X1[i];

        for(msf=0,i = 0; i < N; i++)

         { for(S[i] = 0,j = 0; j < N; j++)

             S[i] += A[i][j] * X[j];

           X1[i] = X[i] - t*(S[i] - F[i]);

 /* Вычисляем сумму квадратов элементов невязки, т.е. подкоренное

  * выражение числителя формулы (4). */ 

           msf += (S[i] – F[i])*(S[i] – F[i]);

         }

      }

    while(msf/mf > e*e);   /* Проверка условия по формуле (3). */

/* Засекаем время конца вычислений. */

    gettimeofday(&tv2,NULL);

    dt = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - tv1.tv_usec;

/* Выводим на экран время вычислений в секундах */

    printf(" Time= %d\n",dt); 


/* Для контроля выводим 4-е первых корня */

    for(i = 0; i < 4; i++)

     printf(" %f\n",X[i]);

 return(0);

  }




но, т.к. мне не надо, чтобы он считал время вычисления и т.д., я удалилато, что связано с time(то,что зачеркнуто)


правильно я сделала?

теперь мне нужно,чтоб этот код работал, а потом уже включить в него пример 
PM MAIL   Вверх
baldina
Дата 23.12.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата

    do
{ for(i = 0; i < N; i++)

вот это ты зря удалила
PM MAIL   Вверх
bsa
Дата 23.12.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



используй тег "код"!!!
так. на счет while я все понял.
на printf ругается, потому что ты заменила #include <stdio.h> на #include <math.h>, который в данном коде не нужен.
Код должен выглядеть примерно так:
Код
#include <stdio.h>

#define N 3

const double A[N][N] = {
        {-3, -1, 0},//{0, -1, -3},
        {-2,  1, 1},//{1, 1, -2},
        {-2, -1, 4}//{4, -1, -2}
};
const double F[N] = {
        5, 0, 15
};
const double e2 = 0.00001*0.00001;

int main()
{
        int i, j;
        long int dt;
        const double t = 0.01;
        double mf = 0, X[N], X1[N], S[N], msf;
        for(i = 0; i < N; i++) {
                mf += F[i]*F[i];
                X1[i] = 0.6;
                for(j=0; j < N; ++j)
                        printf("%f ", A[i][j]);
                printf("\n");
        }

        do {
                for(i = 0; i < N; i++)
                        X[i] = X1[i];

                for(msf=0,i = 0; i < N; i++) {
                        for(S[i] = 0,j = 0; j < N; j++)
                                S[i] += A[i][j] * X[j];
                        X1[i] = X[i] - t*(S[i] - F[i]);
                        msf += (S[i]-F[i])*(S[i]-F[i]);
                }
        }while(msf/mf > e2);

        for(i = 0; i < N; i++)
                printf(" %f\n",X[i]);

   return(0);
}
Вот только как бы код не выглядел, он почему-то работает некорректно.

2baldina
посмотри первый пост, там это не удалено.
PM   Вверх
Tinysik
Дата 23.12.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



ой спасибо...... 


программа работает, ошибок нет, но он должен выводить корни, а там что-то не то выводит...

 простите за мой "тупизм", просто я на С++ не бум-бум, был бы VB я бы еще там что-то сообразила,если ошибки были бы.(хотя эту задачу сказали можно и на VB делать)



еще раз вам спасибо, а то у меня никакого продвижения не было (прям реально замучалась)


а на счет includ'a я сделала там #include<math.h>, т.к. мы с <stdio.h> не работали никогда, только с 
#include<iostream.h>
#include<math.h>

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  _________1.jpg 36,16 Kb
PM MAIL   Вверх
bsa
Дата 23.12.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Tinysik, никто не мешает заменить stdio.h на iostream... Только там printf надо будет заменить на cout.
PM   Вверх
Tinysik
Дата 23.12.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



так будет?  smile 

cout<<("%f ", A[i][j]);
                cout<<("\n");


см. вложение ---->



Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  22.JPG 20,08 Kb
PM MAIL   Вверх
bsa
Дата 23.12.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Tinysik, ой.
нужно просто cout << X[i] << "\n";
PM   Вверх
Tinysik
Дата 23.12.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



а что вот это такое ???


см. рисунок... (выделено красным)

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  22.JPG 104,42 Kb
PM MAIL   Вверх
bsa
Дата 23.12.2007, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



INF - сокращение от infinite - бесконечность.
я же говорю, программа не работает.
PM   Вверх
Tinysik
Дата 24.12.2007, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



ммммммммммм жалко... что ж такое, а .. прям не везет с этой прогаммой smile  smile 
PM MAIL   Вверх
bsa
Дата 24.12.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Попробуй это: http://www2.sscc.ru/Publikacii/Primery_Prll/5.htm
только убери все, что связано с MPI
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.