| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Fortran > [General] Fortran -> MatLab |
| Автор: Inekey 12.4.2010, 12:42 |
| Преподаватель дал задание перевести программу из 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 |
| Автор: chernyshov 13.4.2010, 14:31 |
| Если бы пояснения написали,например, что эта программа выполняет, то было бы попроще разобраться. Или переменные по очевидней называли бы вроде так правильно...переменные только непонятно как объявляете. главное на матрицу на матрицу правильно умножать, но у вас такого нету вроде. еще можн find добавить вместо if, и циклов убрать. А так в матлаб вставьте да посмотрите что будет |
| Автор: Inekey 13.4.2010, 19:54 |
| Спасибо!!! Я попросил у вас помощи, потому что не был уверен в правильности переносов с учётом всх этих фортрановских меток. |