最佳平方逼近的Matlab
作者:互联网
最佳平方逼近是先求积得到希尔伯特矩阵,再根据矩阵求解方程。
function [A,B,p]=zjpfbj_zzy(weightfun,primaryfun,fun,a,b)
% ---wfun:权函数
% ---phifun:基函数
% ---fun:逼近函数
% ---a,b:逼近区间的端点
% ---n:最佳逼近的次数,默认值为1
% 输出参数:
% ---A:法方程组的系数矩阵
% ---b:法方程组的右端向量
% ---p:最佳平方逼近的系数
n=size(primaryfun,1);
A=zeros(n);
for i=1:n
for j=1:n
f1=inline(['(',weightfun,')','.*','(',primaryfun(i,:),')',...
'.*','(',primaryfun(j,:),')']);
%内联函数(incline)例如f=inline('x.^2+y.^2'),这样就构造了函数f(x,y)=x.^2+y.^2,
%然后输入f(2,3)就能得到f(2,3)=13 A(i,j)=quad(f1,a,b);
%f=quad(@(x) x.^2,1,2) 简单的一个定积分,关于函数x^2 从1积分到2.
end
f2=inline(['(',weightfun,')','.*','(',primaryfun(i,:),')','.*','(',fun,')']);
B(i)=quad(f2,a,b);
end
B=B';a=A\B;
p=a';
第一题运行结果:
>> weightfun='x.^0';
>> primaryfun=char('1','x');
>> a=0.0;b=1.0;
>> fun='exp(x)';
>> [A,B,p]=zjpfbj_zzy(weightfun,primaryfun,fun,a,b)
A =
1.0000 0.5000
0.5000 0.3333
B =
1.7183
1.0000
p =
0.8731 1.6903
第二题运行结果:
>> weightfun='x.^0';
>> primaryfun=char('1','x');
>> a=1.0;b=2.0;
>> fun='log(x)';
>> [A,B,p]=zjpfbj_zzy(weightfun,primaryfun,fun,a,b)
A =
1.0000 1.5000
1.5000 2.3333
B =
0.3863
0.6363
p =
-0.6371 0.6822
标签:平方,zzy,逼近,---,weightfun,primaryfun,Matlab,fun 来源: https://blog.csdn.net/qq_37233416/article/details/111798318