MATLAB解一階微分方程

2021-08-19 20:18:11 字數 1792 閱讀 9865

matlab裡ode45命令用4階龍格-庫塔解一階微分方程(常係數/變係數)都能解。

首先把微分方程化為dx/dt = f(x)的標準形式寫成函式放在乙個檔案裡,再寫主程式用ode45呼叫這個檔案。舉例如下:

函式檔案:方程的定義(一定要用函式名命名)

% di/dt = l-1u - l-1(wl+r)i

function iprime = hw11_2(t,i)

l = [.0072, 0, 0, .1, .0054, 0;

0, .007, 0, 0, 0, .0026;

0, 0, .001, 0, 0, 0;

1.5*.1, 0, 0, 2.5, .125, 0;

1.5*.0054, 0, 0, .125, .0068, 0;

0, 1.5*.0026, 0, 0, 0, .0016];

w = zeros(6,6);

w(1,2) = -100*pi;

w(2,1) = 100*pi;

r = diag([.002,.002,.002,.4,.015,.015]);

u = zeros(6,1);

u(4) = 400;

iprime = l\u - l\(w*l+r)*i;

主程式檔案:呼叫ode45

% solve function hw11_2

theta0 = 0;

h = 1e-3; % step

i0 = zeros(1,6);

i0(4) = 400/.4;

ts = 0:h:1; % time span

[t,i] = ode45('hw11_2',ts,i0); % solve

thetaa = 100*pi*ts + theta0;

thetab = thetaa - pi/3*2;

thetac = thetaa + pi/3*2;

n = length(ts);

ia = zeros(n,1);

ib = zeros(n,1);

ic = zeros(n,1);

% inverse park transform

for j = 1:n

tt = ts(j);

thetaa = 100*pi*tt + theta0;

thetab = thetaa - 2*pi/3;

thetac = thetaa + 2*pi/3;

ia(j) = cos(thetaa)*i(j,1) - sin(thetaa)*i(j,2) + i(j,3);

ib(j) = cos(thetab)*i(j,1) - sin(thetab)*i(j,2) + i(j,3);

ic(j) = cos(thetac)*i(j,1) - sin(thetac)*i(j,2) + i(j,3);

endfigure(1);

plot(ts,ia,'y',ts,ib,'g',ts,ic,'r');

title(['three phase short circuit (\theta_0 = ',num2str(theta0),')']);

xlabel('t/s');ylabel('i/a');

legend('i_a','i_b','i_c');

absia = abs(ia);

[iamax,jamax] = max(absia);

tamax = ts(jamax);

一階微分方程

傳送門 直接解得 g y dy f x dx 設g y 及f x 的原函式依次為g y 及f x 則g y f x c為微分方程的隱式通解 2.齊次方程解法 一般形式 dy dx y x 令u y x則y xu,dy dx u xdu dx,所以u xdu dx u 即du u u dx x 兩端積...

matlab解微分方程

1.dsolve函式 這是最簡單的一種求解微分方程的一種方法 符號解法。一般來說,在matlab中解常微分方程有兩種方法,一種是符號解法,另一種是數值解法。在本科階段的微分數學題,基本上可以通過符號解法解決。用matlab解決常微分問題的符號解法的關鍵命令是dslove命令。該命令中可以用d表示微分...

Matlab求微分方程de符號解

1.dsolve 函式 在求通解問題 syms y x y dsolve x 2 y x 2 y diff y 0 這裡插入 片 syms y x 定義符號變數 dy diff y 一階導數 d2y diff y,2 二階導數,用於初值或邊值條件的賦值 y dsolve diff y,3 diff ...