DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Лабораторна робота № 3 з курсу “Чисельні методи”: Задача апроксимації

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Комп’ютерних та інформаційних технологій
Кафедра:
Програмного забезпечення (ПЗ)

Інформація про роботу

Рік:
2008
Тип роботи:
Лабораторна робота
Предмет:
Чисельні методи
Група:
КН-3
Коротко про документ

Про що ця робота

У роботі розв'язується задача апроксимації функції за допомогою побудови полінома Лагранжа та побудови графіку отриманого многочлена. Наведено реалізацію алгоритму мовою C++ у середовищі C++Builder.

У роботі розглядаються

  • Чисельні методи
  • Апроксимація функцій
  • Поліном Лагранжа
  • Програмування на C++
  • Обчислювальна математика

Зміст і розділи

  1. Тема
  2. Мета
  3. Варіанти завдань
  4. Програмний продукт
  5. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Не вказано

Ключові поняття

апроксимаціяполіном Лагранжатаблично задана функціячисельні методиC++Builderфакторіалмасивграфік функціїпохибкаобчислення

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет Львівська політехніка Кафедра ПЗ До лабораторної роботи № 3 З курсу “Чисельні методи” На тему: “ Задача апроксимації”. Львів – 2008 Тема: Задача апроксимації.. Мета: Оволодіти засобами розв’язування задач апрксимації.  Побудувати поліном Лагранжа для функції, заданої таблично та побудувати графік отриманого многочлена. Варіанти завдань: Таблиця 1 Номер точки Значення функції згідно номера варіанта    1  2  3  4  5  6  7   2  5.06e-10  4.51e-10  5.87e-10  4.75e-10  4.57e-10  4.52e-10  3.51e-10   Таблиця 2 Номер точки Значення функції згідно номера варіанта    8  9  10  11  12  13  14   2  2.10e-06  2.59e-06  2.11e-06  2.13e-06  2.19e-06  2.14e-06  1.13e-06    В процесі розроблення лабораторної роботи було розроблено наступний програмний продукт:  //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Main.h" #include <math.h> #include <string.h> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TMainForm *MainForm; //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- double *TMainForm::LagrangeGetPolinom() { int i, j, k, h; double *Result = new double[COUNT]; double *Temp = new double[COUNT - 1]; double ResMul, ResAdd, Denom; int *Counter; for(i = 0; i < COUNT; i++) { Result[i] = 0.0; } for(h = 0; h < COUNT; h++) { Denom = 1.0; for(i = 0, j = 0; i < COUNT; i++) { if(i != h) { Temp[j] = -DATA_X[i]; Denom *= DATA_X[h] - DATA_X[i]; j++; } } for(i = 0; i < COUNT; i++) { ResAdd = 0.0; Counter = new int[i]; for(j = 0; j < i; j++) { Counter[j] = j; } for(j = 0; j < Factorial(COUNT - 1) / (Factorial(i) * Factorial(COUNT - 1 - i)); j++) { ResMul = 1.0; for(k = 0; k < i; k++) { ResMul *= Temp[Counter[k]]; } if(i != 0) { IncCounter(Counter, i, COUNT - 1, i - 1); } ResAdd += ResMul; } if(Denom != 0) { Result[i] += ResAdd / Denom * DATA_Y[h]; } delete[]Counter; } } return Result; } void TMainForm::LagrangeDrawGraph(const double *Data) { int i; double min, max, d; min = max = DATA_X[0]; for(i = 1; i < COUNT; i++) { if(DATA_X[i] < min) { min = DATA_X[i]; } if(DATA_X[i] > max) { max = DATA_X[i]; } } for(d = min; d <= max; d+=(max-min) / 100) { Chart->Series[0]->AddXY(d, Polynom(d, Data), "", TColor(5)); } } __int64 Factorial(__int64 x) { if(x < 2) { return 1; } return x * Factorial(x - 1); } int IncCounter(int *Counter, int Size, int Capacity, int Number) { Counter[Number]++; if(Counter[Number] > Capacity - Size + Number) { if(Number != 0) { Counter[Number] = IncCounter(Counter, Size, Capacity, Number - 1); Counter[Number]++; } else { Counter[Number] = Capacity - Size + Number; } } return Counter[Number]; } double Polynom(double x, const double *Data) { int i; double result = 0.0; for(i = 0; i < COUNT; i++) { result += pow(x, COUNT - 1 - i) * Data[i]; } return result; } void __fastcall TMainForm::FormCreate(TObject *Sender) { double *Data = LagrangeGetPolinom(); AnsiString str; LagrangeDrawGraph(Data); for(int i = 0; i < COUNT; i++) { str += " "; if(Data[i] > 0 && i != 0) { str += "+"; } str += FloatToStrF(Data[i], ffFixed, 3, 3) + "x^" + (COUNT - 1 - i); } str += " =y"; RichEdit->Clear(); RichEdit->Text = str; delete[]Data; } //---------------------------------------------------------------------------  Висновок: На цих лабораторній роботі я оволодів засобами розв’язування задач апроксимації.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!