Solenoid - Integration of inductance L as a function of plunger position x
Show older comments
Hello All,
I am in the process of evaluating the value of inductance L at each step of the plunger position in a solenoid according to the differential equation:
Force = 0.5*i^2*dL/dx
The value of current is a constant at 8.75 A. The value of force F varies at each step of the plunger position. dL/dx data for each step of the plunger position is available from the manufacturer force-stroke data. I need to integrate dL/dx to get L as a function of x. I tried using the ode45 function.
Lo = 3.8184e-3; % initial value of inductance
i = 8.74; % current in ampere
x = plungerPosition; % plungerPosition (984x1 double) data imported from excel
[x,L] = ode45(@(x,L) F/0.5*i^2, x, L0); % F (984x1 double) data also imported from excel, force in newton
But I get the following error:
Error using odearguments (line 95)
@(X,L)F/0.5*I^2 returns a vector of length 984, but the length of initial conditions vector is 1. The vector returned by
@(X,L)F/0.5*I^2 and the initial conditions vector must have the same number of elements.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in IntegrationofdL (line 4)
[x,L] = ode45(@(x,L) F/0.5*i^2, x, L0);
Can you please help me how I can solve this problem?
Thanks and Regards,
Goutham Sajja
1 Comment
Goutham Sajja
on 16 May 2021
Answers (1)
Vimal Rathod
on 22 Jun 2021
Hi Goutham,
Few things I would like to point out are, you seem to be passing a lot of arguments to the ode45 function call which might not work. Also, "eval" is matlab defined function which already exists, so I would suggest you to use some other name say "eval1". Make sure to define function in a different .m file. I have added a way to store the L values when returned from ode45 in a cell array.
Have a look at the following snippet, hopefully it helps.
L0 = 3.8184e-3; % initial value of inductance
i = 8.75; % current in ampere
x = plungerPosition;
Lval = {};
for j = 1:numel(F)
[x,L] = ode45(@(x,L)eval1(x, F(j), i), x, L0); % F is the force at each plunger position
Lval{end+1} = L;
end
% Below lines should be in a different file named "eval1.m"
function dLdx = eval1(x,F,i)
dLdx = (F/0.5*i^2); % equation is dL/dx = F/0.5*i^2
end
Refer to the following document for more examples on ode45
Categories
Find more on Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!