matlab:使用龙格库塔法求解微分方程组

本文介绍了如何利用Matlab的龙格库塔方法求解微分方程组,通过实例展示了具体步骤和运行结果,为理解和应用该数值方法提供了指导。
摘要由CSDN通过智能技术生成
%书籍:常用数值算法及其matlab实现
%第10章 常微分方程初值问题的数值解法,例10.14使用
%四阶龙格库塔方法
function [t,z] = rk4symeq(fun, t0, tf, Za, h)
%fun:微分方程的右表达式
%t0, tn为区间
%Za为初值,是列向量
M = floor(tf-t0)/h ;      %离散点的个数M+1
if t0 >= tf
    printf('左端点必须小于右端点');
    return;
end
N = length(Za);           %获得变量个数,N
z = zeros(M+1, N);
t = zeros(M +1, 1);
t =[t0 : h :tf]';
z(1,:) = Za';            %假设Za为列向量,与微分方程中的变量方向统一,变成行向量

for i = 1:M
    K1 =  feval(fun, t(i) , z(i,:));                    %K是行向量
    K2 =  feval(fun, t(i)+1/2*h ,z(i,:)+1/2* h*K1);
    K3 =  feval(fun, t(i)+1/2*h ,z(i,:)+1/2* h*K2);
    K4 =  feval(fun, t(i)+ h ,z(i,:)+ h*K3);   
    z(i+1,:) = z(i,:) +h/6 *(K1 + 2*K2 + 2*K3 + K4);
end

以下为求解的方程组
%书籍:常用数值算法及其matlab实现
%第10章 常微分方程初值问题的数值解法
%四阶龙格库塔,例10.16
function s = exa10_16(t,z)
%z是个向量,1*3
%输出s也是向量,1*3
s = zeros(1,2);
dy1 =  
  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB 中可以使用 `ode45` 函数求解一般形式的常微分方程,也可以使用 `ode113`、`ode23`、`ode23s`、`ode15s`、`ode23t`、`ode23tb` 等函数求解不同类型的微分方程。其中,`ode45` 函数是最常用的求解一般形式的微分方程的函数之一,而 `ode113` 函数则是用于求解刚性常微分方程的高阶函数之一。 以下是一个使用 `ode45` 函数基于四阶龙格库塔法求解微分方程MATLAB 示例代码: ```matlab % 求解微分方程 y''(t) + 2y'(t) + 2y(t) = sin(t) % 初始条件为 y(0) = 1, y'(0) = 0 % 定义方程 f = @(t,y) [y(2); -2*y(2)-2*y(1)+sin(t)]; % 定义初始条件 t0 = 0; y0 = [1; 0]; % 求解方程 [t,y] = ode45(f,[t0,10],y0); % 绘图 plot(t,y(:,1),'b',t,y(:,2),'r'); legend('y(t)','y''(t)'); ``` 在该示例中,我们定义了一个二阶常微分方程,并使用 `ode45` 函数求解了该方程。我们首先定义了方程,然后定义了初始条件。最后,我们使用 `ode45` 函数求解方程,并将结果保存在变量 t 和 y 中。最后,我们使用 `plot` 函数绘制了的图像。 需要注意的是,`ode45` 函数的第一个参数是一个函数句柄,用来表示待求解的方程。该函数句柄需要接受两个参数,第一个参数是时间 t,第二个参数是状态变量 y(即待求解的未知函数)。在该示例中,我们使用匿名函数 `f = @(t,y) [y(2); -2*y(2)-2*y(1)+sin(t)]` 来表示待求解的方程
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值