С Новым годом! Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96

Написать две программы для интерполяции функции по формулам Лагранжа при равномерном расположении узлов

17.05.2015, 22:35. Показов 2916. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Помогите, пожалуйста.
Есть такое задание: написать две программы для интерполяции функции по формулам Лагранжа при равномерном расположении узлов.
Первый алгоритм реализовать в виде пользовательской функции,при этом запрещается использовать все математические и другие функции используемого математического пакета. А второй алгоритм реализовать с использованием встроенных математических функций среды разработки (polyfit, polyval, interp1, interp2, spline, pchip, ppval).
На вход должен поступать вектор значений независимой переменной, вектор значений зависимой переменной и вектор значений независимой переменной, для которых необходимо найти интерполированное значение функции. На выходе функция должна выдавать вектор интерполированных значений зависимой переменной в точках, указанных во входном векторе.

Первый код получился такой:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
clear, clc
% координаты узлов
x = input ('введите значение икс в квадратных скобках ')  %[1.2  1.7 2  2.6 3.1 3.3 3.5 3.9];
y = input('введите значение игрек в квадратных скобках '); %[8.278  8.811  9.356 9.621 10.165 10.431 10.701];
x0= input('введите точки');
P_n = zeros(size(x0)); % создаем нулевой массив значений интерполяционного полинома
for t=1:length(x) % в цикле считаем сумму по узлам
    P = ones(length(x),length(x0));
    for i=1:length(x)
        if t~=i
            P(t,:) = P(t,:).*(x0-x(i))./(x(t)-x(i));
        end
    end
    P_n = P_n + y(t)*P(t,:);
   % output L_n;
end
plot(x0,P_n)
hold on
plot(x,y)
А как сделать код с использованием указанных математических функций не знаю. Пожалуйста, проверьте первый код и помогите со вторым.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2015, 22:35
Ответы с готовыми решениями:

Написать две программы для расчета значений переменных y и z по заданным формулам
Препод задал задачку, писал, но все никак не получится правильно. Написать две программы на языке С++ для расчета значений переменных...

Написать две программы на языке С/С++ для расчета значений переменных y и z по заданным формулам
Написать две программы на языке С/С++ для расчета значений переменных y и z по заданным формулам (ссылка ). В первой программе ...

Написать две программы на языке С++ для расчета значений переменных y и z по заданным формулам
Написать две программы на языке С++ для расчета значений переменных y и z по заданным формулам (табл. 1.1). В первой программе ...

2
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
19.05.2015, 16:19
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

например так:
Matlab M
1
2
3
4
5
6
7
8
9
10
clear, clc
% координаты узлов
x = input ('введите значение икс в квадратных скобках ')  %[1.2  1.7 2  2.6 3.1 3.3 3.5 3.9];
y = input('введите значение игрек в квадратных скобках '); %[8.278  8.811  9.356 9.621 10.165 10.431 10.701];
x0= input('введите точки');
y0 = spline(x,y, x0);
% или y0 = interp1(x,y, x0);
plot(x0,y0)
hold on
plot(x,y)
0
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
19.05.2015, 21:01  [ТС]
Зосима, спасибо, уже сделал.

А можно вопрос: почему получается график - прямая.
Причем и вашим методом, и моим:
Matlab M
1
2
3
4
function yy=lagrange2(x,y,xx,n)
  y0=polyfit(x, y, n-1);
  yy=polyval(y0, xx);
end
График же должен быть гладкой кривой.

Добавлено через 1 час 25 минут
Зосима, упс. Уже понял.
Можете, пожалуйста, подсказать, как изменить код, чтобы он просто строил график, не ища значений в точке:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function yy=lagrange1(x,y,xx)
N=length(x);% узнаем число узлов интерполяции (N=n+1)
 
yy = zeros(size(xx));% создаем нулевой массив значений интерполяционного полинома
% в цикле считаем сумму по узлам
for k=1:N
    % вычисляем произведения
    t=ones(size(xx));
    for j=[1:k-1, k+1:N]
        t=t.*(xx-x(j))/(x(k)-x(j));
    end
    % накапливаем сумму
    yy = yy + y(k)*t;
   
end
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2015, 21:01
Помогаю со студенческими работами здесь

Интерполирование функции с помощью полинома Лагранжа при равномерной сетке узлов
Здравствуйте. Необходимо написать m-файл-функцию для интерполирования функции на отрезке с помощью полинома Лагранжа при равномерной...

Интерполяция функции по формулам Лагранжа
Имеется код Полинома Лагранжа. Что необходимо поправить чтоб можно было вводить X и Y массивы. и получать вывод график Полинома Лагранжа с...

Подскажите литературу по интерполяции функции двух переменных используя полиномы Лагранжа и Ньютона
Друзья подскажите литература по интерполяции функции двух переменных используя для этого полиномы Лагранжа и Ньютона.


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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 с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru