题目:设 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.3876x3−0.0047316x2+1.3624x−0.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+a3e−5x3+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.4777−16.5136x2+22.4145e−5x3−25.3911cos(−2x)+2.3676x4
输出图像如图所示:
文章仅供参考,请勿照搬照抄!转载请说明出处!
CSDN–十安辰 --链接:https://blog.csdn.net/weixin_44123908