作业帮 > 综合 > 作业

matlab如何用龙格库塔法求一阶隐函数的的问题.其中t从0开始,步长是0.02s,一直到某一个值结束.

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/30 13:01:12
matlab如何用龙格库塔法求一阶隐函数的的问题.其中t从0开始,步长是0.02s,一直到某一个值结束.
其中c=sqrt(gx(H+h)).需要用龙格库塔法求出ξ.其中η是ξ的函数.
先在一个空白的M文件里创建一个M函数,文件名要与函数名相同,例如:
文件名:differential.m
函数内容:
function [dxdt] = differential(t,x)
% x:就是ξ
% dxdt:与ξ对应的对时间导数项
g=9.8;
H=0.05;
h=1;
k=sqrt(3*H/(4*h^3));
c = sqrt(g*(H+h)); % 我不知道你问题中sqrt(gx(H+h))的x是什么,我当做是乘号了
eit = (H./cos(h^2)).*(k.*(c.*t-x)); % 我认为题中给的是H*sec(h^2)*(k.*(c.*t-x)),
% 你可以根据自己的意见改过来
dxdt = sqrt(g.*(eit./h).*(h+eit./2).*(eit./(h+eit)));
end
M函数编写完成后,下面就是解算了.由于M文件编程提供的ode45是变步长计算方法,
没有你写的那种格式[t,x]=ode45(@wave_generation,0:0.02:2,0)
正确格式是[t,x]=ode45(@wave_generation,[0 2],0)但步长是变的
下面我采用自己编写固定步长4阶龙格库塔法
在相同文件目录下,再建一个空的M文件,文件名任意,写入如下内容:
t0 = 0; % 起始时刻,自己根据需要修改
tf = 2; % 终止时刻,自己根据需要修改
x0 = 0; % ξ的初始值,自己根据需要修改
K = zeros(1,4);
dt = 0.02; % 积分步长
i1 = 1;
t = t0;
x = x0;
while t(i1)
再问: 嗯,我明白你的意思了。就是画出来的图和原文中的还是有差,求助。
再答: 因为这里画的是t-ξ曲线,而不是t/T-ξ/S曲线,你知道T和S的取值吗?如果T和S取的是常值,那么曲线确实不对,问题就有可能出在eit的计算上,也就是应该采用如下算法: eit = H*(sech(k*(c*t-x)))^2 % sech()本身就是一个函数,我计算发现这时ξ确实趋于水平了,然后你再分别除以T和S,画出来的曲线应该就和上图相同了