Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка




Скачать 62.53 Kb.
НазваниеЗадание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка
Дата публикации04.10.2013
Размер62.53 Kb.
ТипОтчет по практике
vbibl.ru > Математика > Отчет по практике
Отчёт по практике по численным методам.
Задание:

  1. Используя схему Гаусса решить систему линейных уравнений 4-го порядка:


3,8x3 + 34,2 x2 + 6,3 x3 – 35,5 x4 = 2,8

8,3x3 – 6,6 x2 + 5,8 x3 + 32,2 x4 = – 4,1

6,4x3 – 8,5 x2 + 4,3 x3 + 8,8 x4 = 1,1

31,3x3 – 8,3 x2 + 34,4 x3 – 1,2 x4 =33,5



  1. Оценить погрешность решения, найденного с помощью метода Гаусса.

  2. Найти определитель матрицы системы.



Решение:
1.Метод Гаусса

Входные данные: система линейных уравнений m-го порядка Ax=b, где A — невырожденная матрица m-го порядка, b — вектор-столбец правых частей

Выходные данные: вектор х решений исх. уравнения.
1.1Теория

Пусть дана система уравнений:

a11x1+a12x2+a13x3+a14x4=b1,


a21x1+a22x2+a23x3+a24x4=b2,

a31x1+a32x2+a33x3+a34x4=b3,

a41x4+a42x2+a43x3+a44x4=b4.

Прямой ход метода Гаусса состоит в приведении матрица A=(aij) к верхнетреугольному виду с присоединённым столбцом свободных членов вектора b. Для этого строим расширенную матрицу (A|b) и последовательно выбираем элементы на диагонали матрицы А, которые назовём главными. Пусть akk – очередной главный элемент, не равный нулю. Чтобы во всех строках, начиная с k+1 до n ниже эелемента akk сделать нули, с каждым элементом aij (i>k) провернём такую процедуру:

akj*aik

aij - akk
Если предположить, что среди элементов главной диагонали могут быть нули, то прежде чем обращать в 0 элементы k-го столбца, начиная с главной диагонали и ниже надо найти максимальный по модулю элемент. После этого, если найденный элемент не диагональный, строки матрицы меняются и процесс продолжается.
Обратный ход метода Гаусса состоит в следующем. Пусть у нас имеется изменённая система вида

a’11x1+a’12x2+a’13x3+a’14x4=b’1,


a’22x2+a’23x3+a’24x4=b’2,

a’33x3+a’34x4=b’3,

a’44x4=b’4.

Чтобы найти неизвестные xi надо следовать такому алгоритму, начиная с последней строки:

b'4

x4=a’44

b’ 3 –a’34 x4

x3 = a33
. . . . . . .

b’i - a’inxn - a’in-1xn-1 -…- a’ii+1xi+1

xi = a’ii

^

Вычисление определителя с помощью метода Гаусса


После приведения матрицы к верхнетреугольному виду с помощью прямого хода метода Гаусса произведение диагональных элементов будет равно определителю этой матрицы. Если в процессе прямого хода нам пришлось переставлять строки из-за угрозы возникновения 0 на главной диагонали, определитель надо соответствующее число раз умножить на –1.
1.2Программа на C
float **a=(float**)malloc(n*sizeof(float*));

float *b=(float*)malloc(n*sizeof(float));

float *x=(float*)malloc(n*sizeof(float));

float h,p,s,det=1;

float **A=a;

for (int k=0; k
for (int i=k+1; i
{ h=A[i][k]/A[k][k];

for (int j=0; j
A[i][j]-=A[k][j]*h;

b[i]-=b[k]*h;

}
for (i=0; i
det*=A[i][i];
for (i=n-1; i>=0; i--)

{ for (int j=i+1; j
{ s+=x[j]*A[i][j];

}

if (det!=0)

x[i]=(b[i]-s)/A[i][i];

s=0;

}

2.Метод Ньютона

Входные данные: функция f(x),границы отрезка a и b, начальное приближение x0

Выходные данные: корень х или сообщение, что его нет

2.1Теория

Пусть известно, что x0 – начальное приближение искомого вещественного корня на отрезке [a,b]. Метод состоит в построении итерационной последовательности

f(xn)

xn+1=xn - f`(xn)
сходящейся к корню уравнения.

Для сходимости достаточно, чтобы функция f(x) было определена и дважды дифференцируема на [a, b], причём f(a)*f(b)<0, а производные f`(x) и f”(x) сохраняли знак на отрезке [a,b]. Тогда из начального приближения x0 из [a,b], удовлетворяющего неравенству f’(x0)*f”(x0)>0, можно построить последовательность, сходящуюся к единственному на [a,b] корню.

Критерием окончания процесса служит условие
2m1ε

|xn-xn-1|< M2 , где m1=min|f’(x)|, M2= max(|f”(x)|)
Если же оценить m1 и M2 сложно, то в качестве критерия окончания процесса можно взять условие

|f(xn)|< ε и |xn-xn-1|< ε или i>N , где i – число итераций, а N- максимальное число итераций

2.2Алгоритм

Пусть даны концы отрезка a и b и начальное приближение x0

Если f(a)*f(b)<0 и f’(x0)*f”(x0)>0, то

  1. Положить xn, равное начальному приближению x0

f(xn)

2.Т.к. f’(x0)не равно 0, то вычислить xn+1=xn - f`(xn)

3. Количество итераций=1

4. Пока |f(xn)|> ε или |xn-xn-1|> ε и i
4.1 xn=xn+1;

f(xn)

4.2 xn+1=xn - f`(xn)

4.3 увеличитиь число итераций на единицу

5. Вернуть xn+1
Иначе сообщить, что невозможно вычислить корень.
2.3Программа на C
double newton(float a, float b, float x0, int *L)

{ if (f(a)*f(b)<0 // если f(a)*f(b)<0

{ double xn=x0; // Положить xn, равное начальному приближению x0

double xn1=xn-f(xn)/df(xn); // вычислить xn1=xn –f(xn)/f’(xn)

int i=1; // Количество итераций=1

while ((abs(f(xn))>eps||abs(xn-xn1)>eps)&&i// Пока (|f(xn)|>ε или |xn-xn1|>ε) и i

{ xn=xn1; // xn=xn+1

xn1=xn-f(xn)/df(xn) // xn+1=xn - f(xn)/ f`(xn)

i++; // увеличитиь число итераций на единицу

}

if (abs(f(xn))eps) *L=0;

else

if (abs(xn-xn1)>eps) *L=1;

else if (i>=N) *L=2;

return xn1;

}

else

{printf ("Невозможно вычислить корень на [%fl,%fl]\n",a,b);

*L=3;

return 0;

} }
3. Вся программа на С

#include

#include

#include

#define eps 0.00001

#define N 100

/*Это наша функция f(x)*/

double f(float x)

{ return ((x-1)*(x-1)-exp(x)*0.5);

};
/*Первавя производная от f*/

double df(double x)

{

double dx=1;

double a;

while(dx>eps)

{ a=(f(x+dx)-f(x))/dx;

dx=dx/2;

}

return a;

}
/*Метод Ньютона*/

double newton(float a, float b, float x0, int *L)

{ if (f(a)*f(b)<0)

{ double xn=x0;

double xn1=xn-f(xn)/df(xn);

int i=1;

while ((abs(f(xn)>eps||abs(xn-xn1)>eps)&&(i
{ xn=xn1;

xn1=xn-f(xn)/df(xn);

i++;

}

if (abs(f(xn))eps) *L=0;

else

if (abs(xn-xn1)>eps) *L=1;

else if (i>=N) *L=2;

return xn1;

}

else

{printf ("Невозможно вычислить корень на [%fl,%fl]\n",a,b);

*L=3;

return 0;

} }
/*Метод половинного деления*/

double dixotomia(double a,double b)

{ double l=a; //Присвоили левой границе значение a

double r=b; //Присвоили правой границе значение b

double m=(r+l)/2;//Вычислили m, как середину отрезка [a,b]

do //выполнять

{ if (f(m)*f(l)<0)//1. Если значения f(m) и f(l) разного знака,

r=m; //то сделать m правой границей

else l=m; //2. Иначе сделать m левой границей

m=(l+r)/2; //3. Сделать m серединой отрезка

}

while(fabs(f(m))>eps&&fabs(f(m)-f(l))>eps&&fabs(f(r)-f(l))>eps);

// ...пока |f(m)|>eps и длины отрезков тоже >eps

return m; //Вернуть значение m

}

/*Основная программа*/

void main()

{ clrscr();

printf("Дана функция f(x)=(x-1)^2-(e^x)/2 \n Введите предполагаемый интервал решения:");

float a,b,x0;

double x;

scanf("%fl",&a);

scanf("%fl",&b);

printf("Вычисляю методом половинного деления:\n");

if (f(a)*f(b)>0)

printf ("Здесь корня нет. Запустите программу ещё\n");

else

{ x=dixotomia(a,b);

printf("Корень=%fl\n",x);

printf("f(%fl)=%fl\n",x,f(x));

}

printf ("Вычисляю методом Ньютона:\n Введите число, близкое к корню\n");

scanf("%fl",&x0);

int L=2;

x=newton(a,b,x0,&L);

if(L!=3)

{ printf ("Корень =%fl\n",x);

printf("f(%fl)=%fl\n",x,f(x));

}

else printf("Нет корня\n");
getch();
}
4. Примеры и ответы

ex

Корень уравнения f(x)=(x-1)2- 2 , найденный на отрезке [-0.2, 0.3] с помщью метода половинного деления с точностью ε =10-4:

0.213307
ex

Корень уравнения f(x)=(x-1)2- 2, найденный на отрезке [-0.2, 0.3] с помощью метода Ньютона с точностью ε =10-4 и начальным приближением x0=0.21:

0.213305

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

Похожие:

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка icon1. Решить методом Гаусса-Жордана следующие системы линейных уравнений
Овсянников А. Я. Сборник задач по линейной алгебре. Изд-во гу, Екатеринбург, 2001

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка iconМетодом Гаусса решить систему уравнений
Сумма двух чисел равна 28. Каковы должны быть эти числа, чтобы произведение квадрата одного из них было наибольшим?

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка iconУрок алгебры в 7 классе. Тема: Решение линейных уравнений
Образовательная цель: углубить, расширить и обобщить сведения о линейных уравнениях и выражениях, умения по решению уравнений

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка iconРобоча програма по дисципліні Чисельні методи
Численные методы решения систем линейных алгебраических уравнений. Правило Крамера, метод обращения матрицы, метод Гаусса

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка iconВид уравнений различных типов
Классификация линейных дифференциальных уравнений в частных производных 2-го порядка. Уравнения переноса, теплопроводности, волновые...

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка iconКонтрольные вопросы к экзамену по дисциплине «Математика» для студентов...
Системы линейных уравнений. Основные понятия и определения. Матричная запись системы линейных уравнений

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка iconДана система трех линейных уравнений с тремя неизвестными. Требуется...
Дана система трех линейных уравнений с тремя неизвестными. Требуется найти ее решение: а с помощью формул Крамера; б методом обратной...

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка iconВ данной расчетно-графической работе (далее ргр) требует
Пусть требуется решить систему нелинейных алгебраических или трансцендентных уравнений

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка iconМетод прогонки
...

Задание: Используя схему Гаусса решить систему линейных уравнений 4-го порядка iconЗадача подбора числовых коэффициентов
Введение71Решение систем линейных алгебраических уравнений121. 1Точные методы решения систем линейных алгебраических уравнений

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
vbibl.ru
Главная страница