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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> С++ Метод релаксаций (Нужна помощь!) 
:(
    Опции темы
Vladm
Дата 2.6.2008, 18:19 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.6.2008
Где: Тюмень

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



Мне очень нужен хотя бы отрывок кода С++ для релаксации СЛАУ.
Пытался сам реализовать: сначал под графический интерфейс, потом под консоль. Получилось заточить только под конкретный пример. Да и реализация, если честно, дурацкая: не учитывает точность, а получилось нужно вводить количество итераций... По заданию надо с точностью... в общем ((

Буду рад, если кто подскажет ))
PM MAIL WWW   Вверх
Vladm
Дата 3.6.2008, 13:59 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.6.2008
Где: Тюмень

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



Неужели ни у кого нет примера этого метода на с++? (:
PM MAIL WWW   Вверх
bronislav
Дата 3.6.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Примеры есть здесь или здесь


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Vladm
Дата 3.6.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.6.2008
Где: Тюмень

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



bronislav, по первой ссылке действительно есть пример, только программа там работает неверно: заточена под конкретный пример, прочие не правильно решает (по Маткаду проверял). По второй ссылке результат поисков выдает мою просьбу и еще другого человека, которая так и осталась без ответа.  ((:
PM MAIL WWW   Вверх
bronislav
Дата 3.6.2008, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну так выкладывай пример, который не до конца работает. Будет помошь в доработке. А написание кода с нуля вместо тебя это в "Центр помощи".


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Vladm
Дата 3.6.2008, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.6.2008
Где: Тюмень

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



Вот такая программа:
Код

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<math.h>

int maximal(int n,double R0[]);

void main(){
int i,j,n,f,k,iter;
double S,det;
cout<<"N = ";cin>>n;
double *x=new double [n];
double **b=new double *[n];
for(i=0;i<n;i++)
  b[i]=new double[n+1];
double **a=new double *[n];
for(i=0;i<n;i++)
  a[i]=new double[n+1];
cout<<"N Interation:";
cin>>iter;
cout<<"Full Matrix:\n";
for(i=0;i<n;i++){
    for(j=0;j<=n;j++)
        cin>>b[i][j];
}
cout<<"Matrix for relaxion\n";
for(i=0;i<n;i++){
    for(j=0;j<n;j++)
      a[i][j]=-b[i][j]/b[i][i];
    a[i][n]=b[i][n]/b[i][i];
}
for(i=0;i<n;i++){
    for(j=0;j<n+1;j++)
        cout<<"  "<<a[i][j]<<" || ";
cout<<"\n";
}
double *x0=new double [n];
for(i=0;i<n;i++)
  x[i]=0.00;
double *R0=new double [n];
cout<<"X1(0)..Xn(0):\n";
for(i=0;i<n;i++)
    cin>>x0[i];
S=0.00;
for(i=0;i<n;i++){
    for(j=0;j<n;j++)
      S=S+a[i][j]*x0[i];
}
for(i=0;i<n;i++){
    R0[i]=a[i][n]-x0[i]+S;
    cout<<"R("<<i<<")="<<R0[i]<<" | ";
}
f=maximal(n,R0);
det=R0[f];
for(k=0;k<iter;k++){
cout<<"det{"<<k<<"}="<<det<<"\n";
 for(i=0;i<n;i++){
    if(i!=f) R0[i]=R0[i]+a[i][f]*det;
     else R0[i]=R0[i]-det;
 }
 for(i=0;i<n;i++)
        cout<<"R["<<i+1<<"]="<<R0[i]<<"    ";
x[f]=x[f]+det;
f=maximal(n,R0);
det=R0[f];
}
cout<<"\n";
for(i=0;i<n;i++)
  cout<<"X{"<<i+1<<"}="<<x[i]<<"\n";
cin.sync();
getchar();
delete []x;
delete []R0;
delete []x0;
delete []a;

}

int maximal(int n,double R0[]){
int i,f;
f=0.0;
for(i=0;i<n-1;i++){
  if(R0[i+1]>R0[i]) f=i+1;
}
return f;
}



Решает пример:
10x1 - 2x2 - 2x3 = 6
-x1 + 10x2 - 2x3 = 7
-x1 - x2 + 10x3 = 8
При семи итерациях навязки обращаются в ноль и получаем три корня {1;1;1}
Считаю в маткаде: тоже самое.

К примеру для этой системы:
4x1 + 3x2 + 3x3 = 4
2.5x1 + 4x2 + 6x3 = 5
6x1 + 2x2 + 4x3 = 7
по маткаду должны быть следующие ответы {0.757;-.581;0.905}
считаю программой: немогу получить нулевые навязки (не считает короче)

В основном я код этой проги понимаю, но не весь (:  Может кто подскажет где загвоздка? И как сделать чтобы учитывалась точность при доведении до нуля навязок?


PM MAIL WWW   Вверх
bronislav
Дата 3.6.2008, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Vladm @  3.6.2008,  20:04 Найти цитируемый пост)
но не весь (:

А что не понимаешь?

Теоретические основы метода релаксаций можно посмотреть в любой книге по численным методам, ну млм наприме вот здесь.

Добавлено через 14 минут и 39 секунд
Во первых, тебе не надо сводить невязки в точности к нулю.
Величина отклонения невязки от нуля и есть точность найденного решения.

Также в твоей программе зачем-то вводится количество итераций, хотя вычисления должны проводиться не по количеству итераций, а по достижения определенной точности.


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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