我正在研究近似项目,我想使用Hermite作为基本功能 我使用不同的基本功能完成了第一部分和第二部分任务:并且它完美运行。 主要问题是,当我尝试使用Hermite作为基本功能时,它无法正常工作。我不明白使用这两个基本函数有什么区别,我该怎么做才能使它适用于Hermite。它看起来像这样:
这是我的主要逻辑:
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
我如何计算hermite * pre函数:
function[h] = hermite(x,k)
h = hermitePar(k,x)*exp(-(x^2));
end
和hermite
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
我自己计算Cholesky-Banachiewicz的其他函数:
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
答案 0 :(得分:0)
在函数calculateVal中:
function[y] = calculateVal(p,a,k)
y=0;
for i=1:size(p)
y = y+p(i,1)* hermite(a,k);
end
end
在这一行我应该使用:
y = y+p(i,1)* hermite(a,i);
因为我应该拿小K而不是大K - > Ñ