matlab用龙格库塔法求解变系数常微分方程 急!!!求matlab 用四阶龙格-库塔法求解常微分方程

Matlab\u56db\u9636\u9f99\u683c\u5e93\u5854\u6cd5\u6c42\u89e3\u5e38\u5fae\u5206\u65b9\u7a0b

\u7528Matlab\u56db\u9636\u9f99\u683c\u5e93\u5854\u6cd5\u6c42\u5e38\u5fae\u5206\u65b9\u7a0b\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u65b9\u6cd5\u53bb\u5b9e\u73b0\u3002
1\u3001\u9996\u5148\u5efa\u7acb\u81ea\u5b9a\u4e49\u5fae\u5206\u65b9\u7a0b\u51fd\u6570
function f = ode_fun(x,y)
f=y+2*x/y^2;
end
2\u3001\u7136\u540e\u7528\u56db\u9636\u9f99\u683c\u5e93\u5854\u6cd5\u6c42\u5176\u6570\u503c\u89e3
figure(2)
y0=[1]; %\u521d\u503cy\uff080\uff09=1
h=0.1;
a=0;
b=5;
[x,y] = runge_kutta(@(x,y)ode_fun(x,y),y0,h,a,b);
disp(' x y')
A=[x',y']
plot(x,y,'LineWidth',1.5),grid on
xlabel('x'),ylabel('y(x)');
3\u3001\u7ed8\u5236y-x\u7684\u66f2\u7ebf\u56fe

\u5efa\u7acb.m\u6587\u4ef6
---------------------------------------------
function theta=danbai(t,X)
x=X(1);
dx=X(2);
ddx=-sin(x);
theta=[dx;ddx];
----------------------------------------------
\u547d\u4ee4\u7a97\u53e3\u8f93\u5165
>> [t,Y]=ode45(@danbai,[0 6],[pi/3 -1/2]);
>> plot(t,Y(:,1),'ro-',t,Y(:,2),'bv-');
>> legend('\theta-t','d\theta-t')
\u81ea\u7f16\u9f99\u683c\u5e93\u5854
------------------------------------------------
function [y,z]=Runge_kutta(a,b,y0,z0,h)
x=a:h:b;
y(1)=y0;
z(1)=z0;
n=(b-a)/h+1;
for i=2:n
K(1,1)=f1(x(i-1),y(i-1),z(i-1));
K(2,1)=f2(x(i-1),y(i-1),z(i-1));
K(1,2)=f1(x(i-1)+h/2,y(i-1)+K(1,1)*h/2,z(i-1)+K(2,1)*h/2);
K(2,2)=f2(x(i-1)+h/2,y(i-1)+K(1,1)*h/2,z(i-1)+K(2,1)*h/2);
K(1,3)=f1(x(i-1)+h/2,y(i-1)+K(1,2)*h/2,z(i-1)+K(2,2)*h/2);
K(2,3)=f2(x(i-1)+h/2,y(i-1)+K(1,2)*h/2,z(i-1)+K(2,2)*h/2);
K(1,4)=f1(x(i-1)+h,y(i-1)+K(1,3)*h,z(i-1)+K(2,3)*h);
K(2,4)=f2(x(i-1)+h,y(i-1)+K(1,3)*h,z(i-1)+K(2,3)*h);
y(i)=y(i-1)+h/6*(K(1,1)+2*K(1,2)+2*K(1,3)+K(1,4));
z(i)=z(i-1)+h/6*(K(2,1)+2*K(2,2)+2*K(2,3)+K(2,4));
end
y(2)
plot(y,'r') %\u03b8-t\u56fe
hold on
plot(f1(x,y,z),'g') % d\u03b8-t\u56fe
hold on
plot(f2(x,y,z),'b-')%d2\u03b8-t\u56fe
%f1.m
function f1=f1(x,y,z)
f1=z;
%f2.m
function f2=f2(x,y,z)
f2=-sin(y);
-----------------------------------------
Runge_kutta(0,6,pi/3,-1/2,0.02)

该二阶微分方程用龙格库塔法可以这样来求解。

第一步,根据该二阶微分方程,自定义微分方程函数,func(t,y)

第二步,根据初始条件,确定y和y'的初值,即y0=[0,0]

第三步,使用ode45函数求解【t,y】的数值解,即

[t,y] = ode45(@func,[0 0.0005],y0);

第四步,根据t、y、y'值,绘制t—y(t),t—y'(t)曲线图

下图为求解结果



  • 浜岄樁榫欐牸搴撳娉杩唬鍏紡鐢Matlab鎬庝箞缂栫▼
    绛旓細鍥涢樁榫欐牸搴撳娉绮惧害涓4锛屽睘浜庡崟姝ラ掓帹娉曪紝鍗曟閫掓帹娉曠殑鍩烘湰鎬濇兂鏄粠锛坸(i),y(i)锛夌偣鍑哄彂锛屼互鏌愪竴鏂滅巼娌跨洿绾胯揪鍒帮紙x(i+1),y(i+1)锛夌偣锛屼粠涓婅堪瀹氫箟鍙互鐪嬪嚭锛岄緳鏍煎簱濉斿疄璐ㄤ笂鏄眰涓闃跺井鍒嗘柟绋嬶紝瀵瑰叾杩涜鎺掑垪鍚庡氨鍙互杩涘叆Matlab杩涜缂栫▼銆備絾鏄鏋滃皢涓闃跺鐪嬩綔鍙橀噺锛屽垯浜岄樁瀵间篃涓嶈繃鏄繖涓彉閲忕殑...
  • 濡備綍鐢matlab瑙i緳鏍煎簱濉
    绛旓細鐢╩4rkutta鍑芥暟姹傝В锛岃闄勪欢 杈撳叆浠ヤ笅绋嬪簭 df=@(x,y)3*y/(1+x);[x,y]=m4rkutta(df,[0 1],1,0.2)寰楀埌鐨勭粨鏋滀负锛歺 = 0 0.2000 0.4000 0.6000 0.8000 1.0000y = 1.0000 1.7275 2.7430 4.0942 5.8292 7.9960 ...
  • 涓轰粈涔MATLAB鐨ode45鍑芥暟鍜屾垜鎸夌収榫欐牸搴撳娉曡В鍑烘潵鐨勭粨鏋滀笉涓鏍?_鐧惧害...
    绛旓細涓轰粈涔MATLAB鐨ode45鍑芥暟鍜屾垜鎸夌収BK4锛榫欐牸搴撳娉锛夎В鍑烘潵鐨勭粨鏋滀笉涓鏍凤紵鍏舵牴鏈殑鍘熷洜鏄椂闂村尯闂村彇浜嗗お澶ц岄犳垚锛屽洜涓鸿寰垎鏂圭▼瓒呰繃銆0锛1.6銆戝悗锛宱de45娉曞拰BK4娉曞緱鍒扮殑鍥惧儚灏卞け绋炽傜敱浜巓de45娉曞拰BK4娉曡櫧鐒堕兘鏄緳鏍煎簱濉旀硶鐨勬濇兂锛屼絾ode45娉曟槸閲囩敤鍙姝ラ暱杩涜璁$畻锛岃孊K4娉曟槸閲囩敤瀹氭闀胯繘琛岃绠楋紝鎵浠...
  • matlabode45鐢ㄦ硶
    绛旓細璇︾粏瑙i噴锛歰de45鏄MATLAB鎻愪緵鐨勫己澶у伐鍏凤紝鐢ㄤ簬姹傝В鍒濆奸棶棰樼殑甯稿井鍒嗘柟绋嬨傚畠鏄熀浜榫欐牸搴撳娉鐨勮嚜閫傚簲姝ラ暱绠楁硶瀹炵幇鐨勶紝鍏锋湁杈冮珮鐨勭簿搴﹀拰鏁堢巼銆傚湪浣跨敤ode45鏃讹紝闇瑕佸畾涔夋柟绋嬬殑鍑芥暟骞舵寚瀹氭眰瑙g殑鍖洪棿鍜屽垵濮嬫潯浠躲傚嚱鏁板畾涔夛細FUN鏄弿杩版柟绋嬬殑鍑芥暟锛岄渶瑕佺敤鎴锋彁渚涘噯纭殑鏁板琛ㄨ揪寮忋傝繖涓嚱鏁板簲璇ユ帴鍙椾竴涓悜閲忎綔涓鸿緭鍏ワ紝骞...
  • 璺眰鐢ㄩ緳鏍煎簱濉旀眰瑙寰垎鏂圭▼鐨matlab绋嬪簭
    绛旓細>> f=inline('1/6-y/30','t','y');>> [t,y]=ode45(f,[0,5],[0]);>> plot(t,y)鍙﹀锛岀敱楂樻暟鐨勭煡璇嗭紝鍙互寰楀埌瑙f瀽瑙d负锛歽=5-5*e^(-t/30)鎶婁笂杩扮殑瑙f瀽鍊间篃鏀惧埌涓婂浘涓>> hold on >> plot(t,5-5*exp(-t/30),'r*')鍙互鐪嬪埌浜岃呯浉褰撳惢鍚堛
  • 鎬ユ眰MATLAB缂栫▼婧愪唬鐮佺敤鍥涢樁榫欐牸搴撳娉曡В濡備笅寰垎鏂圭▼ y'=y-2x/y...
    绛旓細浠ヤ笅鍙﹀瓨涓烘枃浠 myrk4.mfunction [x,y]=myrk4(ufunc,y0,h,a,b)%鍙傛暟: 鍑芥暟鍚嶇О锛屽垵濮嬪煎悜閲忥紝姝ラ暱锛屾椂闂磋捣鐐癸紝鏃堕棿缁堢偣n=floor((b-a)/h);%姹傛鏁 x(1)=a;%鏃堕棿璧风偣 y(:,1)=y0;%璧嬪垵鍊%鎸榫欐牸搴撳鏂规硶杩涜姹傝В for ii=1:n x(ii+1)=x(ii)+h; k1=ufunc(x(ii),y...
  • 鎬ユユ!姹傚姪matlab鐢ㄩ緳鏍-搴撳鏂规硶姹傝В鏂圭▼缁
    绛旓細绋嬪簭寮濮嬶紝瀹氫箟姹傝В鍖洪棿涓庢闀 clear;clc;h=0.1;% 姝ラ暱 a=0;% 姹傝В鍖洪棿涓嬮檺 b=1;% 姹傝В鍖洪棿涓婇檺 x=a:h:b;% 鍙橀噺鍙栧 y_analy=sqrt(1+2*x);% 瑙f瀽瑙 plot(x,y_analy,'b');hold on; %缁樺埗绮剧‘瑙f洸绾 n=(b-a)/h;y0=1;Runge-Kutta 2 浜岄樁榫欐牸-搴撳娉 y_rk2(1)=y0;for ...
  • 姹傜紪绋嬭揪浜哄府蹇欑敤matlab缂栫▼鐢ㄩ緳鏍煎簱濉鏂规硶瑙e井鍒嗘柟绋
    绛旓細缁欎竴涓▼搴忥紝鏈嬪弸璇曡瘯鐪嬪惂锛屽懙鍛碉紒鍔熻兘锛氱敤鍥涢樁Runge-Kutta 娉曟眰瑙甯稿井鍒嗘柟绋 --- function R=Rungkuta4(f, a, b, n, ya)f:寰垎鏂圭▼鍙崇鍑芥暟鍙ユ焺 a,b:鑷彉閲忓彇鍊煎尯闂寸殑涓や釜绔偣 n:鍖洪棿绛夊垎鐨勪釜鏁 ya:鍑芥暟鍒濆紋(a)R=[x',y']:鑷彉閲廥 鍜岃ВY 鎵缁勬垚鐨勭煩闃 h=(b-a)/n;x=zeros(,n...
  • matlab-榫欐牸搴撳
    绛旓細浣犵殑杩欎釜闂涓嶅湪浜榫欐牸搴撳銆傝繖鏄竴涓竟鍊奸棶棰橈紙BVP锛夛紝鑰屼笉鏄垵鍊奸棶棰樸傛垜鎶婄▼搴忕粰浣狅紝鑷繁鍏堢湅鐪嬶紝鏈夐棶棰樺啀闂惂銆備笉鐢ㄥ啀鍔犲垎锛屽綋浣滄柊骞寸ぜ鐗╀簡锛岀瀛︿範杩涙锛乫unction zd523737127 瑙g殑鍒濆浼拌 solinit = bvpinit(linspace(0,4,10),[5 0.5 1 2]);BVP闂姹傝В sol = bvp4c(@ode,@bc,...
  • matlab榫欐牸搴撳娉曡В寰垎鏂圭▼
    绛旓細function [Y] = RK45(t,X,f,h)K1=f(t,X);K2=f(t+h/2,X+h/2*K1);K3=f(t+h/2,X+h/2*K2);K4=f(t+h,X+h*K3);Y=X+h/6*(K1+2*K2+2*K3+K4);end 浠ヤ笂鏄4闃榫欐牸搴撳娉鐨勪唬鐮:鑷繁鍐欏嚱鏁帮紝瀛樹负f.m function dxdt = f (t,x)dxdt(1)=exp(x(1)*sin(t))+...
  • 扩展阅读:4阶龙格库塔法matlab ... 龙格库塔解方程组 ... 六阶龙格库塔方法 ... 隐形龙格库塔公式 ... 龙格库塔的核心思想 ... 4阶龙格库塔公式 ... 龙格库塔法阶条件 ... 经典四阶龙格库塔法 ... 自适应龙格库塔法 算法 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网