Автор: Пользователь скрыл имя, 01 Апреля 2013 в 10:12, контрольная работа
Как известно, многие уравнения и системы уравнений не имеют аналитических решений.
В первую очередь это относится к большинству трансцендентных уравнений. Доказано также, что нельзя построить формулу, по которой можно было бы решить произвольное алгебраическое уравнение степени выше четвертой. Кроме того, в некоторых случаях уравнение содержит коэффициенты, известные лишь приблизительно, и, следовательно, сама задача о точном определении корней уравнения теряет смысл.
Шаг изменения аргумента - это разность между i-м элементом этой таблицы с i-1 элементом.
В большинстве случаев функция задается в равноотстоящих узлах так, что , где – шаг интерполяции.
В этом случае применяется полином Ньютона, использующий конечные разности. Конечной разностью первого порядка в точке называется разность , где , . Используя конечные разности первого порядка можно получить конечные разности второго порядка .
Определив коэффициенты получим:
Для программной реализации расчета коэффициентов полинома ньютона используют следующие формулы:
Расчет
Program zad_Nuton;
Uses crt;
Type tv=array [1..6] of real; ttv=array [1..5] of real;
ttv2=array [1..4] of real; ttv3=array[1..3] of real;
ttv4=array[1..2] of real;
Var ix, iy:tv; p1:ttv; p2:ttv2; p3, xc,yc:ttv3;
iy4:ttv4; iy5, s,h,t:real; i,j,c:integer; z:array[1..3] of integer;
Begin
clrscr;
for i:=1 to 6 do begin
write('Введите значение х[',i,']= ');
readln(ix[i]);
end;
writeln(' ');
for i:=1 to 6 do begin
write('Введите значение y[',i,']=');
readln(iy[i]);
end;
for i:=1 to 5 do begin
s:=iy[i+1]-iy[i];
p1 [i]:=s;
end;
for i:=1 to 4 do begin
s:=p1[i+1]-p1[i];
p2[i]:=s;
end;
for i:=1 to 3 do
p3[i]:=p2[i+1]-p2[i];
for i:=1 to 2 do
iy4[i]:=p3[i+1]-p3[i];
iy5:=iy4[2]-iy4[1];
h:=ix[2]-ix[1];
writeln(' ');
for i:=1 to 3 do begin
write('Введите значение для x[',i,']= ');
readln(xc[i]);
end;
for i:=1 to 3 do begin
for j:=2 to 6 do begin
end;
for i:=1 to 3 do begin
j:=6-z[i];
t:=(xc[i]-ix[z[i]])/h;
yc[i]:=iy[z[i]]+t*p1[z[i]];
if j>=2 then yc[i]:=yc[i]+(t*(t-1)*p2[z[i]]
if j>=3 then yc[i]:=yc[i]+(t*(t-1)*(t-2)* p3[z[i]])/6;
if j>=4 then yc[i]:=yc[i]+(t*(t-1)*(t-2)*(
if j=5 then yc[i]:=yc[i]+(t*(t-1)*(t-2)*(
end;
clrscr;
writeln(' ');
writeln ('----------------------------
writeln(' ');
for i:=1 to 3 do begin
writeln('Для х[',i,']= ',xc[i]:2:4,' значение у[',i,']= ',yc[i]:2:5);
end;
writeln(' ');
writeln (' ИСХОДНЫЕ ДАННЫЕ:');
writeln(' ');
for i:=1 to 6 do begin
writeln('Для х[',i,']= ',ix[i]:2:3,' значение у[',i,']= ',iy[i]:2:5);
end;
end.
Результат работы программы.
------------------------------
Для х[1]= 1.3832 значение у[1]= 5.26791
Для х[2]= 1.3926 значение у[2]= 5.55226
Для х[3]= 1.3862 значение у[3]= 5.35555
ИСХОДНЫЕ ДАННЫЕ:
Для х[1]= 1.375 значение у[1]= 5.04192
Для х[2]= 1.380 значение у[2]= 5.17744
Для х[3]= 1.385 значение у[3]= 5.32016
Для х[4]= 1.390 значение у[4]= 5.47069
Для х[5]= 1.395 значение у[5]= 5.62968
Для х[6]= 1.400 значение у[6]= 5.79788
Задание 4
Аппроксимировать многочленом второй степени по методу наименьших квадратов функцию, заданную таблицей:
Теоретические сведения
Если таблично заданная функция
у = f{x) отображает результаты эксперимента,
то не-
целесообразно, что бы аппроксимирующая
функция ф(х) в точности повторяла значения fj,
содержащие погрешности измерений.
Так же следует поступить, если
задано и требуется учесть слишком большое
количест-
во узлов интерполяции.
В рассматриваемых случаях может
быть применен эмпирический подбор аппроксими-
рующих функций, который состоит в выборе
аппроксимирующей функции и последующем
определении коэффициентов согласно некоторому
критерию. Например, может быть вы-
бран многочлен фт(х) степени т<п.
Для определения коэффициентов aj этого многочлена
может быть применен критерий,
состоящий в минимизации функции Е = F(eo
,ei ,...,em), где ei - отклонения аппроксимирую-
щей функции от заданных значений
ei = (p(Xj)-fi.
Расчет
Количество узлов таблицы = количеству ее строк = 20.
Количество строк в таблице
= 20. В каждой строке X рассчитывается, как
номер строки
умножить на 0.1, т.е. например для первой
строки Х = 1*0.1=0.1, для второй
строки X = 2 *
0.1 = 0.2 для третьей - X = 3 * 0.1 = 0.3 и т.д. И вводим
соответствующее значение У в данной
строке.
Program zad_Approximacia;
Uses crt;
Type
tv=array[1..20] of real;
tv2=array [1..7] of real;
Var x,y,x2,x3,x4,xy,xy2:tv; w:tv2;
j:integer; m,d,dx,dy,dz,xi,yi,zi:real;
Begin
clrscr;
for j:=1 to 20 do begin
write('Введите значение y[',j,']=');
readln(m);
x[j]:=j*0.1;
y[j]:=m;
x2[j]:=x[j]*x[j];
x3[j]:=x2[j]*x[j];
x4[j]:=x3[j]*x[j];
xy[j]:=x[j]*y[j];
xy2[j]:=x2[j]*y[j];
end;
for j:=1 to 20 do begin
w[1]:=w[1]+x[j];
w[2]:=w[2]+x2[j];
w[3]:=w[3]+x3[j];
w[4]:=w[4]+x4[j];
w[5]:=w[5]+y[j];
w[6]:=w[6]+xy[j];
w[7]:=w[7]+xy2[j];
end;
{clrscr;}
d:=w[2]*(w[2]*w[2]-w[3]*w[1])-
d:=d+20*(w[3]*w[3]-w[4]*w[2]);
dx:=w[5]*(w[2]*w[2]-w[3]*w[1])
dx:=dx+20*(w[6]*w[3]-w[7]*w[2]
dy:=w[2]*(w[6]*w[2]-w[7]*w[1])
dy:=dy+20*(w[3]*w[7]-w[4]*w[6]
dz:=w[2]*(w[2]*w[7]-w[3]*w[6])
dz:=dz+w[5]*(w[3]*w[3]-w[4]*w[
if d=0 then begin
writeln('Делитель системы=0');
end;
xi:=dx/d;
yi:=dy/d;
zi:=dz/d;
writeln(' ');
writeln('---------------------
writeln(' ');
writeln (' Функция: ',xi:1:3,'x2+',yi:1:3,'x+',zi:
end.
Результат работы программы.
Введите значение y[1]=2.05
Введите значение y[2]=1.94
Введите значение y[3]=1.92
Введите значение y[4]=1.87
Введите значение y[5]=1.77
Введите значение y[6]=1.88
Введите значение y[7]=1.71
Введите значение y[8]=1.60
Введите значение y[9]=1.56
Введите значение y[10]=1.40
Введите значение y[11]=1.50
Введите значение y[12]=1.26
Введите значение y[13]=0.99
Введите значение y[14]=0.97
Введите значение y[15]=0.91
Введите значение y[16]=0.71
Введите значение y[17]=0.43
Введите значение y[18]=0.54
Введите значение y[19]=0.19
Введите значение y[20]=0.01
------------------------------
Функция: -0.429x2+-0.132x+2.015
Задание 5
5.1 Вычисление интеграла
по формуле трапеций
с тремя десятичными знаками
Заменим подынтегральную функцию на отрезке полиномом первой степени :
,
где и – значение и конечная разность первого порядка функции в точке .
В этом случае приближенное значение интеграла определяется площадью трапеции:
.
На основе этой формулы можно получить приближенную формулу для вычисления интеграла:
Погрешность метода трапеций на одном интервале определяется по формуле:
.
Если интегрирование производится путем разбиения отрезка на несколько интервалов, то общую погрешность можно посчитать путем суммирования частичных погрешностей:
.
Метод трапеций имеет второй порядок точности.
program integ;
uses crt;
type t=array[0..8] of real;
var x,s,a,b,h,unteg: real; i,j: integer;
y: t;
begin
writeln('vvedite a b h ');
readln(a,b,h);
x:=a;
y[0]:=1/sqrt(2*x*x+1);
repeat x:=x+h;
for i:=1 to 8 do
y[i]:=1/sqrt(2*x*x+1);
s:=0;
for j:=1 to 7 do begin
s:=s+y[j] ;
writeln('s=',s:5:3);
end
until x>=b;
unteg:=h*(y[0]+y[8]+2*s);
writeln ('unteg= ',unteg:5:3);
readkey
end.
s=2.867
s=3.345
s=0.451
s=0.902
s=1.353
s=1.803
s=2.254
s=2.705
s=3.156
s=0.426
s=0.853
s=1.279
s=1.706
s=2.132
s=2.558
s=2.985
s=0.404
s=0.808
s=1.213
s=1.617
s=2.021
s=2.425
s=2.830
unteg= 0.673
5.2 Вычисление интеграла по формуле Симпсона
Вычислить интеграл по формуле Симпсона при п — 8; оценить погрешность результата,
составив таблицу конечных разностей.
Заменим подынтегральную функцию интерполяционным полиномом второй степени – параболой, проходящей через узлы, тогда:
,
где – погрешность вычисления интеграла.
Для записи полинома воспользуемся интерполяционной формулой для трех узлов :
,
где
– значение и конечные разности первого
и второго порядков функции
в точке
.
В пределах отрезка , на котором подынтегральная функция аппроксимирована полиномом, получим формулу Симпсона:
.
На основе этой формулы можно получить приближенную формулу для вычисления интеграла:
Погрешность метода трапеций на одном интервале определяется по формуле:
.
Если интегрирование производится путем разбиения отрезка на несколько интервалов, то общую погрешность можно посчитать путем суммирования частичных погрешностей:
.
Метод трапеций имеет четвертый порядок точности.
Для оценки погрешности метода Симпсона можно составить таблицу конечных разностей и применить формулу:
Program zad_Simpson;
Uses crt;
Type t=array [0..8] of real;
Var x,y:t; n:integer; p,lg,lg2,pg:real;
Begin
clrscr;
p:=1.2;
for n:=0 to 8 do begin
y[n]:=0.43429*ln(p+2)/p;
x[n]:=p;
p:=p+1.35;
end;
writeln('---------------------
writeln(' ');
for n:=0 to 8 do begin
writeln('Для Х',n,'=',x[n]:1:2,' Y',n,'=',y[n]:1:5);
end;
lg:=1.35/3*(y[0]+y[8]+4*(y[1]+
lg2:=1.35*2/3*(y[0]+y[8]+4*(y[
pg:=(lg-lg2)/15;
writeln(' ');
writeln('Результат вычислений= ',lg:1:7);
writeln(' ');
writeln('Точность вычисления (удвоение шага)= ',pg:1:11);
end.
-----------------------------
Для Х0=1.20 Y0=0.42095
Для Х1=2.55 Y1=0.25804
Для Х2=3.90 Y2=0.19765
Для Х3=5.25 Y3=0.16387
Для Х4=6.60 Y4=0.14159
Для Х5=7.95 Y5=0.12551
Для Х6=9.30 Y6=0.11323
Для Х7=10.65 Y7=0.10348
Для Х8=12.00 Y8=0.09551
Результат вычислений= 1.8112664
Точность вычисления (удвоение шага)= -0.00183992680
Задание 6
Оптимизация функции
Метод золотого сечения позволяет решить задачу минимизации унимодальной на отрезке функции с требуемой точностью при меньшем количестве вычислений значений функции.
Определение. Золотым сечением отрезка называется деление отрезка на две неравные части так, чтобы отношение длины всего отрезка к длине большей части равнялось отношению длины большей части к длине меньшей части отрезка.
Нетрудно проверить, что золотое сечение отрезка производится двумя точками и , расположенными симметрично относительно середины отрезка, причем .
Точки золотого сечения обладают следующими свойствами, которые используются в методе золотого сечения:
1. Точка производит золотое сечение отрезка , так как и . Аналогично точка производит золотое сечение отрезка .
2. Для точек золотого сечения выполняется равенство:
.
Алгоритм метода золотого сечения заключается в следующем. Положим . На отрезке возьмем точки , производящие золотое сечение, и вычислим значения . Далее, если , то примем . Если же , то . Здесь важно то, что внутри нового отрезка уже содержится точка , которая производит золотое сечение этого отрезка. Причем, в этой точке уже известно значение функции . Длина отрезка
.
Опишем –й шаг алгоритма. Пусть уже определены точки , вычислены значения , найден отрезок такой, что , и известна точка , производящее золотое сечение отрезка , . Тогда в качестве следующей точки возьмем точку , которая в силу свойства (2) также производит золотое сечение отрезка . Вычислим значение . Пусть для определенности (случай рассматривается аналогично). Если , то полагаем ; если же , то . Новый отрезок таков, что , , точка производит золотое сечение отрезка и .
Информация о работе Контрольная работа по «Вычислительной математике»