Таким чином, алгоритм МНК включає три етапи:
1. Формування системи рівнянь.
2. Розв"язання системи лінійних алгебраїчних рівнянь та знаходження коефіцієнтів апроксимуючого полінома
3. Вибір "оптимального" (найкращого) степеня апроксимуючого полінома, за заданою припущеною похибкою метода .
При розробці алгоритма і програми формування системи рівнянь необхідно скористатись тим, що в матриці коефіцієнтів знаходяться суми
від до ;
від до :
3.4 Розробка алгоритмів розв'язання задачі
45
Рис.10 - схема алгоритму метода найменших квадратів для знаходження коефіцієнтів степеневого апроксимуючого полінома
В процесі розв'язку поставленої задачі оброблюються дані наступного типу:
Таблиця 3.1
Тип
Область значень
Фізичний формат
Integer
від -2147483648 до 2147483647
32 розряди, зі знаком
Real
від 2,9?10-39 до 1,7?1038
Точність 11-12 розрядів, розмір в байтах - 6
З метою збереження і обробки в пам'яті ЕОМ прийнята така система ідентифікаторів:
Таблиця 3.2
Назва параметра
Позначення
у формулі
у програмі
Масив даних крутного момента
с[i]
Масив даних питомої витрати паливаа
b[i]
Масив даних кількості обертів колінчастого валу
n[i]
Масив коефіцієнтів полінома
a[i]
Кількість коефіцієнтів
m
Інші
-
n1, e1, t, h, a1, b1, b2, eps, s, s0, i, j, k, k2, n2, i1, i3, i2, j1, j3, j2, m1, z1, f, e
3.6 Програмування задачі на мові програмування pascal 7.0
Program Aproksimatsia;
Uses CRT;
Type mas= array[1..25,1..25] of real;
mas1= array[1..25] of real;
Var
a: mas;
c,b,x,x1,y1: mas1;
n,n1,i1,i3,i2,j1,j3,j2,m1: integer;
e1: real;
t,h,a1,b1,b2,eps,s,s0:real;
i,j,k,n2:integer;
Procedure MNK(n1:integer;x1,y1:mas1;var a:mas);
k2:integer; z1,f,e : real;
BEGIN
for k2:=1 to n1 do
begin
z1:=x1[k2]; f:=y1[k2]; e:=1;
for i2:=1 to 2*m1+1 do
c[i2]:=c[i2]+e;
if i2<=m1+1 then b[i2]:=b[i2]+e*f;
e:=e*z1
end;
for i2:=1 to m1+1 do
for j2:=1 to m1+1 do
a[i2,j2]:=c[i2+j2-1];
END;
Procedure Gaus(n:integer;a:mas; b:mas1; var x:mas1);
i,j,k,l:integer; max,z,s,m : real;
writeln('**** Vixidna sistema rivnyan ****');
for i:=1 to n do
for j:=1 to n do write(' ',a[i,j]:5:2); write(' ',b[i]:5:2);
WRITELN;
for k:=1 to n-1 do
max:=abs(a[k,k]); l:=k;
for i:=k+1 to n do
if abs(a[i,k])>max then
begin l:=i; max:=abs(a[i,k]); end;
if l<>k then begin
for j:=k to n do
z:=a[l,j]; a[l,j]:=a[k,j]; a[k,j]:=z;
z:=b[l]; b[l]:=b[k]; b[k]:=z;
m:=a[i,k]/a[k,k];
for j:=k to n do a[i,j]:=a[i,j]-m*a[k,j];
b[i]:=b[i]-m*b[k];
a[i,k]:=0;
Writeln('*** trikytna sistema rivnayn ***');
writeln;
(*** xod nazad ***)
x[n]:=b[n]/a[n,n];
for i:=n-1 downto 1 do
s:=0;
for j:=i+1 to n do s:=s+x[j]*a[i,j];
x[i]:=(b[i]-s)/a[i,i];
Function q(t:real):real;
q:=x[1]+x[2]*t+x[3]*t*t+x[4]*t*t*t;
procedure simpson(a1,b1:real;n2:integer;var s:real);
var
hs:real;e,i:integer;
hs:=(b1-a1)/(2*n2);
s:=q(a1)+q(b1);
e:=1;
for i:=1 to 2*n2-1 do
s:=s+(3+e)*q(a1+i*hs);
e:=-e;
s:=s*hs/3;
Clrscr;
write('vedit kilkistto4ok tabli4noi fynksi N=');readln(n1);
{ctepin polimena} m1:=3;
writeln('vedit vixidni to4ki');
for i3:=1 to n1 do begin
read(x1[i3]); read(y1[i3]);
writeln('_________________________');
writeln('vihidni dani');
for i3:=1 to n1 do
write(' ',x1[i3]:5:2); write(' ',y1[i3]:5:2);
c[1]:=0; b[1]:=0;
MNK (n1,x1,y1,a);
for i2:=1 to m1+1 do n:=n+1;
Gaus(n,a,b,x);
writeln('*** vektor rozvyazky ***');
for i1:=1 to n do writeln('x[',i1,']=',x[i1]:7:3);
{kofisienti zapicyutsya a0+a1*x+a2*x^2+a3*x^3+...=const}
write(' q(t)'); write(' y');
e1:=e1+Sqr(q(x1[i3])-y1[i3]);
write(' ',q(x1[i3]):7:3); write(' ',y1[i3]:7:3);
writeln('poxibka aproksimasyi',e1:7:5);
write('введіть b2=');read(b2);
a1:=0; b1:=b2/10;
eps:=0.001;
repeat
k:=2;
simpson(a1,b1,k,s);
s0:=s; k:=k*2;
writeln('b1=',b1:5:2,' s=',s:5:2);
until (abs(s-s0)<=eps)or(k>500);
b1:=b1+b2/10;
until b1>b2;
END.
3.7 Відлагодження програми
Виправлення синтаксичних помилок на підставі повідомлень транслятора. Після написання програми транслятор знайшов ні помилку у 149-му рядку з повідомленням “Error 26: type mismatsh
I, j, k, n2: integer;
Після заміни real на integer, програма була запущена транслятором на виконання.
Таблиця 3.3 - Результати контролю правильності розв'язання задачі
Вихідні дані
Результати розрахунків
ППП
MathCad 2000
Програма на мові Turbo Pascal
400
800
1200
1600
2000
2400
2800
3200
3600
4000
4400
4800
5200
5600
36,3
45,5
54,6
56,1
52,5
66,6
67,9
71,3
65,5
66,4
63,3
55,9
52,6
51,3
353
342
3541
332
328
325
319
314
324
330
331
346
360
34.47-0.123x+0.028x2-0.0012x3
421.53-2.37x+0.452x2+0.072x3
31.71-0.12x+0.027x2-0.001x3
417.32-2.41x+0.457x2+0.07x3
ВИСНОВОК
В результаті виконаної роботи були розраховані основні параметри диференціала автомобіля, за результатами розрахунків ми дізнались параметри диференціала. Основна мета було Визначити які навантаження може витримати диференціал .
Склавши програму по розрахунку системи лінійних рівнянь методом Гауса розрахували коефіцієнти системи. Знайдені коефіцієнти х=-1,4, х=0,76, х=4,003, х=1,897, х=-2,080, Таким чином у нас є 5 чисел які заміняють невідомі.
Розрахували швидкісну характеристику автомобіля і склали таблицю яку можна роздрукувати. З таблиці видно що з більшання обертів і зростає навантаження.
ПЕРЕЛІК ПОСИЛАНЬ
Смирнов Г.А. Теория движения колесных машин. - М.: Машиностроение, 1981.- 271с.
Кошарний М.Ф. Основи механіки та енергетики автомобіля. - Київ: Вища школа, 1992. - 200с.
Turbo Pascal 7.0 for users. BHV, 1999. - 448p.
Т.А. Павловськая Pascal Издательство «Питер», 2003.-291с.
П.П. Овчинников, Ф.П. Яремчук, В.М. Михайленко Вища математика Частина-1 : Київ «Техніка»2003 -597с.
Савуляк В.І. Навчальний посібник
Кишеніна Н.В., Кишені В.О., «основи інформаційний технологій та програмування « частина-1 Вінниця 2003.
Страницы: 1, 2, 3, 4