mirror of
https://bitbucket.org/Mattrixwv/octavefunctions.git
synced 2025-12-06 18:53:57 -05:00
From Numerical Analysis 10-10-18
This commit is contained in:
24
LagrangeInterpolation.m
Normal file
24
LagrangeInterpolation.m
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
function [value] = LagrangeInterpolation(x_data, y_data, x)
|
||||||
|
%LagrangeInterpolation evaluates the lagrange interpolation polynomial for
|
||||||
|
%given set of data points
|
||||||
|
%
|
||||||
|
% Input
|
||||||
|
% - x_data: One-dimensional list of x-coordinates of point through
|
||||||
|
% which the interpolating polynomial will pass. The degree of the
|
||||||
|
% interpolating polynomial, n, will be inferred from the number of
|
||||||
|
% entries in x_data
|
||||||
|
% - y_data: One-dimensional list of y-coordinates of point through
|
||||||
|
% which the interpolating polynomial will pass
|
||||||
|
% - x: One-dimensional list of values for which the Lagtrange
|
||||||
|
% polynomial will be evaluated
|
||||||
|
%
|
||||||
|
% Output
|
||||||
|
% - value: Value(s) of interpolation polynomial
|
||||||
|
|
||||||
|
%Ensure that the y_data list is a row vector
|
||||||
|
y_data = y_data(:)';
|
||||||
|
|
||||||
|
%Do the interpolation
|
||||||
|
value = y_data*LagrangePolynomials(x_data, x);
|
||||||
|
end
|
||||||
|
|
||||||
30
LagrangePolynomials.m
Normal file
30
LagrangePolynomials.m
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
function [Ln] = LagrangePolynomials(x_data, x)
|
||||||
|
%LagrangePolynomials evaluates the entire collection of Lagrange
|
||||||
|
%polynomials
|
||||||
|
%
|
||||||
|
% Input:
|
||||||
|
% - x_data: One-dimensional list of x-coordinates of points through
|
||||||
|
% which the interpolating polynomial will pass. The degree of the
|
||||||
|
% interpolating polynomial, n, will be inferred from the number of
|
||||||
|
% entries in x_data
|
||||||
|
% - x: One-dimensional list of values for which the Lagrange
|
||||||
|
% polynomial will be evaluated
|
||||||
|
%
|
||||||
|
% Output:
|
||||||
|
% -Ln: Matrix of values of Lagrange polynomials of degree n. The
|
||||||
|
% matrix has a row for each polynomial and a column for each value of
|
||||||
|
% x
|
||||||
|
|
||||||
|
%Allocate space for the output matrix by initializing it to zero
|
||||||
|
|
||||||
|
value_count = length(x);
|
||||||
|
n = length(x_data) - 1;
|
||||||
|
Ln = zeros(n + 1, value_count);
|
||||||
|
|
||||||
|
%Build each row of the output matrix by evaluating the corresponding
|
||||||
|
%polynomial at the x value(s)
|
||||||
|
for(k = 0:n)
|
||||||
|
Ln(k + 1, :) = LagrangePolynomial(x_data, k, x);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
16
TestLagrangePolynomials.m
Normal file
16
TestLagrangePolynomials.m
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
close all
|
||||||
|
clear all
|
||||||
|
format long
|
||||||
|
|
||||||
|
%Set your values
|
||||||
|
x_data = [1, 1.3, 1.6, 1.9, 2.2];
|
||||||
|
y_data = [0.7651977, 0.6200860, 0.4554022, 0.2818186, 0.1103623];
|
||||||
|
x = [1.1, 1.5];
|
||||||
|
|
||||||
|
%Get the values for x
|
||||||
|
values = LagrangeInterpolation(x_data, y_data, x);
|
||||||
|
|
||||||
|
%Display nicely
|
||||||
|
for(k = 1:size(x) + 1)
|
||||||
|
disp(['P(' num2str(x(k)) ') = ' num2str(values(k), '%11.7f')])
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user