实验四:多项式最小二乘法

程序1:要求给出插值次数的多项式最小二乘法

syms x f;

xx=input('请输入插值节点 as [x1,x2...]\n');

ff=input('请输入插值节点处对应的函数值 as [f1,f2...]\n');

m=input('请输入要求的插值次数m=');

n=length(xx);          

for i=1:(m+1)

syms fai x;

fai=x^(i-1);

for j=1:n

x=xx(j);

H(i,j)=eval(fai);

end

end

A=ff*(H)'*inv(H*(H)');

syms x; f=0;

for i=1:(m+1)

f=f+A(i)*x^(i-1);

end

plot(xx,ff,'*')

hold on

ezplot(f,[xx(1),xx(n)])

用此程序作出课本上的两道题:

1. 请输入插值节点 as [x1,x2...]

[0 0.9 1.9 3 3.9 5.0]

请输入插值节点处对应的函数值 as [f1,f2...]

[0 10 30 50 80 110]

请输入要求的插值次数m=2

图:

2.请输入插值节点 as [x1,x2...]

[0 0.9 1.9 3 3.9 5.0]

请输入插值节点处对应的函数值 as [f1,f2...]

[19.0 32.3 49.0 73.3 97.8]

请输入要求的插值次数m=2

图:

程序2:自适应多项式最小二乘法

syms x f nihef nihe;

xx=input('请输入插值节点 as [x1,x2...]\n');

ff=input('请输入插值节点处对应的函数值 as [f1,f2...]\n');

n=length(xx);

for m=1:(n-1)

    for i=1:(m+1)

        syms fai x;

        fai=x^(i-1);

        for j=1:n

                x=xx(j);

                H(i,j)=eval(fai);

        end

    end

    A=ff*(H)'*inv(H*(H)');

    syms x f; f=0;

    for i=1:(m+1)

        f=f+A(i)*x^(i-1);

    end

    nihef(m)=f;

    for i=1:n

        x=xx(i);

        niheff(i)=eval(f);

        ee(i)=ff(i)-niheff(i);

    end

    e(m)=0;

    for i=1:(n-1)

        e(m)=(ee(i))^2+e(m);

    end

    e(m)=sqrt(e(m)/(n*(n-1)));

    eee(m)=1/e(m);

end

for k=1:n

    if eee(k)==max(eee);

        break

    end

end

syms x;

nihe=nihef(k);

emcino=e(k);

plot(xx,ff,'*')

hold on

ezplot(nihe,[xx(1),xx(n)])

fprintf('插值误差为e=%.6f',emcino)

用此程序作实验中要求的题目:

3.请输入插值节点 as [x1,x2...]

[3 4 5 6 7 8 9]

请输入插值节点处对应的函数值 as [f1,f2...]

[2.01 2.98 3.50 5.02 5.47 6.02 7.05]

插值误差为e=0.000010

图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

力学AI有限元

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值