Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решение НСЛАУ итерациями (метод Якоби), Метод Якоби 
:(
    Опции темы
Alleut
  Дата 19.3.2008, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Собственно вопросы:
*каков алгоритм решения неоднородной системы методом Якоби?
*каков начальный вектор?
*как проверятся критерий сходимости?

ПС: язык реализации задачи есть С++, матрица системы [3х3]: A = D + kG (k= 0...5) D и G даны. Это так, на всякий случай
PM MAIL   Вверх
Danza
Дата 19.3.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Писала ещё в прошлом году, не помню насколько хорошо работает, но вроде нормально.
Код

#include "stdafx.h"
#include "math.h"
#include "time.h" 
#include <iostream>
using namespace std;
const double eps=0.00001; 
//double

double norm (double x0, double x1, double y0, double y1);
double f(double x, double y);
double g(double x, double y);
double pr_fx(double x, double y);
double pr_gy(double x, double y);
double nutonx(double y0);
double nutony(double x0);


int _tmain(int argc, _TCHAR* argv[])
{
    double x, xnext, y, ynext;
    int t=1;
    int n=0, m=0;
    x=2.5; y=6.5;  // начальное приближение
    //srand(time(NULL));    
    while (t!=0)
    {
        xnext=nutonx(y);
        //cout<<xnext<<endl;
        ynext=nutony(x);
        //cout<<ynext<<endl;
        n++;
        if (norm(x, xnext, y, ynext)<eps) t=0;
        if (n==65000){ n=0; m++;}
        if (m==3) {cout<<"Rasxoditsya ili ploxoe na4alnoe priblijenie\n"; t=0;}
        //if (n==65000) t=0;
        x=xnext;
        y=ynext;
    }
    cout<<"x="<<x<<"\ty="<<y<<"\nn="<<n<<"\nm="<<m<<endl;;
    system("pause");
    return 0;
}


double norm (double x0, double x1, double y0, double y1)
{
    return /*abs(x0-y0)+abs(x1-y1);//*/sqrt( (x0-x1)*(x0-x1)+(y0-y1)*(y0-y1) );
}
double f(double x, double y)
{
    //return sin(x)+cos(y-1)-1; // dlya etoi otvet 0;1
    //return x*x-y-4;                //dlya etoi 3;5        
    //return y-x*x;                    //dlya etoi 2;4
    return x*x-y-2;                    // dlya etoi 3;7
}
double g(double x, double y)
{
    //return 10*x-7*y+7;
    //return x+2*y-13;//
    //return y-x*x/2-2;
    return 3*x-3*y+12;
}
 double pr_fx(double x, double y) 
 { 
  double t; 
  t=(f(x+eps, y)-f(x-eps, y))/eps; 
  return t; 
  } 
 double pr_gy(double x, double y)
 { 
  double t; 
  t=(f(x, y+eps)-f(x, y-eps))/eps; 
  return t; 
  } 
  double nutonx(double y0 ) 
 { double x1=rand () % 20; 
  while (abs(f(x1, y0))>eps) 
         x1=x1-f(x1,y0)/pr_fx(x1,y0);                 
        return x1; 
 } 
    double nutony(double x0) 
 {
        double y1=rand () %20;
  while (abs(g(x0, y1))>eps) 
         y1=y1-g(x0, y1)/pr_gy(x0, y1);                 
        return y1; 
 } 

PM MAIL ICQ   Вверх
Alleut
  Дата 20.3.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Гм, спасибо. 
Но мне еще интересно, как именно эта хрень работает smile

ПС: я еще не совсем понял, где в коде задается матрица системы
PM MAIL   Вверх
Alleut
  Дата 22.3.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может, у кого-нибудь есть ссылка на доступное объяснения алгоритма? smile
PM MAIL   Вверх
Alleut
  Дата 24.3.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мда уж, че так туго то? АУ!  smile 
PM MAIL   Вверх
Alleut
Дата 4.4.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хренова -_-
PM MAIL   Вверх
nworm
Дата 4.4.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В википедии, например, есть

(о начальном приближении там теорема)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


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

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


 




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


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

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