问题如下,希望添加文字说明
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
结果
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥100 c语言,请帮蒟蒻写一个题的范例作参考
- ¥15 名为“Product”的列已属于此 DataTable
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题
- ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
- ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
- ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
- ¥50 成都蓉城足球俱乐部小程序抢票
- ¥15 yolov7训练自己的数据集
- ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)