y"+16y=0 用四阶runge-kutta 在matlab中解老师说不能直接用matlab中的函数,编程解.我大概有个思路,把二阶导数划分成两个一节导数的组合

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/03 19:24:16
y

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)