微分方程数值解笔记之1到6阶的Adams外插内插实现

该博客介绍了Adams方法在求解常微分方程数值解中的应用,包括外插和内插两种方式。通过实例展示了1至6阶Adams方法的实现,分析了误差与步长的关系,并提供了误差对数函数图像。同时,还详细解释了子函数的作用,如启动点的计算和Adams系数的求解。
摘要由CSDN通过智能技术生成

5.Adams方法,可实现1至6阶的外插/内插:

5.1主函数,Adams外插法或内插法下的逐点误差,及误差对数函数图像:

clc;clear;close all;

%% y'=y-2*x/y用Adams来求解验证

%要求匿名函数支持向量化

func=@(x,y) y-2*x./y;

y_exa=@(x) sqrt(2.*x+1);

x0=0;

h=1/10;

xmax=1;

y0=1;

x=x0:h:xmax;        %自变量

if x(end)~=xmax

    x=[x,x(end)+h];

end

method='in';        %out 外插法  ;in  内插法

if strcmp(method,'out')

    stra='外插法';

elseif strcmp(method,'in')

    stra='内插法';

end

accuracy=5;

%% h=1/10下逐点误差

%参数:外插/内插,导函数,因变量初值,自变量左端点,步长,自变量右端点,精度

y=Adams_auto(method,func,y0,x0,h,xmax,accuracy);

y_rel=y_exa(x);

err=abs(y_rel-y);

figure(3);

plot(x,y,'r-',x,y_rel,'b:');

title(['Adams',stra,'下的数值解图像与解析解图像']);

legend('数值解','解析解');

disp('逐点误差:');

disp(err);

%% 求误差与步长的函数

h=1/10*2.^(linspace(-3,-7,5));  %步长过大过小精度都会降低

hl=length(h);

err=zeros(1,length(h));

for j=1:hl

    x1=x0:h(j):xmax;

    y1=Adams_auto(method,func,y0,x0,h(j),xmax,accuracy);

    y_rel_1=y_exa(x1);

    err(j)=mean(abs(y_rel_1-y1));

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值