Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Fortran -> MatLab 
:(
    Опции темы
Inekey
Дата 12.4.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Преподаватель дал задание перевести программу из Fortran'a в MatLab, но я ничерта не шарю в программировании. Могли бы вы проверить то, что я сделал и если где-нибудь есть ошибки, то помочь от них избавиться? Всю программу скидывать конечно не буду, потому что она огромная, а скину часть, которая у меня вызывает наибольшее сомнение.
Фортрановский вариант части программы лежит в прикреплённом файле (там 3 файла jpeg).
А вот это то, что у меня получилось после перевода этой же части программы в матлаб:

function [a]=asg4c(a,n,m,fsl,ir)
% complex a,am,r
% integer n,m,ir,l,i,j,k,nm,nx,ls,kn,ke,kl,ks
% integer n1,n2,n3,nj,nk,na,nz
% real r1,r2,cabs
% dimension a(1),ir(n) 
% ir = zeros(1,n);
nm=n+m;
if (m-n)
    l=nm^2/4+nm;
    ke=0;
else 
    l=n*(m+2)-1;
end
ls=0;
ks=ke;
kn=ks+1;
kl=(l-ke*(nm-ke))/nm;
nx=ls+1;
ke=ks+kl; 
if (n-ke)
    ke=n;
    kl=n-ks;
end
nz = nm-ks;
for k=kn:ke
    a(nx)=fsl(a(nx),n,m,k);
    if (ks~=0)
        nx=nx+nm;
    else
        n1=nx;
        n2=n-1;
        for i=1:ks
            j=ir(i); 
            nj=n2+j; 
            r=a(n1);  
            a(n1)=a(nj);
            a(nj)=r;  
            n1=n1+1;
        end
    end
        nk=n2+nm; 
        na=0;
        n3=n1-1; 
        for i=nx:n3
        r=a(i); 
            for  j=n1:nk 
            na=na+1;
            a(j)=a(j)-r*a(na);
            end
        end
end
n2=ls;
for k=kn:ke
    nx=n2+k;
    n3=n2+nm;
    r1=0.;
    nk=k;
    for nj=k:n
        r2=abs(a(nx));
        nx=nx+1;
        if (r1<r2)
            continue
        else
            r1=r2;
            nk=nj;
        end
    end
    ir(k)=nk;
    nj=n2+nk;
    am=1./a(nj);
    nx=n2+k;
    for na=nx:n3
        a(na)=am*a(na);
    end
    if (ks~=0)
        n1=ls+k;
    else
        n1=k-ks;
        na=nk-ks;
        i=(ks-1)*nz+n1;
        for j=n1:i:nz
            r=a(j);
            a(j)=a(na);
            a(na)=r;
            na=na+nz;
        end
    end
    na=ls+nk ;
    i=(kl-1)*nm+n1;
    for j=n1:i:nm
        r=a(j);
        a(j)=a(na);
        a(na)=r;
        na=na+nm;
    end
    n1=nx+1;
    if (ks~=0)
        nj=ls+k;
    else
        nj=k-ks;
        i=(ks-1)*nz+nj;
        for j=nj:i:nz
            r=a(j);
            na=j;
            for nk=n1:n3
                na=na+1;
                a(na)=a(na)-r*a(nk);
            end
        end
    end
    i=(kl-1)*nm+nj;
    for j=nj:i:nm
        if (j~=nx)
            continue
        else
            r=a(j);
            na=j;
            for nk=n1:n3
                na=na+1;    
                a(na)=a(na)-r*a(nk);
            end
        end
    end
n2=n2+nm;
end
n3=nm-ke;
n1=(ks-1)*n3+1;
if (ks~=0)
    n2=n1+kl*n3;
else
    nj=kl+1;
    nk=n3;
    for k=1:n1:n3
        n2=nj;
        for i=k:nk
            a(i)=a(n2);
            n2=n2+1;
        end
        nk=nk+n3;
        nj=nj+nz;
    end
end
n1=n1+n3;
nj=ls+ke+1;
nk=n1+n3-1;
for k=n1:n2:n3
    na=nj;
    for i=k:nk
        a(i)=a(na);
        na=na+1;
    end
    nk=nk+n3;
    nj=nj+nm;
end
ls=ke*n3;
if(ke==n)
    ks=ke;
else
    if (n~=1)
        return
    else
        n1=n-1;
        n3=n1*m;
        n2=n3-m+1;
        for k=1:n1
            kl=n-k;
            j=ir(kl);
            nj=(j-1)*m;
            for i=n2:n3
                nj=nj+1;
                r=a(i);
                a(i)=a(nj);
                a(nj)=r;
            end
            n3=n2-1;
            n2=n2-m;
        end
    end
end
end


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  ______ZIP___WinRAR.zip 283,19 Kb
PM MAIL   Вверх
chernyshov
Дата 13.4.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если бы пояснения написали,например, что эта программа выполняет, то  было бы попроще разобраться. Или переменные по очевидней называли быsmile
вроде так правильно...переменные только непонятно как объявляете.
главное на матрицу на матрицу правильно умножать, но у вас такого нету вроде.
еще можн find добавить вместо if, и циклов убрать. А так в матлаб вставьте да посмотрите что будет smile

Это сообщение отредактировал(а) chernyshov - 13.4.2010, 14:34
PM MAIL ICQ   Вверх
Inekey
Дата 13.4.2010, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо!!! Я попросил у вас помощи, потому что не был уверен в правильности переносов с учётом всх этих фортрановских меток.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




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


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

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