Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.docx
Скачиваний:
103
Добавлен:
27.03.2015
Размер:
421.24 Кб
Скачать

1.4 Реализация мнк в Excel’е

По значениям вычисляеми формируем матрицу А и вектор В. Используя оператор превращения получаем обратную матрицу . Умножаемна В и получаем С.

Результаты операций приведены далее

1894,461

0

142

182,096

А=

0

142

0

В=

0

142

0

15

3,4

0,001818

0

-0,01721

0,272466

=

0

0,007042

0

С=

0

-0,01721

0

0,229551

-2,35268

Из С берутся и получается уравнение y = 0,272466x2 - 2,35268, аналогичноеполученному ранее.

1.5 Реализация мнк в MathCad

Для начала необходимо создать 2 текстовых документа и назвать их, например «x.txt» и «y.txt». Затем необходимо заполнить каждый из них координатами Х или У в. Далее в MathCad считываются данные командой READPRN. И только тогда есть возможность построить матрицу А и В по формуле 1.3 и найти С.

После этого необходимо построить график, Для этого вводим следующие присвоения

И уже можно строить график функций х,у (точки) и z,w(z) (линия).

Рис. 1.3

1.6 Реализация мнк в Fortran

Для построения данного графика в Fortran необходимо иметь 3 файла в проекте: 1) Головная программа (.f90) 2) SIMQ.FOR 3) Plot2m.f90

Головная программа

Program MNI

integer,parameter::n=15 – задаем как целое число точек.

real::x(n), y(n), a(3,3), b(3), x1(n), y1(n) - задаем вещественные массивы

open(1,file='x.txt'); read(1,*)x; print*,x; close(1);print* - открываем файл x.txt

open(1,file='y.txt'); read(1,*)y; print*,y; close(1) - открываем файл y.txt

a(1,:)=(/sum(x**4),sum(x**3),sum(x**2)/)

a(2,:)=(/sum(x**3),sum(x**2),sum(x)/) - вычисляем матрицу А по формуле 1.3

a(3,:)=(/sum(x**2),sum(x),1.*n/)

b=(/sum((x**2)*y),sum(x*y),sum(y)/) - вычисляем вектор B по формуле 1.3

call simq(a,b,3,ier) - вызываем программу simq

x0=minval(x); xk=maxval(x); h=(xk-x0)/(n-1) - задаем значению x0 минимальное значение x, значению xk задаем максимальное значение x.

do i=1,n; x1(i)=x0+(i-1)*h; y1(i)=b(1)*x1(i)**2+b(2)*x1(i)+b(3) - задаем шаг от 0 до n. x1 вычисляем как x предыдущее плюс шаг, а y1 - как квадратичную функцию.

enddo

call cls(5) - вызываем программу cls.

call plot2m(20,20,400,400,dble(x),dble(y),dble(x1),dble(y1),n) - вызываем программу plot2m для построения графика.

End

Plot2m

$real:8

subroutine plot2m (jl,il,jr,ir,x,y,x1,y1,n)

use dflib

type (wxycoord)wxy

type (xycoord)xy

real::x(n),Y(n),x1(n),y1(n)

ii=setcolor(0)

ii=rectangle(2,jl,il,jr,ir) - Рамка

callsetviewport(jl,il,jr,ir) -Начальные координаты переносятся в рамку

xl=min(minval(x),minval(x1))- Наибольшие и наименьшие значения

xp=max(maxval(x),maxval(x1))

yl=max(maxval(y),maxval(y1))

ym=min(minval(y),minval(y1))

dlx=xp-xl; dly=yl-ym

xl=xl-0.1*dlx

xp=xp+0.1*dlx

yl=yl+0.2*dly

ym=ym-0.2*dly

ii=setwindow(.true.,xl,yl,xp,ym)

ic=16

ii=setcolor(ic)

irr=3 - Радиус окружности вокруг точки

do i=1,n

ii=setpixel_w(x(i),y(i))

call moveto_w(x(i),y(i),wxy)

CALL GETCURRENTPOSITION (xy)

ii=ellipse(3,xy.xcoord-irr,xy.ycoord-irr,xy.xcoord+irr,xy.ycoord+irr)

end do

call moveto_w(x1(1),y1(1),wxy) - Соединяет точки линиями

ii=setcolor(ic)

do i=2,n

ii=lineto_w(x1(i),y1(i))

end do

call moveto_w(xl,0d0,wxy) !Ось Х

ii=lineto_w(xp,0d0)

call moveto_w(0d0,yl,wxy) !Ось Y

ii=lineto_w(0d0,ym)

end

subroutine CLS (IS)

use dflib

type (qwinfo) qw

open (IS,file="user")

qw.type=2;ii=setwsizeqq (QWIN$FRAMEWINDOW,qw)

ii=setwsizeqq (is,qw)

ii=setbkcolor(15)

call clearscreen (0)

ii=settextcolor (0)

ii=setcolor(0)

end

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]