1.triphai.m
function f=triphai(j,xdata,x,c)
%计算MQ三角拟插值的phai_j(x)数
%输入:j,插值节点xdata,原始数据x以及参数c
%输出phai_j(x)矩阵
N=length(x);
L=x(2)-x(1);%计算原节点的间距
if j==N+1
xj=x(N)+L;
elseif j==0
xj=x(1)-L;
else
xj=x(j);
end
f=(sin(0.5*(xdata-xj)).^2+c^2).^(1/2);
2. tripsai.m
function p=tripsai(j,xdata,x,c)
%计算MQ三角拟插值的tripsai_j(x)函数
%输入:j,插值节点xdata,原始数据x,以及phai(x)的参数c
%输出psai_j(x)
p=(1/(2*sin(0.5*(x(j+1)-x(j)))))*(triphai(j+1,xdata,x,c)-cos(0.5*(x(j+1)-x(j)))*triphai(j,xdata,x,c));
p=p-(1/(2*sin(0.5*(x(j)-x(j-1)))))*(cos(0.5*(x(j)-x(j-1)))*triphai(j,xdata,x,c)-triphai(j-1,xdata,x,c));
3.mq_quasi_tri.m
function [xdata,mqdata]=mq_quasi_tri(x,y,c,alpha)
%MQ三角拟插值算法
%根据输入的数据点组(x,y),利用MQ拟插值算法,寻找逼近函数
%输入:原始的数据点(x,y),以及MQ拟插值的参数c
%住:默认输入的数据为一个周期内的数据
%% 参数初始化
N=length(x);%计算数据个数
L0=x(2:N)-x(1:N-1);
L=min(L0);%计算原节点的最小间距(可能不是等间距)
%xdata=x;
x=[0 x 2*pi+L];
y=[0 y];
xdata=0:alpha*L:2*pi;%插入插值节点
xdata=xdata';%转为列向量
%% 计算函数值
mqdata=y(2)*tripsai(2,xdata,x,c);
for j=3:length(y)
mqdata=mqdata+y(j)*tripsai(j,xdata,x,c);
end
这是三段MATLAB的代码,为什么我输入数据求出的都是0 呢,有没有会的大佬教教我,谢谢了