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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужно распараллелить 
:(
    Опции темы
vio
  Дата 5.6.2005, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я написала программу на С++, но как ее распараллелить для Unix я не могу понять! Помогите подалуйста!
Код

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <math.h>

void RowMultiplyNumber(double a[],int n,int m,int k,double Number)
{
register int i;
for(i=0;i<m;i++,k+=n)
    a[k]*=Number;
}

void RowInterchange(double a[],int n,int m,int k,int l)
{
    register int i;
    double save;
    for(i=0;i<m;i++,k+=n,l+=n)
    {
        save = a[k];
        a[k]=a[l];
        a[l]=save;
    }
}

void ArrayToArray(double x[],double y[],int n)
{
    for(register int i=0;i<n;i++)
    y[i]=x[i];
}

int SimpleIteration(double a[],double b[],double x[],int n,double Esp,int *Max)
{
    register int i,j;
    int Iter=0,Code=0,End,i1,m;
    double *x1,Maximum,Probe,Sign;

for(i=0;i<n-1;i++)
{
    m=i*n+i;
    i1=i;
    Maximum=fabs(a[m]);
    Sign= a[m] >= 0 ? 1 : -1;
    for(j=i+1;j<n;j++)
    {
        Probe = fabs(a[++m]);
        if(Maximum<Probe)
        {
            i1=j;
            Maximum=Probe;
            Sign = a[m] >= 0 ? 1 : -1;
        }
    }
    if(Maximum == 0)
        return -3;
    if(Sign==-1)
    {
        RowMultiplyNumber(a,n,n,i1,Sign);
        b[i1]*=Sign;
    }
    if(i!=i1)
    {
        RowInterchange(a,n,n,i,i1);
        RowInterchange(b,n,n,i,i1);
    }
}
if((x1=new double[n])==0)
    return -1;
do
{
    for(i=0;i<n;i++)
    {
        x1[i]=0;
        for(j=0,m=i;j<n;j++,m+=n)
            x1[i] +=a[m]*x[j];
            if(a[i*n+1]==0)a[i*n+1]=0.01;
        x1[i] = x[i]-(x1[i]-b[i])/a[i*n+i];
    }
if(++Iter>*Max)
{
    Code=-2;
    break;
}
for(i=0,End=0;i<n;i++)
    if(fabs(x1[i]-x[i])>Esp)
    {
        End=1;
        break;
    }

    ArrayToArray (x1,x,n);
}while(End==1);
delete [] x1;
*Max = Iter-1;
return Code;
}

int main()
{
do
{
    double A[5][5];
double B[5][5];
double K[5];
double H[5][5];
double L[9];
        int MaxIter=100;
    int n=4;
    int i=0,j=0,m=0;
    clrscr();
    srand(time(NULL));
    printf("na4al'naia matrix:\n");
    for(i=0;i<=n-1;i++)//zapolnenie i vivod na4al'noi matrix
        {
            for(j=0;j<=n-1;j++)
            {
            H[i][j]=rand()%10;
            A[i][j]=H[i][j];
            printf("%lf\t",H[i][j]);
            }
            printf("\n");
        }
    printf("\n");
L[0]=1;
L[1]=-A[0][0]-A[1][1]-A[2][2]-A[3][3];
L[2]=-A[2][3]*A[3][2]+A[2][2]*A[0][0]+A[3][3]*A[0][0]-A[3][1]*A[1][3]+A[1][1]*A[2][2]+A[1][1]*A[0][0]+A[2][2]*A[3][3]-A[2][1]*A[1][2]+A[1][1]*A[3][3]-A[1][0]*A[0][1]-A[3][0]*A[0][3]-A[2][0]*A[0][2];
L[3]=-A[1][1]*A[3][3]*A[0][0]+A[1][0]*A[0][1]*A[3][3]-A[1][1]*A[2][2]*A[3][3]-A[3][1]*A[1][2]*A[2][3]-A[2][0]*A[0][3]*A[3][2]-A[2][1]*A[1][3]*A[3][2]+A[1][0]*A[0][1]*A[2][2]+A[2][0]*A[0][2]*A[3][3]-A[1][0]*A[3][1]*A[0][3]+A[2][0]*A[1][1]*A[0][2]+A[3][0]*A[1][1]*A[0][3]+A[2][1]*A[1][2]*A[3][3]-A[1][0]*A[2][1]*A[0][2]+A[2][3]*A[3][2]*A[0][0]+A[2][1]*A[1][2]*A[0][0]-A[2][2]*A[3][3]*A[0][0]+A[3][1]*A[1][3]*A[2][2]-A[2][0]*A[0][1]*A[1][2]+A[3][1]*A[1][3]*A[0][0]-A[1][1]*A[2][2]*A[0][0]-A[3][0]*A[0][2]*A[2][3]+A[3][0]*A[0][3]*A[2][2]-A[3][0]*A[0][1]*A[1][3]+A[1][1]*A[2][3]*A[3][2];
L[4]=A[1][0]*A[0][1]*A[2][3]*A[3][2]+A[0][1]*A[2][1]*A[0][2]*A[3][3]-A[1][0]*A[2][1]*A[0][3]*A[3][2]-A[1][0]*A[0][1]*A[2][2]*A[3][3]-A[3][0]*A[2][1]*A[0][2]*A[1][3]+A[3][0]*A[2][1]*A[0][3]*A[1][2]-A[3][0]*A[1][1]*A[0][3]*A[2][2]-A[1][1]*A[2][3]*A[3][2]*A[0][0]-A[2][1]*A[1][2]*A[3][2]*A[0][0]+A[2][1]*A[1][3]*A[3][2]*A[0][0]+A[3][1]*A[1][2]*A[2][3]*A[0][0]-A[3][1]*A[1][3]*A[2][2]*A[0][0]+A[1][1]*A[2][2]*A[3][3]*A[0][0]-A[1][0]*A[3][1]*A[0][2]*A[2][3]+A[1][0]*A[3][1]*A[0][3]*A[2][2]-A[2][0]*A[3][1]*A[0][3]*A[1][2]+A[2][0]*A[1][1]*A[0][3]*A[3][2]+A[2][0]*A[3][1]*A[0][2]*A[1][3]+A[3][0]*A[1][1]*A[0][2]*A[2][3]+A[2][0]*A[0][1]*A[1][2]*A[3][3]-A[2][0]*A[0][1]*A[1][3]*A[3][2]-A[3][1]*A[1][1]*A[0][2]*A[3][3]-A[3][0]*A[0][1]*A[1][2]*A[2][3]+A[3][0]*A[0][1]*A[1][3]*A[2][2];
printf("%lf%lf%lf%lf%lf\n",L[0],L[1],L[2],L[3],L[4]);
j=0;
for(i=-100;i<100;i++)
{
    if((((i-1)*(i-1)*(i-1)*(i-1)*L[0]+L[1]*(i-1)*(i-1)*(i-1)+L[2]*(i-1)*(i-1)+L[3]*(i-1)+L[4]>0) && (i*i*i*i*L[0]+L[1]*i*i*i+L[2]*i*i+L[3]*i+L[4]<0))
        || (((i-1)*(i-1)*(i-1)*(i-1)*L[0]+L[1]*(i-1)*(i-1)*(i-1)+L[2]*(i-1)*(i-1)+L[3]*(i-1)+L[4]<0) && (i*i*i*i*L[0]+L[1]*i*i*i+L[2]*i*i+L[3]*i+L[4]>0)))
    {    K[j]=i;
        j++;
        if(j==5) break;
        printf("i%lf\n",i);
    }

}

for(m=j;m>0;m--)
{
int p=0;
double a[16];
for (j=0;j<4;j++)
    {for (i=0;i<4;i++)
        {a[p]=A[i][j];
        p++;
        }
    }
//reshenie sistemi yravnenii!
MaxIter=100;
double        b[]={    0,0,0,0},
        x[]={    0.1,0.1,0.1,0.1};
    printf("return code= %lf",SimpleIteration(a,b,x,n,0.000001,&MaxIter));
    printf("\n Maximum of iteration = %lf\n",MaxIter);
    for(i=0;i<n;i++)
        printf("%lf\n",x[i]);

}
delete []A;
delete []B;
delete []H;
}while(getch()!=27);
return 0;

}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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