其他分享
首页 > 其他分享> > 最佳平方逼近的Matlab

最佳平方逼近的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