数值分析之带初值的常微分方程数值解法(二)
2019-06-08 本文已影响0人
辛辛辛烷
【实验原理】
一、改进的欧拉法(预报校正)
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数值分析之数值积分(一)