Программылинейной и квадратичной аппроксимации на PASCAL’е и MATHCAD’е



Линейная аппроксимация

Программа в PASCAL’е для линейной аппроксимации

Дана зависимость теплоемкости (Сp) от температуры (Т).  

Найти коэффициенты линейной аппроксимирующей функции a и b. 

Записать вид полученной линейной аппроксимирующей функции.

 Найти теплоемкость (Сp) при температуре Т = 550 К.

T,K 300 400 500 600 700 800 900 100
Cp,Дж.моль*К 6,97 7,01 7,12 7,28 7,45 7,62 7,79 7,93

 

 Обозначения в программе: n – количество известных экспериментальных значений; x – экспериментальные значения x (температура); y – экспериментальные значения y (теплоемкость);S1, S2, S3, S4 – суммы; a0, a1 – коэффициенты аппроксимирующей функции; x0 – температура, при которой надо найти теплоемкость; y0 – теплоемкость при заданной температуре.

ProgramLinApr;

constn=8;

x: array[1..n] ofreal=(300,400,500,600,700,800,900,1000);

y: array[1..n] ofreal=(6.97,7.01,7.12,7.28,7.45,7.62,7.79,7.93);

varS1, S2, S3, S4, a0, a1, x0, y0: real;

i: integer;

Begin

// Расчетсумм:

S1:=0; S2:=0; S3:=0; S4:=0;

fori:=1 tondo beginS1:=S1+x[i]; S2:=S2+y[i]; S3:=S3+sqr(x[i]);

S4:=S4+x[i]*y[i];

end;

// Расчет коэффициентов аппроксимирующей функции:

a0:=(S2*S3-S4*S1)/(n*S3-sqr(S1)); a1:=(n*S4-S1*S2)/(n*S3-S1*S1);

// Вывод на экран коэффициентов аппроксимирующей функции:

writeln('Коэффициенты аппроксимирующей функции:');

writeln('a0=', a0:1:3); writeln('a1=', a1:1:5);

// Вывод на экран аппроксимирующей функции:

writeln('Аппроксимирующая функция:Cp=', a0:1:3, '+',a1:1:5,'*T');

// Задаем температуру, при которой нужно посчитать теплоемкость:

x0:=550;

// Расчет теплоемкости при заданной температуре:

y0:=a0+a1*x0;

// Вывод на экран теплоемкости при заданной температуре:

writeln('При Т=', x0, ' К', ' Cp=', y0:1:2, ' Дж/моль*К');

end.

Окно вывода

Коэффициенты аппроксимирующей функции:

a0=6.445

a1=0.00146

Аппроксимирующаяфункция:Cp=6.445+0.00146*T

При Т=550 К Cp=7.25 Дж/моль*К

 

 

В MATHCAD’е линейная аппроксимация реализуется с помощью двух программ. Приведем первую из них, которых работает с действительными числами:

 

 

 

 

 

Здесь:line(x,y) – вектор из двух элементов (b,a)коэффициентов линейного полинома 

ax + b: b = line(x,y)0, a = line(x,y)1.

 

Программа в PASCAL’е для квадратичной аппроксимации

Длятаблично заданной функции построить аппроксимирующий полином 2-й степени:

 

N 1 2 3 4 5
ФИО 1 <Ф> <И> <О> 5

 

Здесь:<Ф> – количество букв в фамилии студента;

<И> – количество букв в имени студента;

<О> – количество букв в отчестве студента;

 

 

ProgramIVANOV_naim_kvadr_polinom_2;

Var

w,w0,w1,w2,a0,a1,a2,er,z:real;

i,p:integer;

x,y:array[1..5] ofreal;

c:array[0..4] ofreal;

d:array[0..4] ofreal;

functionstepen(u:real;k:integer):real;

varg:real;

m:integer;

Begin

g:=1;

form:=1 tok dog:=g*u;

stepen:=g;

end;

Begin

writeln(' СЖД-221 ИВАНОВМетоднаименьшихквадратов');

writeln('введите исходные данные:');

fori:=1 to5 do 

Begin

write('x[',i:1,']='); {1,2,3,4,5}

read(x[i]);

  write(' y[',i:1,']='); {1,<Ф>,<И>,<O>,5}

read(y[i]);     

end;

forp:=0 to4 do

Begin

c[p]:=0; d[p]:=0;

fori:=1 to5 do

Begin

z:=stepen(x[i],p);

c[p]:=c[p]+z;

d[p]:=d[p]+z*y[i];

end;

end;

w:=c[0]*c[2]*c[4]+2*c[1]*c[2]*c[3]-c[2]*c[2]*c[2]-c[1]*c[1]*c[4]-c[0]*c[3]*c[3];

w0:=d[0]*c[2]*c[4]+d[1]*c[2]*c[3]+d[2]*c[1]*c[3]-d[2]*c[2]*c[2]-d[1]*c[1]*c[4]-d[0]*c[3]*c[3];

w1:=d[0]*c[2]*c[3]+d[1]*c[0]*c[4]+d[2]*c[1]*c[2]-d[1]*c[2]*c[2]-d[0]*c[1]*c[4]-d[2]*c[0]*c[3];  

w2:=d[0]*c[1]*c[3]+d[1]*c[1]*c[2]+d[2]*c[0]*c[2]-d[0]*c[2]*c[2]-d[1]*c[0]*c[3]-d[2]*c[1]*c[1];

a0:=w0/w;

a1:=w1/w;

a2:=w2/w;

writeln('  Р Е З У Л Ь Т А Т Ы');

writeln('P(x)=',a0:5:2,' +',a1:5:2,'*x +',a2:5:2,'*x:2');

write('x= '); {табулирование полинома для построения графика}

fori:=1 to9 dowrite(0.5*(i+1):8:1);

writeln;

write('y= ');

fori:=1 to9 do

Begin

w:=0.5*(i+1);

z:=a0+a1*w+a2*w*w;

write(z:8:2);

end;

writeln;

er:=0; {вычислениеошибки}

fori:=1 to5 do

er:=er+(a0+a1*x[i]+a2*x[i]*x[i]-y[i])*(a0+a1*x[i]+a2*x[i]*x[i]-y[i]);

er:=sqrt(er/5);

writeln('СРЕДНЕКВАДРАТИЧЕСКАЯ ОШИБКА = ',er:7:5);

readln;

end.

Окно вывода

СЖД-221 ИВАНОВ Метод наименьших квадратов

введите исходные данные:

x[1]=1

y[1]=1

x[2]=2

y[2]=10

x[3]=3

y[3]=5

x[4]=4

y[4]=11

x[5]=5

y[5]=5

Р Е З У Л Ь Т А Т Ы

P(x)=-5.80 + 9.04*x +-1.36*x*x

x= 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

y= 1.89 4.71 6.86 8.33 9.11 9.23 8.66 7.41 5.49

СРЕДНЕКВАДРАТИЧЕСКАЯ ОШИБКА = 2.58125

 

В MATHCAD’е имеется программа полиномиального сглаживания данных (xi, yi) полиномом k-й степени А(х) = a + b·x + c·x2 + d·x3 + … + h·xk. При k = 1 полином является прямой линией, при k = 2 – параболой, при k = 3 – кубической параболой и т.д. Как правило, на практике применяется k< 5.

Для построения полинома k-й степени необходимо наличие, по крайней мере, k + 1 точек данных.

В программе сглаживание осуществляется комбинацией встроенной функции regressи полиномиальной интерполяции:

regress(x,y,k) – вектор коэффициентов для построения сглаживающего полинома;

interp(s,x,y,t) – результат полиномиальной интерполяции,

гдеs = regress(x,y,k);

х – вектор действительных данных аргумента, элементы которого расположены в порядке возрастания;

у – вектор действительных данных значений того же размера;

t – значение аргумента сглаживающего полинома.

 

 

 

Здесь на графике построены сглаживающие полиномы 1-й, 2-й и 6-й (интерполяционный) степени.

 

Задания

 

4.1. Построить линейную аппроксимацию таблично заданной функции:

а) вручную (см. пример на стр. 3 );

б) на Паскале (стр. 4);

в) в Маткаде (стр. 5).

 

1

xi 1,0 1,5 2,0 3,0 3,2
yi 8,1 9,0 11,2 13,8 14,7

 

2

xi 0,3 0,5 0,8 1,1 2,3
yi 1,4 0,7 –0,9 –2,3 –8,8

 

3

xi 0,5 0,8 1,2 1,3 4,0
yi 6,3 7,0 9,0 9,3 16,8

 

4

xi 1,2 1,7 3,3 4,1 4,3
yi –3,1 –5,6 –17,1 –23,1 –24,8

 

5

xi 0,7 0,9 1,3 1,6 2,3
yi 7,0 8,0 9,0 10,0 12,0

 

6

xi –3,4 –3,2 –3,1 –2,5 –1,5
yi –13,9 –12,9 –12,2 –9,1 –4,2

 

7

xi 2,1 2,3 3,1 3,8 4,5
yi –9,3 –7,2 –13,4 –16,1 –18,9

 

8

xi 1,1 2,1 3,4 4,3 4,9
yi –0,8 1,2 3,8 5,4 6,7

 

9

xi 10,1 11,5 13,6 16,2 17,5
yi –0,9 0,8 0,6 0,3 0,2

 

10

xi 0,1 0,3 0,5 1,2 2,1
yi 1,0 1,1 1,2 1,4 1,6

 

11

xi 3,2 4,1 5,3 6,7 7,3
yi 1,6 1,4 1,1 0,9 0,7

 

12

xi 1,1 1,3 1,7 1,9 2,2
yi 1,3 1,4 1,5 1,6 1,7

 

 

13

xi 2,1 2,5 3,0 3,1 3,3
yi 11,1 12,8 13,9 14,5 15,1

 

14

xi 0,7 0,9 1,2 1,3 1,7
yi 1,7 1,1 0,8 0,1 –0,5

 

15

xi –1,1 –0,5 0,2 0,4 0,7
yi 2,1 3,4 5,1 6,3 6,9

 

16

xi –1,2 –0,7 0,3 1,5 1,7
yi 5,7 5,1 0,1 0,2 –0,7

 

17

xi 2,1 3,0 3,2 3,9 4,1
yi 3,4 8,1 9,2 12,6 13,3

 

18

xi 1,7 1,9 2,3 2,5 3,5
yi 0,1 –0,6 –2,0 –2,7 –5,3

 

19

xi –0,1 0,2 0,5 0,9 1,2
yi –7,1 –6,2 –4,3 –2,7 –0,9

 

20

xi –1,2 –1,1 –0,9 –0,5 0,1
yi 8,7 8,1 7,8 6,4 4,5

 

21

xi 3,2 3,8 4,7 5,1 5,4
yi 10,5 12,3 14,9 16,4 16,9

 

22

xi 2,2 3,1 4,5 5,3 5,7
yi 0,1 –0,4 –1,2 –1,6 –1,8

 

23

xi 1,3 2,4 3,5 4,1 5,5
yi 3,4 4,7 5,5 6,5 7,8

 

24

xi 1,9 2,4 3,7 4,3 6,1
yi –3,4 –3,8 –4,7 –5,1 –6,4

 

25

xi –1,1 –0,7 –0,5 –0,1 1,2
yi 2,4 2,7 2,9 3,4 4,9

 

4.2. Прибыль предприятия за некоторый период деятельности по годам приведена в таблице (см. ниже).

Требуется (на Паскале и в Маткаде)(стр.5-7, 7-8):

а) составить квадратичную зависимость прибыли по годам деятельности предприятия;

б) определить ожидаемую прибыль для 8-го года деятельности.

 

1,13

Годt 1 2 3 4 5 6 7
Прибыльп 54 57 62 65 67 69 70

 

2,14

Годt 1 2 3 4 5 6 7
Прибыльп 55 56 63 66 68 70 71

 

3,15

Годt 1 2 3 4 5 6 7
Прибыльп 64 67 72 75 77 79 80

 

4,16

Годt 1 2 3 4 5 6 7
Прибыльп 65 66 73 76 78 80 81

 

5,17

Годt 1 2 3 4 5 6 7
Прибыльп 44 47 52 55 57 59 60

 

6,18

Годt 1 2 3 4 5 6 7
Прибыльп 45 46 53 56 58 60 61

 

7,19

Годt 1 2 3 4 5 6 7
Прибыльп 34 37 42 45 47 49 50

 

8,20

Годt 1 2 3 4 5 6 7
Прибыльп 35 36 43 46 48 50 51

 

9,21

Годt 1 2 3 4 5 6 7
Прибыльп 25 26 33 36 38 40 41

 

10,22

Годt 1 2 3 4 5 6 7
Прибыльп 24 27 32 35 37 39 40

 

11,23

Годt 1 2 3 4 5 6 7
Прибыльп 66 65 73 76 80 80 81

 

12,24

Годt 1 2 3 4 5 6 7
Прибыльп 47 44 55 52 57 59 60

 


Дата добавления: 2018-04-15; просмотров: 1533; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!