![enter image description here](https://i.stack.imgur.com/gnWKO.png)
Я работаю над проектом аппроксимации и хочу использовать Hermite в качестве базовой функции. Я выполнил первую часть и вторую задачу, используя разныеБазовая функция:
и работает отлично.Основная проблема заключается в том, что когда я пытаюсь использовать Hermite в качестве базовой функции, она не работает должным образом.Я не понимаю, в чем разница, используя эти 2 базовые функции, и что я должен сделать, чтобы это работало для Эрмита.Это выглядит так: ![enter image description here](https://i.stack.imgur.com/f6Ydl.png)
Это должно выглядеть примерно так: ![enter image description here](https://i.stack.imgur.com/jCJSe.png)
Вот моя основная логика:
clear
clc
close all
%current main loop for N = 5,10,15 and different values of k
x=linspace(-1,1,1001);
yx=linspace(-1,1,1001);
figure
for N = 1:15
if (N == 5 || N == 10 || N == 15)
for k = 1:N
clf;
for i = 1:1001
yx(i) = f(x(i));
end
plot(x,yx);
for i = 1:N
hold on;
j = -1+2*(i-1)/(N-1);
l = f(j);
plot(j,l,'r*');
end
p=findCoeficients(k,N);
for i = 1:size(x,2)
y(i) = calculateVal(p,x(i),N);
end
plot(x,y);
title("n "+N+",k "+k);
pause(.25);
end
end
end
Вот как я нахожу коэффициенты p:
function[p] = findCoeficients(k,N)
x=linspace(-1,1,N);
Y=zeros(N,1);
Fi=zeros(N,k);
for i = 1:N
Y(i,1) = f(x(i));
for j = 1:k
Fi(i,j) = hermite(-1+2*(i-1)/(N-1),j);
end
end
p = CB((transpose(Fi)*Fi),transpose(Fi)*Y);
end
Функция из Задачи 1:
function[y] = f(x)
y = cos(pi*x)*exp(x);
end
Создание приблизительного значения:
function[y] = calculateVal(p,a,k)
y=0;
for i=1:size(p)
y = y+p(i,1)* hermite(a,k);
end
end
Как рассчитать Эрмита * Предварительная функция:
function[h] = hermite(x,k)
h = hermitePar(k,x)*exp(-(x^2));
end
И Эрмита
function[h] = hermitePar(k,x)
if (k>1)
h = (2*x*hermitePar(k-1,x)) - ((2*k-2)*hermitePar(k-2,x));
elseif (k==1)
h = x;%2*x;
elseif (k==0)
h =1;
end
end
Остальные функции для расчета Холецкого-Банахевича самостоятельно:
function[L] = cholesky(A)
n = length( A );
L = zeros( n, n );
for i=1:n
L(i, i) = sqrt(A(i, i) - L(i, :)*L(i, :)');
for j=(i + 1):n
L(j, i) = (A(j, i) - L(i,:)*L(j ,:)')/L(i, i);
end
end
end
function[A] = CB(A,B)
%A = backwardSubs
c = cholesky(A);
fSubs = lower(c, B);
A = upper(c.', fSubs);
end
function[x] = lower(A,b)
n=length(A);
x=zeros(n,1);
for i = 1 : n
x(i) = b(i);
for j = 1 : i - 1
x(i) = x(i) - A(i, j) * x(j);
end
x(i) = x(i)/A(i, i);
end
end
function[x] = upper(A, b)
n=length(A);
x=zeros(n, 1);
for i=n:-1:1
x(i)=b(i)/A(i, i);
b(1:i-1)=b(1:i-1)-A(1:i-1, i)*x(i);
end
end