![]() |
|
|
![]()
|
|
| 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 )
______ZIP___WinRAR.zip 283,19 Kb |
|||
|
||||
| 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. |