数值分析之带初值的常微分方程数值解法(二)

【实验原理】

一、改进的欧拉法(预报校正)

1)预报校正法基本思路

改进欧拉法先用欧拉法求出预报值,再利用梯形公式求出校正值,局部截断误差比欧拉法低了一阶,可以较大程度地提高计算精度。

2)预报校正法算法描述

二、四阶规范龙格-库塔公式

【实验内容】

一、回答下面的问题

1.什么是常微分方程的解析解和数值解?

2.欧拉左矩形公式和右矩形公式是什么,有什么区别。

3.解函数y(x)的光滑性表现在什么地方,解函数y(x)“变化剧烈”如何体现,请举例说明。

4.写出一个二阶龙格-库塔公式、四阶标准龙格-库塔公式

二、编程计算课后习题中规定题目,交回实验报告与计算

实验代码

%定义函数
function z=f1(x,y)
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
z=1/(x^2)-y/x;
end
%改进欧拉法
clear;clc;
h=0.05; 
x=1:h:2; %定义函数范围
y(1)=1; %初值

for i=1:20 
    yp=y(i)+h*f1(x(i),y(i));%改进(迭代)公式
    yc=y(i)+h*f1(x(i+1),yp);
    y(i+1)=(yp+yc)/2;%校正值
end 

%-----------输出--------------------
disp('i=0...10的值为:'); 
for i=1:2:21 
    fprintf('%f\n',y(i)) 
end
%-----------输出--------------------
%四阶RK 
clear all
a=1;b=2;h=0.1;%边界及步长
x0=a;y0=1;%初值
 n=(b-a)/h;
N=[0:1:n]';
x=zeros(n+1,1);
y=zeros(n,1);%用矩阵存储
x(1)=x0;y(1)=y0;
 for i=1:n
    x(i+1)=x(i)+h;
end
%----------------四阶RK--------------------
for i=1:n
    k1=h*f1(x(i),y(i));
    k2=h*f1(x(i)+h/2,y(i)+k1/2);
    k3=h*f1(x(i)+h/2,y(i)+k2/2);
    k4=h*f1(x(i)+h,y(i)+k3);
    y(i+1)=y(i)+(k1+2*k2+2*k3+k4)/6;
end
%----------------四阶RK--------------------
[N,x,y]%输出

实验结果

运行结果

实验代码(仅改动部分)

%--------------------函数定义-------------------
function z=f1(x,y)
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
z=-50*y+50*x^2+2*x;
end
%--------------------函数定义-------------------

a=0;b=1;h=0.1; %边界及步长
x0=a;y0=1/3; %初值
T=[N,x,y] %输出解
dy=y-(1/3*exp(-50*x)+x.^2) %输出与精确解的误差

实验结果过多,此处略去


相关文章:
MATLAB数值分析之数值积分(一)

你可能感兴趣的:(数值分析之带初值的常微分方程数值解法(二))