2013-06-03 121 views
0

我想解決這種形式的方程: X」 = -A.x + B. | SIN(100 * PI * T)| 我用ODE45這樣的:解決微分方程絕對值

function find_x 
t = 0:0.001:10; 
x0 = 0; 
R1 = 90000; 
R2 = 1000; 
C = 0.001; 
[t,x]=ode45(@rhs, t , x0); 

plot(t,x); 

    function dxdt = rhs(t,x) 
     dxdt = -(C/R1 + C/R2)*x + C/R1*abs(sin(100*pi*t)) ; 
     %It's form is dx/dt = -A.x + B.U(t) 
    end 
end 

,但我認爲它給我錯誤的答案。 其實,我從一個問題這個等式「找到一個二極管橋和電容後,輸出電壓表」是這樣的: enter image description here

任何人都可以建議我另一種方式來解決呢?謝謝。

+0

這個問題可能更適合electronics.stackexchange.com。從MATLAB的角度來看,它看起來像你正確使用'ode45'。 –

+0

我不知道我是否使用abs(sin(100 * pi * t))是對還是錯。 –

+0

其中一種方法就是像你所做的那樣在不連續點上進行挖掘。對於其他方法,這個問題需要遷移到http://scicomp.stackexchange.com – ja72

回答

3

不是真正的地方解決這個問題,這讓我回想起我的信號&系統天,但基本上你的公式應該有C作爲分隔...

記住它的

I = C *dV/dt 

因此,如果你對RHS的dV/dt,你應該會看到1/C在LHS:

function khan 
t = 0:0.001:10; 
x0 = 0; 
R1 = 90000; 
R2 = 1000; 
C = 0.001; 
options = odeset('RelTol',1e-6,'AbsTol',1e-8); 
[t,x]=ode45(@rhs, t , x0,options); 

plot(t,x); 

    function dxdt = rhs(t,x) 
     dxdt = -(1/R1 + 1/R2)*x/C + 1/R1*abs(sin(100*pi*t))/C ; 
     %It's form is dx/dt = -A.x + B.U(t) 
    end 
end 

enter image description here

+1

你真的認爲這個功能有一個看起來像你的情節的解決方案嗎?我知道你不知道。考慮'ode45'的默認容差是多少,結果的大小。我建議:'opts = odeset('RelTol',1e-6,'AbsTol',1e-9); [t,x] = ode45(@rhs,t,x0,opts);'。 – horchler

+0

@horchler ...我認爲兩者的默認公差都是1e-8,而我認爲這個頻率相對較小。謝謝並修復。但態度可能會更好。 – Rasman

+0

@Rasman:這個結果是我期待的,非常感謝。我從原來的方程:)) –