當前位置:首頁 » 編程語言 » 四階龍格庫塔法c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

四階龍格庫塔法c語言

發布時間: 2022-02-08 05:50:13

㈠ 四階常微分龍格—庫塔法求解常微分方程的初值問題。 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 試試