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

来源:学生作业帮助网 编辑:作业帮 时间:2024/08/02 09:22:12
y
xS]OH+#VT61$RoE+;7dD!ۺm e?T"$H+!AR6ONZU_23sݹ3SuDvrOi}2M-KAb+9 _ юOΟJ/9q A p__<:n#_Խ^g@^g)\]J7;0ٙ`qJҷow>`~[7 Bzh2Y {MD_-ZAys (蜍9s >?;>iWt{,2t4n־Osȳq.o ,h 3] ȄǛ峋(o7 aFveo fZ`ʜe06'.qF֑ &ITUQWT&1YaL*, "NMud d:lpbX,b5bJ 6 2xy)>(KC R"yJ'Oz^pI[/+`b ny.hkc0OiG;hl!q0hp\ 'G-WDƺ3*+Fn,jԋ1òjYWY3VT,VYRƸp;10*9\咮R5Uh,(2V™"Bjz$ SS"KBIMNL]ZFNZ+ڍHyES5QT cQE%I(L]o|TN

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)