问题如下,希望添加文字说明
1条回答 默认 最新
- CSDN专家-Matlab_Fans 2021-11-14 10:40关注
做了欧拉法、RK2和ode45三种算法。
已更新二阶泰勒方法。
function ODESolveTest() %% 欧拉法求解常微分方程 T = 1; h = 0.02; t = 0:h:T; x = [0;0]; % 初始值 X1(1,:) = x'; for ii = 2:length(t) dx = Dfun(t(ii),x); x = x + dx * h; X1(ii,:) = x'; end %% 二阶泰勒展开法 x = [0;0]; % 初始值 X2(1,:) = x'; for ii = 2:length(t) [dx,d2x] = Dfun(t(ii),x); x = x + h*dx + d2x*h^2/2; X2(ii,:) = x'; end %% 二阶RK法 x = [0;0]; % 初始值 X3(1,:) = x'; for ii = 2:length(t) k1 = Dfun(t(ii-1),x); k2 = Dfun(t(ii),x+h*k1); x = x + 0.5*(k1+k2) * h; X3(ii,:) = x'; end %% ode45 x = [0;0]; % 初始值 [~,X4] = ode45(@Dfun,t,x); r = 0.5; F1 = exp( -r*X1(:,1) - X1(:,2) ); F2 = exp( -r*X2(:,1) - X2(:,2) ); F3 = exp( -r*X3(:,1) - X3(:,2) ); F4 = exp( -r*X4(:,1) - X4(:,2) ); figure plot(t,F1,'b-.','linewidth',1.5) hold on plot(t,F2,'c-.','linewidth',1.5) plot(t,F3,'r--','linewidth',1.5) plot(t,F4,'linewidth',1.5) legend('Euler','Taylor2','RK2','ode45') xlabel('Time/s') ylabel('f(t,r)') title('r = 0.5') end function [dx,d2x] = Dfun(t,x) b = 0.2; sigma = 0.05; a = 0.004; C = x(1); A = x(2); dx = zeros(2,1); dx(1) = b*C + 0.5*sigma^2*C^2 - 1; dx(2) = -a*C; j = [ b+0.5*sigma^2*2*C*dx(1) 0 -a 0 ]; d2x = j * dx; end
结果
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题
- ¥100 无网格伽辽金方法研究裂纹扩展的程序
- ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
- ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
- ¥50 求一位精通京东相关开发的专家
- ¥100 求懂行的大ge给小di解答下!
- ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
- ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
- ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
- ¥100 华为手机私有App后台保活