y"+16y=0 用四阶runge-kutta 在matlab中解老师说不能直接用matlab中的函数,编程解.我大概有个思路,把二阶导数划分成两个一节导数的组合
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 08:39:40
y"+16y=0 用四阶runge-kutta 在matlab中解老师说不能直接用matlab中的函数,编程解.我大概有个思路,把二阶导数划分成两个一节导数的组合
y"+16y=0 用四阶runge-kutta 在matlab中解
老师说不能直接用matlab中的函数,编程解.
我大概有个思路,把二阶导数划分成两个一节导数的组合
y"+16y=0 用四阶runge-kutta 在matlab中解老师说不能直接用matlab中的函数,编程解.我大概有个思路,把二阶导数划分成两个一节导数的组合
其实自己写一个RK4的程序是比较无聊的(保存为RK4.m,或下载附件):
function [x,y] = RK4(f,x0,y0,h)
% 四阶runge-kutta程序
% f - 函数句柄
% x0=[x1,x2] - 求解范围
% y0 - 初值
% h - 计算步长
x = (x0(1):h:x0(2))';
y = zeros(length(x),length(y0));
y(1,:) = y0;
for i = 1:length(x)-1
k1 = f(x(i),y(i,:));
k2 = f(x(i)+1/2*h, y(i,:)+1/2*h*k1);
k3 = f(x(i)+1/2*h, y(i,:)+1/2*h*k2);
k4 = f(x(i)+h, y(i,:)+h*k3);
y(i+1,:) = y(i,:) + h/6*(k1+2*k2+2*k3+k4);
end
然后在命令窗口调用(初值随便取的):
f=@(x,y)[y(2) -16*y(1)];
[x,y]=RK4(f,[0 10],[1 2],0.1);
plot(x,y)