Кусочно-линейная аппроксимация. Метод Симпсона. Решение систем линейных уравнений

Страницы работы

Содержание работы


кусочно-линейная аппроксимация

!П/п создания файла данных (2), загрузки созданного ранее файла (1)

!или вычисление значения по загруженному файлу (любое другое)

function apkl(ki,xi,ka)

common/fap/xx(20),yy(20,20)

allocatable x(:),y(:,:)

SELECTCASE (ka)                             !выбор варианта работы п/п

CASE (2)                                             !создание файла

open(1,file='')                                    !имя создаваемого файла данных

print*,'Zadaitenk'; read*,nk           !количество функции

print*,'Zadaite ni'; read*,ni              !кол-во значений по x

allocate(x(ni),y(nk,ni))                   !динамическое выделение памяти

print*,'xi      yi1 ...  yik' 

do i=1,ni;read*,x(i),(y(k,i),k=1,nk); enddo  !ввод с клав.(<Tab>,<Enter>)

write(1,*)nk,ni                                  !запись в файл

write(1,*)(x(i),i=1,ni)                         !запись в файл значений x

do k=1,nk; write(1,*)(y(k,i),i=1,ni); enddo!запись в файл значений y

close(1)                                              !закрытие файла

pause 'file is created'

CASE (1)                                             !загрузка файла

xx=0.; yy=0.                                        !обнуление массивов в памяти

open(1,file='')                                     !открытие существующего файла

read(1,*)nk,ni                                    !чтение размерностей массивов

allocate(x(ni),y(nk,ni))                   !динамическое выделение памяти

read(1,*)(x(i),i=1,ni)                           !чтение значений x

do k=1,nk;read(1,*)(y(k,i),i=1,ni);enddo   !чтение значений y

do i=1,ni;xx(i)=x(i);do k=1,nk;yy(k,i)=y(k,i);enddo;enddo     !в память

close(1)                                            !закрытие файла

pause 'file is loaded'

CASEDEFAULT                                  !вычисление функции

i=1; yki=yy(ki,1)                                 

if(xi>xx(1))then

do while(xi>xx(i)); i=i+1; enddo

yki=yy(ki,i-1)+(yy(ki,i)-yy(ki,i-1))*(xi-xx(i-1))/(xx(i)-xx(i-1))  

endif

apkl=yki

END SELECT

return

end

метод наименьших квадратов

y = F(x, a1, a2, …, as),  (s < n)



Численное интегрирование

метод трапеций

!МЕТОД ТРАПЕЦИЙ

!a,b-пределы интегрирования, f-подинтегральная функция

!Погрешность из условия, что уменьшение шага вдвое приводит

!к изменению результата на 0,01%

function fint(a,b,f)

external f

eps=1.; n=10;

s2=ss(a,b,n,f)

do while(eps>.0001)

s1=s2; n=n*2.;

s2=ss(a,b,n,f)

if(s2==s1)then; eps=0.

else; eps=abs(2.*(s2-s1)/(s1+s2))

endif; enddo

fint=s2

return; end

function ss(a,b,n,f)

external f

s=0.; h=(b-a)/n; x=a

метод Симпсона

Решение систем линейных уравнений


1.  Ввод  и bi  (= 1, 2, …, n  и  = 1, 2, …, n) в массивы a(i, j) и b(i).

2. 


Прямой ход

= 1, 2, …, – 1 

+ 1, + 2, …, n

  + 1, + 2, …, + 1

Получаем


3.   Обратный ход


– 1, – 2, …, 2, 1

+ 1, + 2, …, n


Результат


Подпись: DO I=1,N
   DO J=1,N
!  ВВОД A(I,J)
   ENDDO
!ВВОД B(I)
ENDDO
N1=N-1
DO K=1,N1
   IF(ABS(A(K,K))<=0.)THEN
      K1=K+1
      DO M=K1,N
         IF(ABS(A(M,K))>0.)THEN
            DO L=1,N
               V=A(K,L); A(K,L)= A(M,L); A(M,L)=V
            ENDDO
         ENDIF
      ENDDO
   ENDIF
      G(K)=B(K)/A(K,K)
      K1=K+1
      DO I=K1,N
         B(I)= B(I)-A(I,K)*G(K)
         DO J1=K,N
            J=N-J1+K; C(K,J)= A(K,J)/A(K,K)
            A(I,J)= A(I,J)- A(I,K)*C(K,J)
         ENDDO
      ENDDO
ENDDO
M=N; X(M)=B(M)/A(M,M)
DO WHILE(M>1)
M=M-1; S=0
   DO L=M,N1
   S=S+C(M,L+1)*X(L+1)
   ENDDO
X(M)=G(M)-S
ENDDO
PRINT*,X
END

Похожие материалы

Информация о работе