Автор работы: Пользователь скрыл имя, 29 Января 2014 в 13:59, лабораторная работа
Цель работы: научиться решать нелинейные уравнения методом простых итераций, методом Ньютона и модифицированным методом Ньютона с помощью ЭВМ. Доказать графическим и аналитическим методами существование единственного корня нелинейного уравнения. Построить рабочие формулы метода простых итераций, метода Ньютона и модифицированного метода Ньютона, реализующие процесс поиска корня нелинейного уравнения (1) на указанном отрезке. Составить программу (программы) на любом языке программирования, реализующие построенные итерационные процессы.
1. Изучить метод простых итераций, метод Ньютона и модифицированный метод Ньютона для решения нелинейных уравнений.
2. На конкретном примере усвоить порядок решения нелинейных уравнений с помощью ЭВМ указанными методами.
3. Составить программу (программы) на любом языке программирования и с ее помощью решить уравнение с точностью и . Сделать вывод о скорости сходимости всех трех методов.
4. Изменить и снова решить задачу. Сделать выводы о: скорости сходимости рассматриваемых методов; влиянии точности на скорость сходимости; влиянии выбора начального приближения в методе простых итераций на скорость сходимости.
5. Составить отчет о проделанной работе.
,
Тогда искомый многочлен Лагранжа второго порядка будет иметь вид:
, где .
I интерполяционная формула Ньютона второго порядка по заданной системе точек строится в виде:
.
Здесь величины , называются табличными разностями первого и второго порядков соответственно, .
II интерполяционная формула Ньютона второго порядка по заданной системе точек строится в виде:
.
Здесь величины и вводятся аналогично случаю, рассмотренному выше, .
Аппроксимационная формула
Будем строить функцию в виде многочлена второго порядка:
Согласно алгоритму метода наименьших квадратов, для построения многочлена второй степени необходимо вычислить следующие суммы:
,
и решить систему линейных алгебраических уравнений 3-го порядка вида
(1)
относительно неизвестных коэффициентов . В данном случае система (1) будет выглядеть так
Для нахождения неизвестных а0,а1,а2 вычислим:
Значения искомых
.
Искомый многочлен второго порядка будет иметь вид:
.
Таблица результатов
Графики
Рис.1 Исходный график
Рис.2 Интерполяционная формула Лагранжа
Рис.3 I интерполяционная формула Ньютона
Рис.4 II интерполяционная формула Ньютона
Рис.5 Аппроксимационный полинома
Выводы
Искомые полиномы на отрезке
практически совпадают с
Листинг программы
#include <stdio.h> #include <math.h> main() { int n=0; float h=0.5; float x0=0,x1=0.5,x2=1,y0,y1,y2; float a0,a1,a2; float x=0.0,f,L2,N1,N2,P2;
float delta_y0,delta2_y0; float t,t2; float delta_y1;
float s_x,s2_x,s3_x,s4_x; float s_y,s_xy,s_x2y;
float delta1,delta2,delta3,delta;
y0=14*exp(5+cos(x0/10)); y1=14*exp(5+cos(x1/10)); y2=14*exp(5+cos(x2/10)); printf("y0=%.4f y1=%.4f y2=%.4f\n",y0,y1,y2);
a0=y0/((x0-x1)*(x0-x2)); a1=y1/((x1-x0)*(x1-x2)); a2=y2/((x2-x0)*(x2-x1)); printf("a0=%.4f a1=%.4f a2=%.4f\n",a0,a1,a2);
delta_y0=y1-y0; delta2_y0=(y2-y1)-delta_y0; delta_y1=y2-y1;
s_x = x0+x1+x2; s2_x= x0*x0+x1*x1+x2*x2; s3_x= x0*x0*x0+x1*x1*x1+x2*x2*x2; s4_x= x0*x0*x0*x0+x1*x1*x1*x1+x2*x2*
s_y=y0+y1+y2; s_xy=y0*x0+y1*x1+y2*x2; s_x2y=y0*x0*x0+y1*x1*x1+y2*x2* printf("s_x=%.4f s2_x=%.4f s3_x=%.4f s4_x=%.4f\n",s_x,s2_x,s3_x,s4_ printf("s_y=%.4f s_xy=%.4f s_x2y=%.4f\n",s_y,s_xy,s_x2y);
delta=3*s2_x*s4_x + s_x*s3_x*s2_x + s_x*s3_x*s2_x - (s2_x*s2_x*s2_x + s_x*s_x*s4_x + 3*s3_x*s3_x); delta1= s_y*s2_x*s4_x + s_xy*s3_x*s2_x + s_x*s3_x*s_x2y - (s_x2y*s2_x*s2_x + s_xy*s_x*s4_x + s_y*s3_x*s3_x); delta2= 3*s_xy*s4_x + s_x*s_x2y*s2_x + s_y*s3_x*s2_x - (s2_x*s_xy*s2_x + s_x*s_y*s4_x + s_x2y*s3_x*3); delta3= 3*s2_x*s_x2y + s_x*s3_x*s_y + s_x*s_xy*s2_x - (s2_x*s2_x*s_y + s_x*s_x*s_x2y + 3*s3_x*s_xy); printf("delta=%.4f delta1=%.4f delta2=%.4f delta3=%.4f\n",delta,delta1, x=0; while(x<=1.0) { f=14*exp(5+cos(x/10));
L2=a0*(x-x1)*(x-x2)+a1*(x-x0)*
t=(x-x0)/h; N1 = y0 + t*delta_y0 + (t*(t-1)/2)*delta2_y0;
t2=(x-x2)/h; N2 = y2 + t2*delta_y1 + (t2*(t2+1)/2)*delta2_y0;
P2 = (delta3/delta)*x*x + (delta2/delta)*x+ (delta1/delta);
printf("\nx=%.2f f=%.4f L2=%.4f (f-L2)=%.4f
N1=%.4f (f-N1)=%.4f N2=%.4f (f-N2)=%.4f P2=%.4f (f-P2)=%.4f\n",x,f,L2,fabs(L2- x=x+h; }
getch(); return 0; } |
Информация о работе Итерационные методы решения нелинейных уравнений