Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 0
Регистрация: 05.01.2025
Сообщений: 12

Функция интерполяции по входящим точкам

16.04.2025, 23:11. Показов 1738. Ответов 3

Студворк — интернет-сервис помощи студентам
Нужно написать функцию (на C#) которая была бы кодом этой математической задачи:

Начало задачи:
Есть набор точек, и нужно найти одну неизвестную координату точки a иск. путём линейной интерполяции по таблице:
х у z
а1 1.5 2.4 3.2
а2 3.5 4.0 1.6
а3 0.0 3.0 5.9
а иск. 2.5 2.5 ?

Для простоты понимания я сделал рисунок:
Интерполяция неизвестной координаты точки


! Самое главное ! - нужно не решение задачи, а формула для таких, она должна уметь принимать разное количество: крайних точек и разное количество осей у точек (измерений).
Конец задачи.
Я задавал этот же вопрос в разделе "Математика": вот он
Если бы я знал (очень чётко) саму формулу, то легко и сам бы реализовал его в коде, фактически мой вопрос звучит как "если кто то знает ответ на эту математическую задачу, то покажите его работу как код", вот.

И да, пожалуйста, без сторонних библиотек (только те которые из коробки, например: System.Math)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2025, 23:11
Ответы с готовыми решениями:

Нарисовать кривую по входящим данным
Нужно нарисовать кривую по входящим данным. Например, график температуры. Каждую минуту будут...

задача Интерполяции
Помогите пожалуйста решить задачу! (задача интерполяции) Полином P(x) задан координатами n+1...

Провести укрупнение масштаба сетки координат в 2 раза с помощью интерполяции методом ближайшего соседа
дана такая задача: Провести укрупнение масштаба сетки координат в 2 раза с помощью интерполяции...

3
4 / 4 / 0
Регистрация: 05.01.2025
Сообщений: 12
17.04.2025, 01:03  [ТС]
Ах да, решение должно быть по этому шаблону:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
///<summary>
            /// Получает копию desiredPoint, но у которой вычислена последняя координата - интерполируемое значение с помощью extremePoints (крайних точек)
            /// </summary>
            /// <param name="desiredPoint">Точка, у которой и ищем последнюю координату</param>
            /// <param name="extremePoints">Крайние точки, от которых интерполируемся</param>
            decimal InterpolateY(decimal[] desiredPoint, List< decimal[]> extremePoints)
            {
                // Математические вычисления - интерполяция
                ....
                decimal result;
                // Возврат результата
                return result;
            }
0
sleep
 Аватар для I can
4914 / 4551 / 837
Регистрация: 13.04.2015
Сообщений: 9,675
17.04.2025, 07:00
Лучший ответ Сообщение было отмечено Korobin как решение

Решение

Цитата Сообщение от Korobin Посмотреть сообщение
Я задавал этот же вопрос в разделе "Математика"
Надо было спросить в другом месте
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System;
 
class Interpolator
{
    // Функция для вычисления неизвестного значения через аффинную интерполяцию.
    // table – известные точки: каждая точка – массив длины d, где первые d–1 элементов – координаты,
    // последний элемент – функция (значение) в этой точке.
    // query – массив длины d–1 с координатами точки, для которой надо вычислить значение.
    public static double Interpolate(double[][] table, double[] query)
    {
        int m = table.Length;       // число известных точек
        int d = table[0].Length;    // общее число координат (d-1 вход, 1 выход)
        int n = d;                  // число коэффициентов (включая свободный член)
       
        // Построение матрицы X (m x n) и вектора Y (m)
        // Модель: f(x) = c0 + c1*x[0] + ... + c_{n-1} * x[n-2]
        double[,] X = new double[m, n];
        double[] Y = new double[m];
        for (int i = 0; i < m; i++)
        {
            X[i, 0] = 1.0;
            for (int j = 1; j < n; j++)
                X[i, j] = table[i][j - 1];
            Y[i] = table[i][d - 1];
        }
       
        // Находим коэффициенты через МНК: (XᵀX) c = XᵀY.
        double[,] A = new double[n, n];
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
            {
                double sum = 0;
                for (int k = 0; k < m; k++)
                    sum += X[k, i] * X[k, j];
                A[i, j] = sum;
            }
       
        double[] B = new double[n];
        for (int i = 0; i < n; i++)
        {
            double sum = 0;
            for (int k = 0; k < m; k++)
                sum += X[k, i] * Y[k];
            B[i] = sum;
        }
       
        double[] coeff = SolveLinearSystem(A, B);
       
        // Вычисляем значение для точки query.
        double result = coeff[0];
        for (int j = 1; j < n; j++)
            result += coeff[j] * query[j - 1];
       
        return result;
    }
   
    // Простой метод решения системы A*x = b методом Гаусса (без проверок на вырожденность).
    static double[] SolveLinearSystem(double[,] A, double[] b)
    {
        int n = b.Length;
        double[,] mat = new double[n, n + 1];
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                mat[i, j] = A[i, j];
            mat[i, n] = b[i];
        }
       
        // Прямой ход
        for (int i = 0; i < n; i++)
        {
            // Нормализация опорного элемента
            double pivot = mat[i, i];
            for (int j = i; j < n + 1; j++)
                mat[i, j] /= pivot;
           
            // Обнуление столбца i ниже и выше строки i
            for (int k = 0; k < n; k++)
            {
                if (k == i) continue;
                double factor = mat[k, i];
                for (int j = i; j < n + 1; j++)
                    mat[k, j] -= factor * mat[i, j];
            }
        }
       
        double[] x = new double[n];
        for (int i = 0; i < n; i++)
            x[i] = mat[i, n];
       
        return x;
    }
   
    // Пример использования
    static void Main()
    {
        double[][] table = new double[][]
        {
            new double[] { 1.5, 2.4, 3.2 },  // a1: x=1.5, y=2.4, z=3.2
            new double[] { 3.5, 4.0, 1.6 },  // a2: x=3.5, y=4.0, z=1.6
            new double[] { 0.0, 3.0, 5.9 }   // a3: x=0.0, y=3.0, z=5.9
        };
       
        double[] query = new double[] { 2.5, 2.5 }; // значения для x и y, ищем z
       
        double z = Interpolate(table, query);
        Console.WriteLine("Interpolated value: " + z);
    }
}
.

Добавлено через 11 минут
Цитата Сообщение от Korobin Посмотреть сообщение
я сделал рисунок:
Кстати, ты там координаты перепутал у третьей точки.
1
4 / 4 / 0
Регистрация: 05.01.2025
Сообщений: 12
18.04.2025, 00:30  [ТС]
Спасибо, я бы тебе пожал руку в реальности.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.04.2025, 00:30
Помогаю со студенческими работами здесь

Итерации - реализация интерполяции Лагранжа
Здравствуйте. Дали задание реализовать интерполяционную формулу Лагранжа(на рисунке ниже). Так...

Использование интерполяции в проекте
Здравствуйте. Есть набор данных: T1 = 1392 T2 = 1395 T3 = 1460 T4 =1493 T5 = 1540 T6 = 1562...

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

реализация кубической интерполяции
Всем доброго времени суток! Возникла проблема с кубической интерполяцией (преобразуют матлабовский...

Исправить и прокомментировать алгоритм квадратичной интерполяции
исправьте алгоритм в С# не понимаю как работает это цикл class Program { static...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru