Мегаобучалка Главная | О нас | Обратная связь


http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/06/0604.htm



2016-01-05 367 Обсуждений (0)
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/06/0604.htm 0.00 из 5.00 0 оценок




Содержание

1. Введение ………………………………………………………….2

2. Метод ортогонализации ………………………………………...3

3. Заключение ……………………………………………………….9

4. Список литературы ……………………………………………..10

 

Введение

 

К решению систем линейных алгебраических уравнений приводятся многие задачи численного анализа.

Известное из курса высшей алгебры правило Крамера для решения систем линейных алгебраических уравнений практически невыгодно, так как требует слишком большого количества арифметических операций и записей. Поэтому было предложено много различных способов, более пригодных для практики.

Используемые практически методы решения систем линейных алгебраических уравнений можно разделить на две большие группы: так называемые точные методы и методы последовательных приближений. Точные методы характеризуются тем, что с их помощью принципиально возможно, проделав конечное число операций, получить точные значения неизвестных. При этом, конечно, предполагается, что коэффициенты и правые части системы известны точно, а все вычисления производятся без округлений. Чаще всего они осуществляются в два этапа. На первом этапе преобразуют систему к тому или иному простому виду. На втором этапе решают упрощенную систему и получают значения неизвестных.

Методы последовательных приближений характеризуются тем, что с самого начала задаются какими-то приближенными значениями неизвестных. Из этих приближенных значений тем или иным способом получают новые «улучшенные» приближенные значения. С новыми приближенными значениями поступают точно также и т.д. При выполнении определенных условий можно придти, вообще говоря, после бесконечного числа шагов. Рассмотрим метод ортогонализации .

 

 


Метод ортогонализации

Пусть дана система

 

Решение:

Представим матрицу А данной системы в виде произведения матрицы R с ортогональными столбцами на определитель матрицы с единичной диагональю.

A=RT=

Полагаем:

= =

Имеем:

 

(1)

 

По формуле (1) находим:

Где

И

Контроль

 

 

 

Контроль:

.

Таким образом,

 

где - диагональная матрица и b=

По формуле (2) имеем

Для матрицы и её обратной матрицы получаем такие значения:

Далее,

Наконец, обычным приёмом подставляем:

В итоге получим :

Следовательно ,

 

Точные значения корней

 

 

 


 

Http://valera.asf.ru/cpp/scpp/cppd_baseoperators.htm

Http://citforum.ru/programming/cpp_ref/ref_8.shtml

Http://cpp.com.ru/shildt_spr_po_c/06/0604.html

http://natalia.appmat.ru/c&c++/lezione5.php#l5_valore_ind

Http://www.cyberforum.ru/cpp-beginners/thread192873.html

Http://citforum.ru/programming/cpp_march/cpp_017.shtml

http://www.cyberguru.ru/cpp/

http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/06/0604.htm

Метод ортогонализации в программе С++

//---------------------------------------------------------------------------

//#include <vcl\condefs.h>

#include <math.h>

#include <stdio.h> заголовочный файл для организации функций ввода-

#include <stdlib.h> вывода.

#include <string.h>

//#pragma hdrstop

//---------------------------------------------------------------------------

//USERES("Pr_Ort_1.res");

//---------------------------------------------------------------------------

/*

float Scl(int N,float A[],float B[]) (

{

int i,j;

float S=0; //- заголовочный файл стандартной библиотеки языка программирования С, который содержит макрос, определяющий различные ограничения и параметры типов с плавающей точкой.

for(i=0;i<N;i++)S+=A[i]*B[i];

return S;

}

*/

int main(int argc, char **argv) // задаёт массив ? передает управление операционной системе

{

int i,j,k,N=3;

float S=0,rab,res,

T[9][9], Tob[9][9], D[9][9],Dob[9][9],Dt[9][9], R[9][9], Rtr[9][9], Rb[9], AT[4][4],X[9],

/*

A[4][4]={

{ 1 , 2 , 3 , 4 },

{ 4 , 3 , 2 , 1 },

{ 1 , 3 , 2 , 4 },

{ 2 , 4 , 1 , 3 }

 

},

B[9]={30,20,29,25},

*/

A[3][3]={

{0.4, 0.3,-0.2},

{0.6,-0.5, 0.3},

{0.3, 0.2, 0.5}

},

B[9]={2,2.5,11}

 

;

//

// **************************

//

// {r11 r12 r13} {1 t12 t13}

// A = R*T = {r21 r22 r23} {0 1 t23}

// {r31 r32 r33} {0 0 1}

//

// **************************

//

for(i=0;i<N;i++) for(j=0;j<N;j++) T[i][j]=R[i][j]=0; - оператор, вводящий имя в программе

for(i=0;i<N;i++)

{

Printf ("\nA");

for(j=0;j<N;j++)printf("%5.2f",A[i][j]);

}

printf("\n");

//

//*************************************

/*

for(i=1;i<N;i++)

for(j=0;j<i;j++)

{

S=A[j][i]; A[j][i]=A[i][j];A[i][j]=S; // The Inverse Matrix -// обратная матрица

printf("\n%5.4f",A[i][j]);

}

for(i=0;i<N;i++)

{

printf("\n");

for(j=0;j<N;j++)printf("%5.0f",A[i][j]);

}

getchar();

*/

//********************************

//

for(i=0;i<N;i++)

for(j=0;j<N;j++)

{

S=0;if (i==j) S=1.0;

T[i][j]=S;

}

 

 

for(i=0;i<N;i++)

{

if (i==0)for(j=0;j<N;j++) {R[j][0]=A[j][0]; printf(" R %5.2f",R[j][0]);}

getchar();

if (i>0)

{

for(j=0;j<N;j++)

{

for(k=0;k<i;k++)

{

R[j][i]-=T[k][i]*R[j][k];

printf("\n I %3d K %3d R[j][i] %7.4f T[k][i] %7.4f R[j][k] %7.4f",

i,k,R[j][i],T[k][i],R[j][k]);

}

}

printf("\n\n");

for(j=0;j<N;j++)

{

printf("\n R %5.2f",R[j][i]);

R[j][i]+=A[j][i]; //R[j][i]=A[j][i]+R[j][i];

printf("A[j][i] %7.4f R %7.4f",A[j][i],R[j][i]);}

}

//********************************

for(k=0;k<N;k++)

{

printf("\n\n");

for(j=0;j<N;j++)printf(" %7.4f",R[k][j]);

}

getchar();

//***********************

rab=0;

for(k=0;k<N;k++) rab+=R[k][i]*R[k][i];

printf("\n rab %7.4f",rab);

for(j=i+1;j<N;j++)

{

S=0;

for(k=0;k<N;k++) S+=R[k][i]*A[k][j];

printf(" S %5.2f",S);

T[i][j]=S/rab;

}

 

}

printf("\n\n********** End building R **********\n");

for(k=0;k<N;k++)

{

printf("\n\n");

for(j=0;j<N;j++)printf(" %7.4f",R[k][j]);

}

printf("\n\n********** End building T **********\n");

for(i=0;i<N;i++)

{

printf("\n\n ");

 

for(j=0;j<N;j++)printf(" %7.4f",T[i][j]);

}

printf("\n\n********** End building R and T **********");

printf("\n\n Now You have to go to building x=T-1D-1R'B \n");

 

for(i=0;i<N;i++)

for(j=0;j<N;j++) Tob[i][j]=T[i][j];// 1 step

 

for(i=0;i<N-1;i++)

for(j=i+1;j<N;j++) Tob[i][j]=-Tob[i][j];// 2 step

 

for(i=0;i<N;i++)

{

printf("\n\n Tob ");

for(j=0;j<N;j++)printf(" %7.4f",Tob[i][j]);// 3 step

}

 

printf("\n\n********** End building R and T **********");

 

printf("\n\n Now You have to go to building ------------x=D-1 R'B \n");

 

for(j=0;j<N;j++)for(k=0;k<N;k++) Rtr[j][k]=R[j][k];

 

for(j=0;j<N;j++)

 

//printf("\n\n R ========= ");

for(k=0;k<N;k++)

 

 

for(k=0;k<N;k++)for(j=0;j<k;j++)

{

//printf("\n k %2d j %2d",k,j);

rab=Rtr[k][j];

//printf("\n i %7.4f",rab);

Rtr[k][j]=Rtr[j][k];

//printf(" rjk %7.4f",Rtr[j][k]);

Rtr[j][k]=rab;

}

 

for(j=0;j<N;j++)

{

printf("\n\n Rtr ");

for(k=0;k<N;k++) printf(" %7.4f",Rtr[j][k]);

}

for(j=0;j<N;j++)

{

S=0;

for(k=0;k<N;k++) S+=Rtr[j][k]*B[k];

Rb[k]=S;

printf(" \n R'*b %7.4f",S);

}

 

printf("\n\n Now You have to go to building x=D-1 \n"); // функция,выводящая на экран значение своего первого параметра (то, что в ковычках)

for(i=0;i<N;i++)

for(j=0;j<N;j++)

{

S=0;

for(k=0;k<N;k++)S+=Rtr[i][k]*R[k][j];

D[i][j]=S;

}

 

 

for(i=0;i<N;i++)

{

printf("\n\n D ");

for(j=0;j<N;j++) printf(" %7.4f",D[i][j])

}

for(i=0;i<N;i++)

for(j=0;j<N;j++) Dob[i][j]=D[i][j];// 1 step

 

for(i=0;i<N;i++)

for(j=i;j<N;j++) Dob[i][j]=-Dob[i][j];// 2 step

 

for(i=0;i<N;i++)

{

printf("\n\n Dob ");

for(j=0;j<N;j++)printf(" %7.4f",Dob[i][j]);// 3 step

}

printf("\n\n Now You have to go to building x \n");

 

 

for(i=0;i<N;i++)

{

printf("\n\n Tob ");

for(k=0;k<N;k++) printf(" %7.4f",Tob[i][k]);

}

 

for(j=0;j<N;j++)

{

S=0;

for(k=0;k<N;k++) S+=Tob[i][k]*Dob[k][j];

Dt[i][j]=S;

printf(" \n Dt %7.4f",S);

}

 

 

for(i=0;i<N;i++)

{

printf("\n ");

for(j=0;j<N;j++)

{

S=0;

{

S+=Tob[i][j]*Dob[i][j];

}

Dt[i][j]=S;

printf("\n Dt %7.4f", S);

}

}

 

 

printf("\n ************* The End ***********\n ");

 

return 0; -. завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом.

 

}

 

: - служит для описания идентификатора как метки

; - Пустой оператор используется для помещения метки непосредственно перед } составного оператора или того, чтобы снабдить такие операторы, как while, пустым телом.

 

//---------------------------------------------------------------------------

 

 

Заключение

 

В данной работе были рассмотрены метод ортогонализации , а также представлена программа на языке программирования С++, реализующая метод ортогонализации на ЭВМ, и ее результаты работы.

 

 


Список литературы

 

1. Березин И.С. и Жидков Н.П. Методы вычислений. т. 1. М.: «Наука», 1965. 633c.

2. Воеводин В.В. Численные методы алгебры (теория и алгоритмы). М.: «Наука», 1966.

3. Подбельский В.В. и Фомин С.С. Программирование на языке Си. М.: «Финансы и статистика», 2000. 599 с.

4. Калиткин Н.Н. Численные методы. М.: «Наука», 1978. 512 с.

 



2016-01-05 367 Обсуждений (0)
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/06/0604.htm 0.00 из 5.00 0 оценок









Обсуждение в статье: http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/06/0604.htm

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (367)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)