实验三:Runge现象的产生和克服

程序1:lagrange多项式插值

syms f x p dp lx L;

f=1/(1+25*x^2);

N=input('请输入插值节点数N=');

xx=-1:2/N:1;

p=1; L=0;

ff=zeros(1,length(xx));

for i=1:(N+1)

    x=xx(i);

    ff(i)=eval(f);

    syms x;

    p=p*(x-xx(i));

end

dp=diff(p);

for j=1:(N+1)

    x=xx(j);

    k=eval(dp);

    syms x;

    lx=p/((x-xx(j))*k);

    L=L+lx*ff(j);

end

aa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];

for i=1:length(aa)

    x=aa(i);

    S(i)=eval(L);

    fff(i)=eval(f);

end

e=0;

for i=1:length(aa)

    e=e+(S(i)-fff(i))^2;

end

e=sqrt(e/(20*21));

fprintf('插值偏差为e=%.6f\n',e)

ezplot(f,[-1,1])

hold on

ezplot(L,[-1,1])

hold on

plot(xx,ff,'*')

hold on

plot(aa,S,'o')

hold off

程序2:分段线性插值

syms f x p lx;

f=1/(1+25*x^2);

N=input('请输入插值节点数N=');

xx=-1:2/N:1;

p=1; L=0;

ff=zeros(1,length(xx));

for i=1:(N+1)

    x=xx(i);

    ff(i)=eval(f);

end

syms x

for i=1:N

    for j=1:(N+1)

        if j==i

            lx(i,j)=(x-xx(i+1))/(xx(i)-xx(i+1));

        else if j==i+1

                lx(i,j)=(x-xx(i))/(xx(i+1)-xx(i));

            else

                lx(i,j)=0;

            end

        end

    end

end

p=lx*ff';

aa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];

for i=1:length(aa)

    x=aa(i);

    for j=1:N+1

        if x<xx(j)

            break

        end

    end

    S(i)=eval(p(j-1));

    fff(i)=eval(f);

end

e=0;

for i=1:length(aa)

    e=e+(S(i)-fff(i))^2;

end

e=sqrt(e/(20*21));

fprintf('插值偏差为e=%.6f\n',e)

ezplot(f,[-1,1])

hold on

xxx=(-1:0.01:1);

for i=1:length(xxx)

    x=xxx(i);

    for j=1:N+1

        if x<xx(j)

            break

        end

    end

    SS(i)=eval(p(j-1));

end

plot(xxx,SS,'r')

hold on

plot(xx,ff,'*')

hold on

plot(aa,S,'o')

hold off

程序3:三转角插值法

syms f x df s s1 s2 s3 s4;

f=1/(1+25*x^2);

df=diff(f);

N=input('请输入插值节点数N=');

h=2/N;

xx=-1:2/N:1;

p=1; L=0;

ff=zeros(1,length(xx));

for i=1:(N+1)

    x=xx(i);

    ff(i)=eval(f);

    dff(i)=eval(df);

end

syms x

for i=1:N

    s1=(x-xx(i+1))^2*(h+2*(x-xx(i)))*ff(i)/h^3;

    s2=(x-xx(i))^3*(h+2*(xx(i+1)-x))*ff(i+1)/h^3;

    s3=(x-xx(i+1))^2*(x-xx(i))*dff(i)/h^2;

    s4=(x-xx(i))^2*(x-xx(i+1))*dff(i+1)/h^2;

    s(i)=s1+s2+s3+s4;

end

aa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];

for i=1:length(aa)

    x=aa(i);

    for j=1:N+1

        if x<xx(j)

            break

        end

    end

    S(i)=eval(s(j-1));

    fff(i)=eval(f);

end

e=0;

for i=1:length(aa)

    e=e+(S(i)-fff(i))^2;

end

e=sqrt(e/(20*21));

fprintf('插值偏差为e=%.6f\n',e)

ezplot(f,[-1,1])

hold on

xxx=(-1:0.01:1);

for i=1:length(xxx)

    x=xxx(i);

    for j=1:N+1

        if x<xx(j)

            break

        end

    end

    SS(i)=eval(s(j-1));

end

plot(xxx,SS,'r')

hold on

plot(xx,ff,'*')

hold on

plot(aa,S,'o')

hold off

程序4:三弯矩插值法:

syms f x ddf s;

f=1/(1+25*x^2);

ddf=diff(diff(f));

N=input('请输入插值节点数N=');

h=2/N;

xx=-1:2/N:1;

p=1; L=0;

ff=zeros(1,length(xx));

for i=1:(N+1)

    x=xx(i);

    ff(i)=eval(f);

    ddff(i)=eval(ddf);

end

syms x

for i=1:N

    A=(ff(i+1)-ff(i))/h-h*(ddff(i+1)-ddff(i))/6;

    B=ff(i)-h^2*ddff(i)/6;

    s(i)=(xx(i+1)-x)^3*ddff(i)/(6*h)+(x-xx(i))^3*ddff(i+1)/(6*h)+A*(x-xx(i))+B;

end

aa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];

for i=1:length(aa)

    x=aa(i);

    for j=1:N+1

        if x<xx(j)

            break

        end

    end

    S(i)=eval(s(j-1));

    fff(i)=eval(f);

end

e=0;

for i=1:length(aa)

    e=e+(S(i)-fff(i))^2;

end

e=sqrt(e/(20*21));

fprintf('插值偏差为e=%.6f\n',e)

ezplot(f,[-1,1])

hold on

xxx=(-1:0.01:1);

for i=1:length(xxx)

    x=xxx(i);

    for j=1:N+1

        if x<xx(j)

            break

        end

    end

    SS(i)=eval(s(j-1));

end

plot(xxx,SS,'r')

hold on

plot(xx,ff,'*')

hold on

plot(aa,S,'o')

hold off

图1:观察Runge现象

图2:分段线性插值

图3:三转角插值:

图4:三弯矩插值:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

力学AI有限元

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

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

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

打赏作者

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

抵扣说明:

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

余额充值