㈠ 四阶常微分龙格—库塔法求解常微分方程的初值问题。 Matlab程序算例:用标准4级4阶R-K法求解
clear,clc %清除内存中的变量
%数值解
y=inline('x*exp(x)+2*x-1');
y(1)
%四阶龙格库塔法
y0=[-132];
[x1,y1]=ode45(@fun,[0,1],y0);
y1(end,1)%y(1)的值
functiondy=fun(x,y)
dy=zeros(3,1);
dy(1)=y(2);
dy(2)=y(3);
dy(3)=y(3)+y(2)-y(1)+2*x-3;
运行结果
ans =
3.7183
ans =
3.7183
㈡ 求助!怎样用MATLAB编程实现四阶龙格库塔法求解一阶常微分方程组
http://wenku..com/view/fa7ee0ebaeaad1f346933fb7.html 这里有个三阶龙格库塔的程序,可以作为参考
㈢ 急求MATLAB编程源代码用四阶龙格库塔法解如下微分方程 y'=y-2x/y(0<x<1),y(0)=1,步长为h=0.2
%以下另存为文件myrk4.m
function[x,y]=myrk4(ufunc,y0,h,a,b)
%参数:函数名称,初始值向量,步长,时间起点,时间终点
n=floor((b-a)/h);%求步数
x(1)=a;%时间起点
y(:,1)=y0;%赋初值
%按龙格库塔方法进行求解
forii=1:n
x(ii+1)=x(ii)+h;
k1=ufunc(x(ii),y(:,ii));
k2=ufunc(x(ii)+h/2,y(:,ii)+h*k1/2);
k3=ufunc(x(ii)+h/2,y(:,ii)+h*k2/2);
k4=ufunc(x(ii)+h,y(:,ii)+h*k3);
y(:,ii+1)=y(:,ii)+h*(k1+2*k2+2*k3+k4)/6;
end
以下是主程序
%y'=y-2x/y(0<x<1),y(0)=1,步长为h=0.2
fun=inline('y-2*x/y');
[t1,f1]=myrk4(fun,1,0.2,0,1);%测试时改变test_fun的函数维数,别忘记改变初始值的维数
subplot(211);plot(t1,f1)%自编函数
title('自编函数求解结果')
%用系统自带函数ode45进行比较
[t,f]=ode45(fun,[01],1);
subplot(212);plot(t,f);title('ode45求解结果')
㈣ MATLAB六元一阶微分方程的四阶龙格库塔法编程遇到的问题。
能把六元一阶微分方程贴出来吗?
可能
f(1)+f(2)=0;
f(3)+f(4)=dV;
有点问题。
㈤ 用四阶龙格库塔法求解
初值给一下。
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function dxdt=ode_Miss_ghost(t,x)
%分别用x(1),x(2),x(3),x(4)代替N1,P1,N2,P2
N1=x(1);
P1=x(2);
N2=x(3);
P2=x(4);
K=2;
tau_c=3e-9;
tan_p=6e-12;
beta =5e-5;
delta=0.692;
eta =0.0001;
fm =8e6;
Ith =26e-3;
Ib =1.5*Ith;
Im =0.3*Ith;
I1=Ib+Im*sin(2*pi*fm*t)+K*P2;
I2=Ib+Im*sin(2*pi*fm*t)+K*P1;
dxdt=[
(I1/Ith-N1-(N1-delta)/(1-delta)*P1)/tau_e;
((N1-delta)/(1-delta)*(1-eta*P1)*P1-P1+beta*N1)/tau_p;
(I2/Ith-N2-(N2-delta)/(1-delta)*P2)/tau_e;
((N2-delta)/(1-delta)*(1-eta*P2)*P2-P2+beta*N2)/tau_p;
];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下面输入:
t_start=0;
t_end=2e-9;
y0=[1e-3;1e-4;0;0]; %初值
[x,y]=ode15s('ode_Miss_ghost',[0,t_end],y0);
plot(x,y);
legend('N1','P1','N2','P2');
xlabel('x');
㈥ 救命~龙格库塔法 C语言
首先将高阶微分方程降阶成为两个一阶方程,即令y’=z;说下思路,定义两个double型的数组,分别储存数据y,z;
在for循环中,利用四阶龙阁库塔公式y[i+1]=y[i]+h*z[i]+h*h/6*(L1+L2+L3);z[i+1]=z[i]+h/6*(L1+2L2+3L3+L4);其中L1=f(i,y[i],z[i]);L2=f(i+h/2,y[i]+h/2*z[i],z[i]+h/2*L1);L3=f(i+h/2,y[i]+h/2*z[i]+h*h/4*L1,z[i]+h/2*L2);L4=f(i+h,y[i]+h*z[i]+h*h/2*L2,z[i]+h*L3);这样就可以得到需要的值,最后输出下即可。
㈦ 用四阶龙格库塔法求二阶常微分方程(求大神具体编程程序,最好是MATLAB或C语言)
在matlab的书中讲四阶龙格库塔法的地方有例子程序,只要稍微改改就好了
㈧ 关于二阶和四阶龙格库塔法的计算与编程调试
求解二阶微分方程,初始条件还需要给出y1'(0)和y2'(0)。这里暂时按照0处理。
function zd530003514
a=0.1;
b=0.1;
Y0 = [b-1; 0; b; 0];
% 解方程
[t,Y]= ode45(@ode,[0 10],Y0);
y1=Y(:,1);
y2=Y(:,3);
% 绘图
subplot 211
plot(t,y1);
subplot 212
plot(t,y2);
% 微分方程定义
function dY = ode(t, Y)
L1=5;
L2=0.01;
a0=2;
b0=2;
c0=2;
y1=Y(1);y2=Y(3);
dY = [
Y(2);
-(a0*y2+b0*y2^2+c0*y2^3) - L1^2*L2*y1 - L1^2*y1;
Y(4);
-(a0*y2+b0*y2^2+c0*y2^3) - L1^2*L2*y1;
];
㈨ 四阶龙格库塔法的JAVA编程
Java语言的二三四阶龙格库塔程序如下:
public class D {
static double[] x=new double[6];
static double[] y=new double[6];
public static double function(double a,double b)
{
return b-2*a/b;
}
/*n表示几等分,n+1表示他输出的个数*/
public static void RungeKutta(double y0,double a,double b,int n,int style)
{
double h=(b-a)/n,k1,k2,k3,k4;
int i;
x[0]=a;
y[0]=y0;
switch(style)
{
case 2:
for(i=0;i<n;i++)
{
x[i+1]=x[i]+h;
k1=function(x[i],y[i]);
k2=function(x[i]+h/2,y[i]+h*k1/2);
y[i+1]=y[i]+h*k2;
}
break;
case 3:
for(i=0;i<n;i++)
{
x[i+1]=x[i]+h;
k1=function(x[i],y[i]);
k2=function(x[i]+h/2,y[i]+h*k1/2);
k3=function(x[i]+h,y[i]-h*k1+2*h*k2);
y[i+1]=y[i]+h*(k1+4*k2+k3)/6;
}
break;
case 4:
for(i=0;i<n;i++)
{
x[i+1]=x[i]+h;
k1=function(x[i],y[i]);
k2=function(x[i]+h/2,y[i]+h*k1/2);
k3=function(x[i]+h/2,y[i]+h*k2/2);
k4=function(x[i]+h,y[i]+h*k3);
y[i+1]=y[i]+h*(k1+2*k2+2*k3+k4)/6;
}
break;
}
}
public static void main(String[] args) {
//例子求y'=y-2*x/y(0<x<1);y0=1;
System.out.println("用二阶龙格-库塔方法");
RungeKutta(1,0,1,5,2);
for(int i=0;i<6;i++)
System.out.printf("x[%d]=%f,y[%d]=%f\n",i,x[i],i,y[i]);
System.out.println("用三阶龙格-库塔方法");
RungeKutta(1,0,1,5,3);
for(int i=0;i<6;i++)
System.out.printf("x[%d]=%f,y[%d]=%f\n",i,x[i],i,y[i]);
System.out.println("用四阶龙格-库塔方法");
RungeKutta(1,0,1,5,4);
for(int i=0;i<6;i++){
System.out.printf("x[%d]=%f,y[%d]=%f\n",i,x[i],i,y[i]);
}
}
}
运行结果:
用二阶龙格-库塔方法
x[0]=0.000000,y[0]=1.000000
x[1]=0.200000,y[1]=1.183636
x[2]=0.400000,y[2]=1.342656
x[3]=0.600000,y[3]=1.485014
x[4]=0.800000,y[4]=1.615225
x[5]=1.000000,y[5]=1.736182
用三阶龙格-库塔方法
x[0]=0.000000,y[0]=1.000000
x[1]=0.200000,y[1]=1.183244
x[2]=0.400000,y[2]=1.341729
x[3]=0.600000,y[3]=1.483408
x[4]=0.800000,y[4]=1.612727
x[5]=1.000000,y[5]=1.732472
用四阶龙格-库塔方法
x[0]=0.000000,y[0]=1.000000
x[1]=0.200000,y[1]=1.183229
x[2]=0.400000,y[2]=1.341667
x[3]=0.600000,y[3]=1.483281
x[4]=0.800000,y[4]=1.612514
x[5]=1.000000,y[5]=1.732142
㈩ VB用四阶龙格库塔法编程
你把它改成Do...loop until 试试