![]() |
|
![]() ![]() ![]() |
|
Inekey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 ) ![]() |
|||
|
||||
chernyshov |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 12.4.2010 Репутация: нет Всего: нет |
Если бы пояснения написали,например, что эта программа выполняет, то было бы попроще разобраться. Или переменные по очевидней называли бы
![]() вроде так правильно...переменные только непонятно как объявляете. главное на матрицу на матрицу правильно умножать, но у вас такого нету вроде. еще можн find добавить вместо if, и циклов убрать. А так в матлаб вставьте да посмотрите что будет ![]() Это сообщение отредактировал(а) chernyshov - 13.4.2010, 14:34 |
|||
|
||||
Inekey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.1.2010 Репутация: нет Всего: нет |
Спасибо!!! Я попросил у вас помощи, потому что не был уверен в правильности переносов с учётом всх этих фортрановских меток.
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Fortran | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |