Смекни!
smekni.com

Автоматизація розрахунків легкового автомобілю (стр. 5 из 6)

– максимальний крутний момент двигуна

, Н·м;

– питома витрата палива

, г/кВт·год;

– кількість обертів двигуна при максимальній потужності

;

– кількість обертів двигуна при максимальному моменті

;

– табличні дані з графіків зовнішньої швидкісної характеристики.

3.3 Формалізація задачі

Для вирішення даної задачі необхідно за даними графіків зовнішньої швидкісної характеристики двигуна J6R створити математичні моделі його механічних характеристик.

Апроксимування функцій будемо виконувати за допомогою методу найменших квадратів.

Функція

на відрізку [а, в] задана системою N точок
,
, … ,
.

Потрібно так підібрати коефіцієнти

полінома

щоб сума квадратів відхилення полінома від заданих значень функції

була мінімальною.

Використовуючи умову екстремуму функції кількох змінних:

можна скласти систему лінійних алгебраїчних рівнянь, відносно коефіцієнтів

.

Якщо в якості апроксимуючого полінома вибрати степеневий поліном виду

та

то система рівнянь буде мати вигляд (3.15).


Ця система рівнянь лінійна відносно

коефіцієнта полінома
і розв'язується будь-яким відомим методом (методом Гаусса з послідовним включенням, методом Гаусса за схемою Халецького і т.п.).

Таким чином, алгоритм МНК включає три етапи:

1. Формування системи рівнянь.

2. Розв"язання системи лінійних алгебраїчних рівнянь та знаходження коефіцієнтів апроксимуючого полінома

3. Вибір "оптимального" (найкращого) степеня

апроксимуючого полінома, за заданою припущеною похибкою метода
.

При розробці алгоритма і програми формування системи рівнянь необхідно скористатись тим, що в матриці коефіцієнтів знаходяться суми

від

до
;

від

до
:

3.4Розробка алгоритмів розв’язання задачі


Рис.10 – схема алгоритму метода найменших квадратів для знаходження коефіцієнтів степеневого апроксимуючого полінома

3.5 Вибір типу та структури оброблюваних даних

В процесі розв’язку поставленої задачі оброблюються дані наступного типу:


Таблиця 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);

Var

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

begin

c[i2]:=c[i2]+e;

if i2<=m1+1 then b[i2]:=b[i2]+e*f;

e:=e*z1

end;

end;

for i2:=1 to m1+1 do

begin

for j2:=1 to m1+1 do

a[i2,j2]:=c[i2+j2-1];

end;

END;

Procedure Gaus(n:integer;a:mas; b:mas1; var x:mas1);

Var

i,j,k,l:integer; max,z,s,m : real;

BEGIN

writeln('**** Vixidna sistema rivnyan ****');

for i:=1 to n do

begin

for j:=1 to n do write(' ',a[i,j]:5:2); write(' ',b[i]:5:2);

WRITELN;

end;

WRITELN;

for k:=1 to n-1 do

begin

max:=abs(a[k,k]); l:=k;

for i:=k+1 to n do

begin

if abs(a[i,k])>max then

begin l:=i; max:=abs(a[i,k]); end;

end;

if l<>k then begin

for j:=k to n do

begin

z:=a[l,j]; a[l,j]:=a[k,j]; a[k,j]:=z;

end;

z:=b[l]; b[l]:=b[k]; b[k]:=z;

end;

for i:=k+1 to n do

begin

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;

end;


end;

Writeln('*** trikytna sistema rivnayn ***');

for i:=1 to n do

begin

for j:=1 to n do write(' ',a[i,j]:5:2); write(' ',b[i]:5:2);

WRITELN;

end;

writeln;

(*** xod nazad ***)

x[n]:=b[n]/a[n,n];

for i:=n-1 downto 1 do

begin

s:=0;

for j:=i+1 to n do s:=s+x[j]*a[i,j];

x[i]:=(b[i]-s)/a[i,i];

end;

END;

Function q(t:real):real;

BEGIN

q:=x[1]+x[2]*t+x[3]*t*t+x[4]*t*t*t;

END;

procedure simpson(a1,b1:real;n2:integer;var s:real);

var

hs:real;e,i:integer;

begin

hs:=(b1-a1)/(2*n2);

s:=q(a1)+q(b1);

e:=1;

for i:=1 to 2*n2-1 do

begin

s:=s+(3+e)*q(a1+i*hs);

e:=-e;

end;

s:=s*hs/3;

end;

BEGIN

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;

end;

writeln('_________________________');

writeln('vihidni dani');

for i3:=1 to n1 do

begin

write(' ',x1[i3]:5:2); write(' ',y1[i3]:5:2);

WRITELN;

end;

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 ***');

writeln;

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');

writeln;

for i3:=1 to n1 do

begin

e1:=e1+Sqr(q(x1[i3])-y1[i3]);

write(' ',q(x1[i3]):7:3); write(' ',y1[i3]:7:3);

writeln;

end;

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);

repeat

s0:=s; k:=k*2;

simpson(a1,b1,k,s);

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
400800120016002000240028003200360040004400480052005600 36,345,554,656,152,566,667,971,365,566,463,355,952,651,3 3533423541332328325 319314324330331346353360 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

ВИСНОВОК