С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 14
1

Интерполяция по новой формуле

11.04.2017, 14:37. Показов 1050. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,помогите пожалуйста, есть программа - интерполяция по формуле лагранжа, все работает, только формула нужна иная для интерполяции - интерполяция по эрмиту, вот формула
Интерполяция по новой формуле
, где Wn(x)=(x-x1)(x-x2).....(x-xn). Кусок который нужно изменить выделен жирным шрифтом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <fstream>
#include <vector>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
using namespace std;
 
vector<double> X,Y;                                                             // Векторы для исходных данных
 
[B]double Lagrange(double arg)                                                     // Интерполирование по Лагранжу
{
double P,Res=0;
for(int i=0;i<X.size();i++)
 {
 P=1;
 for(int j=0;j<X.size();j++)
  if(i!=j) P*=(arg-X[j])/(X[i]-X[j]);
 Res+=P*Y[i];
 }
return Res;
}[/B]
 
void __fastcall TForm1::Button1Click(TObject *Sender)                           // Обработка
{
if(!OpenDialog1->Execute()) return;                                             // Файл не выбран - завершить
Chart1->Series[0]->Clear();                                                     // Инициализация всех параметров
Chart1->Series[1]->Clear();
Edit2->Clear();
Edit3->Clear();
Button2->Enabled=true;
Edit1->Text=OpenDialog1->FileName;
double x,y;
ifstream F(OpenDialog1->FileName.c_str());                                      // Открытие файла
while(!F.eof())                                                                 // Чтение файла до конца
 {
 F>>x>>y;
 if(F.fail())                                                                   // Если Некорректные данные
  {
  Chart1->Series[1]->Clear();                                                   // то очистить график
  Beep();                                                       
  ShowMessage("Ошибка файла данных!");                                          // вывести сообщение
  F.close();                                                                    // закрыть файл
  return;                                                                       // и выйти
  }
 X.push_back(x);                                                                // Сохранение данных в векторы
 Y.push_back(y);
 Chart1->Series[1]->AddXY(x,y);                                                 // Вывод точки на график
 }
F.close();                                                                      // закрытие файла
Button2->Enabled=true;
Application->ProcessMessages();                                                 // Немедленное отображение точек
x=Chart1->BottomAxis->Minimum;                                                  // Построение графика интерполяции
y=(Chart1->BottomAxis->Maximum-x)/Screen->Width;                                // Число точек графика - ширина экрана (максимально возможное)
for(int i=0;i<Screen->Width;i++)
 {
 Chart1->Series[0]->AddXY(x,Lagrange(x));                                       // Вычисление и добавление очередной точки
 x+=y;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)                           // Интерполяция в произвольной точке
{
double x;
Edit3->Clear();
try
 {x=StrToFloat(Edit2->Text);}                                                   // Ввод аргумента
catch(...)                                                                      // Ошибка - вывод сообщение
 {
 Beep();
 ShowMessage("Некорректный аргумент!");
 Edit2->SetFocus();
 return;
 }
Edit3->Text=FloatToStr(Lagrange(x));                                            // Расчёт и вывод результата
}
//--------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2017, 14:37
Ответы с готовыми решениями:

интерполяция по формуле лагранжа
Здравствуйте! Помогите, пожалуйста, написать программу. Мне нужно написать программу интерполяции...

интерполяция по формуле в стирлинга
Здравствуйте, у меня не получается создать программу с динамическим вводом данных. Вот программа со...

Не получается интерполяция по формуле Бесселя
Входные данные (x, y): (1 , 6); (2,7); (3,9); (4,4); (5,5) Составляю таблицу: Вот...

Найти элементы новой матрицы, каждый из которой определяются по формуле
Дана единичная матрица Е {{1, 1, 1, 1}, _ {1, 1, 1, 1},...

0
11.04.2017, 14:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2017, 14:37
Помогаю со студенческими работами здесь

Интерполяция заданной функции второй формулой Ньютона (обратная интерполяция)
Программа накапливает ошибку, да и первые значения совсем уже &quot;приближённые&quot;. Явно что-то упустил....

Интерполяция полиномом Лагранжа и кусочная интерполяция
столкнулась с такой проблемой: написала интерполяцию Лагранжа x=; y=2*cos(x); function...

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

После добавления в БД новой строчки надо распечатать или просмотреть отчёт с новой строчкой по клику на кнопку
Вопрос такой: У меня Отчёт сделан с помощью rave ADOQuery1 подключен к RvDataSetConnection1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru