Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Чисельні методи при вирішенні завдань

Реферат Чисельні методи при вирішенні завдань





елемента результату

* (result + (cols2 * j + i)) + =

* (m1 + (cols1 * j + k)) * (* (m2 + (cols2 * k + i)));

}

}

}


///////////////////////////////////////////////////////////////////////////////

// Обчислює мінор матриці m, отриманий викреслюванням елемента (Xel; yel)

// і покладає його в res

void MMinor (double * m, double * res, int siz, int xel, int yel)

{

int i, j, ki = 0, kj = 0;// Вихідний стан

for (j = 0; j <(siz - 1); j + +)// Проходимо по рядках матриці res

{

if (j == yel) kj = 1;// Пропустити поточну рядок

for (i = 0; i <(siz - 1); i + +)// Проходимо по стовпцях матриці res

{

if (i == xel) ki = 1;// Пропустити поточний стовпець

* (res + j * (siz - 1) + i) = * (m + (j + kj) * siz + (I + ki));

}

ki = 0;// Для наступної строчки (yel рядок вже пропустили)

}

}


///////////////////////////////////////////////////////////////////////////////

// Обчислення визначника матриці m розміром (dim * dim)

// (Рекурсивна функція)

double Determinant (double * m, int dim)

{

// Всі змінні - ОБОВ'ЯЗКОВО ЛОКАЛЬНІ!

double d = 0, k = 1;// Визначник і прапорець

int ki, kj, di, dj, i;// Коефіцієнти, індекси, зміщення

double * mm;// Нова матриця з викресленої рядком і стовпцем


if (dim <1) {printf (" NНеправільние аргументи"); abort ();}

if (dim == 1) return * m;// Якщо матриця 1х1

// Виділяємо пам'ять для мінору

if ((mm = malloc ((dim - 1) * (dim - 1) * sizeof (double))) == 0)

{printf (" nОшібка розподілу пам'яті n"); abort ();}

// Якщо матриця 2х2

if (dim == 2) d = ((* m) * (* (m + 3)) - (* (m + 2) * (* (m + 1))));

else// Розмір більше ніж 2

// Розкладаємо матрицю за нульовою рядку

for (i = 0; i

{

MMinor (m, mm, dim, i, 0);// Викреслимо стовпець і

// рядок в матріцк

d + = k * (* (m + i)) * Determinant (mm, (dim - 1));

k = 0 - k;

}

free (mm);// Звільнити пам'ять під мінор

return d;// Повернути значення визначника

}





///////////////////////////////////////////////////////////////////////////////

// Основна частина програмии

int main (void)

{

// Апроксимація функції для моделі y

double * F;// Спеціальна матриця F n * y

double * TF;// Транспонована F y * n

double * REV;// Зворотній матриця n * n

double * TMP;// Тимчасова матриця n * n

double * AC2;// Алгебраїчні доповнення (n-1) * (n-1)


double dt;// Значення визначника матриці

double flag;// Прапорець для зворотної матриці

int i, j;// Індекси


// Уявімо програму користувачеві :)

printf (" nПрограмма апроксимації функції методом найменших квадратів для "

"моделі n% s"

" nпо заданої таблиці експерименту."

" n n Розробник: студент групи ПС-146 "

" n Нечаєв Леонід Володимирович "

" n 25.02.2004"

, txtmodel);

printf (" nІзвестни результати спостережень:"

" n x1 x2 y");

for (i = 0; i

printf (" n% 10.4lg% 8.4lg% 8.4lg", * (xmp [i]), * (Xmp [i] + 1), ym [i]);

printf (" nНачінаем апроксимацію ... n");


// Потрібен порахувати am. Так:

// am - це матриця-стовпець шуканих коефіцієнтів. Представляє з себе

// am = (a1, a2, ..., aK) T висотою n, а вважається так:

// am = Inverse [Transpose [F]. F]. Transpose [F]. ym, де

// F - мартицей, складена спеціальним чином (дивись нижче):

// Виділяємо пам'яті відразу на всі матриці - F, TF, REV, TMP, AC2

# define memneed (((n * yr) + (yr * n) + (n * n) + (n * n) + ((n-1) * (N-1))) * eof (double))

if ((F = malloc (memneed)) == 0)

{

printf (" nОшібка розподілу пам'яті. Замініть компьютер "),

abort ();// Якщо не вдалося виділити для неї пам'ять

}

TF = F + (n * yr);

REV = TF + (yr * n);

TMP = REV + (n * n);

AC2 = TMP + (n * n);


// Заповнення значеннями матриці F

for (j = 0; j

{

for (i = 0; i

{

// Заповнюємо j-й рядок значеннями функцій fi

* (F + (j * n + i)) = f (xmp [j], (i + 1));

}

}


// Матриця F готова. Треба обчислити за формулою:

// am = Inverse [Transpose [F]. F]. Transpose [F]. ym значення

// коефіцієнтів a1, a2, a3, ...

// Транспоніруем F

for (j = 0; j

{

for (i = 0; i

{


Назад | сторінка 5 з 6 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Double Standards in Modern Politics
  • Реферат на тему: Double Entry Types of Balance Sheet
  • Реферат на тему: Double electric layer. Mechanism of formation and theory of structure
  • Реферат на тему: Математичне моделювання та чисельні методи в рішенні технічних завдань
  • Реферат на тему: Математичні методи у вирішенні економічних завдань