I am trying to simulate some impedance spectra. As a part of this I need to solve a system of coupled differential equations given as:
u''(x) = z1/z2 u(x) : eq(1)
and
i''(x) = z1/z2 i(x) : eq(2)
The impedance i'm looking for is in the last point: x=L
and I know that the analytical solution is:
sqrt(z1*z2)*coth(L(sqrt(z1/z2)).
My boundary conditions are:
u'(0) = 0
i(0) = 0
u(L) = A*(exp(L*sqrt(z1/z2))+exp(-L*sqrt(z1/z2)))
i(L) = A*sqrt(z2*z1)*(exp(L*sqrt(z1/z2))-exp(-L*sqrt(z1/z2)))
The code I have so far is:
syms C1(x) C2(x) Y % frequency resolution:
FrequencyPoints = 100;% Vectro of simulated frequncies of modeling:
frequencies = logspace(2.5,6,FrequencyPoints);% Preallocation of results:
z_num = zeros(1,FrequencyPoints);% Run over all frequencies.
for f=1:FrequencyPoints w = frequencies(f); % Z1 = resistor, Z2 = capacitor
Z1 = 0.1; Z2 = 1/complex(0,w*10); %
DC1 = diff(C1,1); D2C1 = diff(C1,2); DC2 = diff(C2,1); D2C2 = diff(C2,2); Eq1 = D2C1 == Z1/Z2*C1(x); Eq2 = D2C2 == Z1/Z2*C2(x); [VF,Subs] = odeToVectorField(Eq1, Eq2); ftotal = matlabFunction(VF, 'Vars',{x,Y}); ic = zeros(2,1); xspan = [0,1]; [x,Y] = ode45(@(x,Y) ftotal(x,Y), xspan, ic); z_num(f) = C1(2)/C1(2);end
The error I get when this runs is:
Index exceeds the number of array elements (2).Error in symengine>@(x,Y)[Y(2);sqrt(1.0e+1).*Y(1).*1.0e+2i;Y(4);sqrt(1.0e+1).*Y(3).*1.0e+2i]Error in ODEexperiment>@(x,Y)ftotal(x,Y) (line 24) [x,Y] = ode45(@(x,Y) ftotal(x,Y), xspan, ic);Error in odearguments (line 90)f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115) odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);Error in ODEexperiment (line 24) [x,Y] = ode45(@(x,Y) ftotal(x,Y), xspan, ic);
Best Answer