28 / 28 / 0
Регистрация: 27.03.2011
Сообщений: 156
1

Численная интерполяция полиномом Лагранжа

13.12.2012, 12:52. Показов 12588. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот получил задание, на выполнение интерполяции. Помогите.
Задание

X: 1 2 3 5 6
Y: 2 4 6 10 12
Найти значения Y в точке X=4.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2012, 12:52
Ответы с готовыми решениями:

Интерполяция полиномом Лагранжа
Написал программу для интерполяции функции полиномом Лагранжа. Получается неправильно. Помогите...

Интерполяция полиномом Ньютона
Написал программу для интерполяции полиномом Ньютона, но она хорошо работает только для степенных...

Оценить интерполяционным полиномом Лагранжа
x=; y=; xi=; yi=interp1(x,y,xi,'nearest','extrap') кубическим сплайном помогите, пожалуйста,...

Аппроксимация полиномом Лагранжа таблично заданной функции. 1 вход 1 выход
ПОмогите написать, плиз Матлаб.аппроксимация полиномом Лагранжа таблично заданной функции.1 вход 1...

11
5241 / 3569 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
13.12.2012, 17:28 2
Держи, причесал чуток, вроде работает))
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
clear,clc
 
% значения данных
x = [1 2 3 5 6]; 
y = [2 4 6 10 12];
% искомая точка 
xt = 4;
 
n = length(x);
yt = 0;
for j=1:n
    z=1;
    for i=1:n
        if ((i < j)||(i > j))
            z=z*(xt-x(i))/(x(j)-x(i));
        end;
    end;
    yt = yt+z*y(j);
end;
disp(['Значению x = ',num2str(xt),' соответствует значение y = ', num2str(yt)])
plot(x,y,'ob',xt,yt,'*r')
legend('Теоретические значения','Интерполяция');
1
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
14.06.2013, 09:32 3
Подскажите пожалуста код в матлабе для определение значение функции на 2 участках интерполяции с помощью полинома лагранжа. Вот как задавать два участка не знаю. И набора значении нету лиш количество n.
0
5241 / 3569 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
14.06.2013, 23:25 4
Что значит "два участка"?
0
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
15.06.2013, 00:19 5
Имеется ввиду два интервала. Например [0;2] [6;7]. Как задать границы в маткаде если использовать типовые функции например: polyval interpol1 кажется так пишется последняя функция хотя примеров с нею я не встречал. И не понимаю в чем смысл моего задания чтобы вычислить значение функции на 5 точках в этих двох интервалов. Если f=х, то это вообще просто и вручную делается. Ну второй вариант что соs^3 то это сложнее. Но я не понимаю смысла и не вижу примеров как по функции это вычислить. Может надо выбрать 5 х-ов потом вычислить 5 f соответсвенно и на основе таблицы функция интерполяции нарисуется а потом уже подставлять х чтобы найти саму функцию если она отличается от исходной.
0
5241 / 3569 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
15.06.2013, 13:10 6
да, ты правильно рассуждаешь: нужно взять пять значений X из указанных диапазонов, посичтать для них функции и по этим данным делать интерполяцию:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
x = [0:0.5:2, 6:0.5:7]; 
y1 = x;
y2 = cos(x).^3;
 
xi = 0:0.1:7; % новые значения x
yi1 = interp1(x, y1, xi);
yi2 = interp1(x, y2, xi);
 
plot(x,y1,'ob', xi,yi1,':r')
legend('данные','интерполяция')
 
figure
plot(x,y2,'ob', xi,yi2,':r')
legend('данные','интерполяция')
1
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
15.06.2013, 16:50 7
В принципе мне сперва надо вычислить значение функции на двох интервалах интерполяции. То есть Я так понимаю чтобы это знать саму интерполяционную функцию не надо использовать. Хотя есть дополнительное задание чтобы найти значение в одной точке между двома. Кроме того это две разние функции в аналогичных но разных заданиях. И в первой функции надо использовать вторую формулу Ньютона, а для кубического косинуса- интерполяцию лагранжа. То есть Я так понимаю что interp1 здесь не применить.
1
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
17.06.2013, 05:17 8
Хорошо. А если находить значение интерполяции между узлами. И как применить именно интерполяции методом лагранжа в матлабе.
0
5241 / 3569 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
17.06.2013, 08:57 9
Вот пример:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
clear,clc
 
% значения данных
x = [0:0.2:2, 6:0.2:7];
y = cos(x).^3;
% искомая точка 
xt = 4;
 
n = length(x);
yt = 0;
for j=1:n
    z=ones(size(xt));
    for i=1:n
        if i~=j
            z = z.*(xt-x(i))/(x(j)-x(i));
        end
    end;
    yt = yt+z*y(j);
end
fprintf('Значению x = %2.4f соответствует значение y = %2.4f \n', xt',yt')
t = 0:0.01:7;
f = cos(t).^3;
plot(x,y,'ob',t,f,':b',xt,yt,'*r')
legend('Теоретические значения','','Интерполяция');
можешь вместо числа в xt прописать вектор значений: xt = 0:0.1:7 и увидишь график интерполянты
0
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
22.06.2013, 10:17 10
Спасибо за код. Но он работает для интервалоов, что не соприкасаются.
В моем случае там интервалы на самом деле [0;2][2;4]. И ответ выходит что-то вроде NaN.
Потому был бы благодарен если бы кто то доделал этот код.
В моем случае задание стоит найти значение функции в 5 узлах. Это как делать.
Для каждой отдельности. Или формировать масив xt. Буду очень благодарен за решение.
0
5241 / 3569 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
25.06.2013, 09:17 11
Цитата Сообщение от maxii Посмотреть сообщение
В моем случае там интервалы на самом деле [0;2][2;4]. И ответ выходит что-то вроде NaN.
...
В моем случае задание стоит найти значение функции в 5 узлах.
Когда же ты наконец выложишь нормальное четкое свое задание??? Почему нельзя было сразу выложить его, а не плясать вокруг да около!...

*надо формировать маcсив xt
**задаем шаг h=0.1, например, тогда
x = [0:h:2-h, 2+h:h:4];
Или не заморачиваясь на особые точки:
Matlab M
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
clear,clc
 
% значения данных
x = 0:0.25:4;
y = 1./(x-2);
% искомая точка
xt = 0:0.01:4;
% удаляем особые точки
x(isnan(y)|isinf(y)) = [];
y(isnan(y)|isinf(y)) = [];
n = length(x);
 
yt = 0;
for j=1:n
    z=ones(size(xt));
    for i=1:n
        if i~=j
            z = z.*(xt-x(i))/(x(j)-x(i));
        end
    end;
    yt = yt + z*y(j);
end
t = 0:0.01:4;
f = 1./(t-2);
plot(x,y,'ob',xt,yt,'.:r',t,f,':b')
ylim([-5 5])
legend('Теоретические значения','Интерполяция');
Но тут надо учитывать особенность многочлена Лагранжа - если у нас была особая точка - резкий скачек, то на краях интерполяция "улетает":

Численная интерполяция полиномом Лагранжа


Поэтому, по хорошему нужно дважды интерполировать на диапазонах x1 = [0, 2-h] и x2 = [2+h, 4], соответственно будут xt1, yt1 и xt2, yt2.
0
0 / 0 / 0
Регистрация: 20.10.2016
Сообщений: 3
18.05.2017, 01:19 12
Зосима, а сможете сделать нечто похожее на vba?
0
18.05.2017, 01:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2017, 01:19
Помогаю со студенческими работами здесь

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

Интерполяция многочленом Лагранжа
Добрый вечер. В программировании не разбираюсь абсолютно. Пытаюсь реализовать данный код в Матлабе:...

Интерполяция методом лагранжа. Поправьте
Друзья, прошу вашей помощи. Интерполяция функциональных зависимостей методом Лагранжа function ...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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