Функция Лагранжа
Найти приближённое значение функции y=h(x) при заданном значении аргумента x с помощью интерполяционного многочлена Лагранжа. Функция y=h(x) задана таблично координатами точек (xi yi) ; yiq (i= 0,5). (б) Ту же задачу решить с помощью интерполяционного многочлена Ньютона.
#include <iostream>
#include <locale>
using namespace std;
double resh(double* mx, double* my, double x, int n)
{
double l = 0;
for (int k = 0; k < n; k++)
{
double ch = 1;
for (int i = 0; i < n; i++)
{
if (i != k)
ch *= (x - mx[i]);
}
double zm = 1;
for (int i = 0; i < n; i++)
{
if (i != k)
zm *= (mx[k] - mx[i]);
}
l += my[k] * ch / zm;
}
return l;
}
void arrays(double* m, int n)
{
for (int i = 0; i < n; i++)
{
cout << m[i] << " ";
}
cout << endl;
}
void razdelraz(double** my, double* x, double* y, int n)
{
for (int m = 1; m <= n; m++)
{
for (int k = 0; k <= n - m; k++)
{
if (m == 1)
my[k][m] = (y[k + 1] - y[k]) / (x[k + 1] - x[k]);
else
my[k][m] = (my[k + 1][m - 1] - my[k][m - 1]) / (x[k + m] - x[k]);
}
}
}
int main()
{
setlocale(LC_ALL, "rus");
double x = -0.8;
const int n = 6;
double mx[n] = { -1.2, -0.9, 0.7, 1.1, 1.7, 2.9};
double my[n] = { 3.38688, -1.50579, 16.99677, 25.85121, 28.70127, 0.55419 };
double y[n - 1][n];
cout << "При x = " << x << endl;
cout << "Массив x[i]:" << endl;
arrays(mx, n);
cout << "Массив y[i]:" << endl;
arrays(my, n);
cout << endl;
cout << "Ответ по Лагранжу: " << resh(mx, my, x, n);
razdelraz(reinterpret_cast<double**>(y), mx, my, n);
}
Ошибка Вызвано исключение по адресу 0x00007FF7462A2D3A в ConsoleApplication2.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFFFFFFFFFFF.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Вот это:
double y[n - 1][n];
никак не double**, к которому вы приводите.
Вот так
void razdelraz(double my[5][6], double* x, double* y, int n)
не сваливается (но что считает - верно ли - это я не смотрел).