MATLAB-最佳平方逼近与非线性拟合例题--十安辰

MATLAB-最佳平方逼近与非线性拟合例题–十安辰

最佳平方逼近例题

题目:设 f ( x ) = x e x , x ∈ [ 0 , 1 . 5 ] f\left(x\right)=xe^x ,x\in \left\lbrack 0,1\ldotp 5\right\rbrack f(x)=xex,x[0,1.5],求f(x)的三次近似最佳平方逼近多项式

编写函数最佳平方逼近的程序square_approximation.m

function [A,B,p]=square_approximation(wfun,phifun,fun,a,b)
% 最佳平方逼近
% 输入参数:
%      ---wfun:权函数
%      ---phifun:基函数
%      ---fun:逼近函数
%      ---a,b:逼近区间的端点
%      ---n:最佳逼近的次数,默认值为1
% 输出参数:
%      ---A:法方程组的系数矩阵
%      ---b:法方程组的右端向量
%      ---p:最佳平方逼近的系数
n=size(phifun,1);
A=zeros(n);
for i=1:n
    for j=1:n
        f1=inline(['(',wfun,')','.*','(',phifun(i,:),')',...
            '.*','(',phifun(j,:),')']);
        A(i,j)=quad(f1,a,b);
    end
    f2=inline(['(',wfun,')','.*','(',phifun(i,:),')','.*','(',fun,')']);
    B(i)=quad(f2,a,b);
end
B=B';a=A\B;
p=a';

解题方法:直接调用函数square_approximation()编写如下语句:

wfun='x.^0';  % 权函数
phifun=char('1','x','x.^2','x.^3');  % 基函数
fun='x .* exp(x)';  % 被逼近函数
a=0;b=1.5;  % 区间端点
[A,B,p]=square_approximation(wfun,phifun,fun,a,b)  % 求解三次最佳平方逼近多项式系数
p2=poly2str(fliplr(p),'x')  % 根据多项式系数构造多项式

输出如下:

A =
    1.5000    1.1250    1.1250    1.2656
    1.1250    1.1250    1.2656    1.5187
    1.1250    1.2656    1.5188    1.8984
    1.2656    1.5187    1.8984    2.4408
B =
    3.2408
    3.6021
    4.3194
    5.4111
p =
   -0.0285    1.3624   -0.0047    1.3876

p2 =
    ' 1.3876 x^3 - 0.0047316 x^2 + 1.3624 x - 0.028506'

所以f(x)的三次近似最佳平方逼近多项式为 f ( x ) = 1.3876 x 3 − 0.0047316 x 2 + 1.3624 x − 0.028506 f(x)=1.3876 x^3 - 0.0047316 x^2 + 1.3624 x - 0.028506 f(x)=1.3876x30.0047316x2+1.3624x0.028506


非线性拟合例题

题目:已知一组观测数据 ( x i , y i ) \left(x_i ,y_i \right) (xi,yi)见下表,函数的原型为 y = a 1 + a 2 x 2 + a 3 e − 5 x 3 + a 4 c o s ( − 2 x ) + a 5 x 4 y=a_1 +a_2 x^2 +a_3 e^{-5x^3 } +a_4 \mathrm{cos}\left(-2x\right)+a_5 x^4 y=a1+a2x2+a3e5x3+a4cos(2x)+a5x4,试用所给数据求出待定系数的值。

x i x_i xi y i y_i yi x i x_i xi y i y_i yi
0 6.3700 1.1 5.4941
0.1 6.3888 1.3 5.9187
0.3 6.2056 1.8 4.5944
0.4 5.8676 2.1 1.1440
0.7 4.7256 2.6 -11.4326
0.9 4.8990 3.0 30.0009
0.95 5.0383

这里使用MATLAB最优化工具箱中提供的 lsqcurvefit() 函数,可以解决非线性最小二乘拟合问题,该函数的调用格式为:
[ x , r e s n o r m , r e s i d u a l , e x i t f l a g , o u t p u t , l a m b d a , j a c o b i a n ] = l s q c u r v e f i t ( f u n , x 0 , x d a t a , y d a t a , . . . ) [x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcurvefit(fun,x0,xdata,ydata,...) [x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcurvefit(fun,x0,xdata,ydata,...)
其中,fun是非线性函数模型;x0是最优化的初始值;xdata,ydata是原始输入输出数据向量;返回值x为拟合输出的未知参数

解题方法:直接调用函数lsqcurvefit() 编写如下语句:

xi=[0 0.1 0.3 0.4 0.7 0.9 0.95 1.1 1.3 1.8 2.1 2.6 3.0];%观测数据
yi=[6.3700 6.3888 6.2056 5.8676 4.7256 4.8990 5.0383 5.4941 5.9187 4.5944 1.1440 -11.4326 30.0009]
f=@(b,x)b(1)+b(2).*x.^2+b(3).*exp(-5.*x.^3)+b(4).*cos(-2.*x)+b(5).*x.^4;  % 定义拟合函数模型
x = lsqcurvefit(f,[0.5,10,0,0,1],xi,yi);  % 最小二乘拟合求解
x1 = 0:0.01:3;  %缩小步进
plot(x1,f(x,x1),xi,yi,'ko')  % 绘制图形

输出:

x =
    9.4777  -16.5136   22.4145  -25.3911    2.3676

所以 f ( x ) = 9.4777 − 16.5136 x 2 + 22.4145 e − 5 x 3 − 25.3911 c o s ( − 2 x ) + 2.3676 x 4 f(x)=9.4777-16.5136x^2+22.4145e^{-5x^3}-25.3911cos(-2x)+2.3676x^4 f(x)=9.477716.5136x2+22.4145e5x325.3911cos(2x)+2.3676x4

输出图像如图所示:

MATLAB-最佳平方逼近与非线性拟合例题--十安辰_第1张图片

文章仅供参考,请勿照搬照抄!转载请说明出处!
CSDN–十安辰 --链接:https://blog.csdn.net/weixin_44123908

你可能感兴趣的:(MATLAB,北邮专业课)