runge-kutta功能

49次观看(最近30天)
约翰·史密斯
约翰·史密斯 2019年5月29日
回答: Meysam Mahooti 2021年7月28日
得出一个MATLAB函数,该功能从用户接收二阶微分方程以及步长和初始值,并使用用户选择的第4阶runge-kutta或第二阶runge-kutta。
2条评论
约翰·史密斯
约翰·史密斯 2019年5月29日
我不知道如何接收方程式和解决方程式(第四阶runge-kutta或第二阶runge-kutta)?

登录发表评论。

答案(2)

詹姆斯·图萨(James Tursa)
编辑:詹姆斯·图萨(James Tursa) 2019年5月29日
这是一些可以让您入门的代码。它从用户接收X和T的导数函数的字符串,并将其变成可以在RK方案中使用的函数句柄。
s =输入('输入x导数的表达式(也可以使用t):',,,,');
dx = str2func(['@(t,x)'s]);
现在,您拥有一个计算x导数的函数句柄。您将其称为当前时间t和state x:dx(t,x)
例如,运行此代码:
输入x衍生物的表达式(它也可以使用t):cos(x) + t*x^2
>> DX
dx =
function_handle具有价值:
@(t,x)cos(x)+t*x^2
但是,如果您的派生函数涉及工作空间的变量,则您需要使用eval(),因为str2func()在创建函数hander时看不到这些局部变量:
dx = eval([['@(t,x)'s]);
例如。,
>> a = 5;
>> s =输入('输入x导数的表达式(也可以使用t):',,,,');
输入x衍生物的表达式(它也可以使用t):a*cos(x)+t*x^2
>> dx = str2func([['@(t,x)'s]);
>> DX(2,3)
不明确的功能或变量“ A”。< - str2func不起作用
错误在 @(t,x)a*cos(x)+t*x^2
>> dx = eval([['@(t,x)'s]);
>> DX(2,3)
ans =
13.0500 < - eval确实工作
对于RK4和RK2方案,您的教练给了您什么?当然,必须有在课堂上讨论的算法。

Meysam Mahooti
Meysam Mahooti 2021年7月28日
//www.tatmou.com/matlabcentral/fileexchange/55430-runge-kutta-4th-core?s_tid=srchtitle

下载188bet金宝搏


发布

R2018B

社区寻宝

在Matlab Central中找到宝藏,发现社区如何为您提供帮助!

开始狩猎!