Borrar filtros
Borrar filtros

Mathematical Equations to MATLAB

3 visualizaciones (últimos 30 días)
CHRISTOS
CHRISTOS el 20 de Jun. de 2024
Editada: Torsten el 20 de Jun. de 2024
I am trying to implement a method for a reliability problem based on the following article main.pdf (sciencedirectassets.com). I am facing some problems while expressing the mathematical equations to MATLAB.
  1. All required parameters are given as shown bellow.
  2. lambda_i is given so that's why I am expressing it bellow right after '%Equations'
Could you help me express the series of sum from (1 to N+1) of MTBFi from denominator, and the series of sum (from i to N) of the integral f(i)*(tau_i)*dtau_i from 0 to Xi?
Also, I don't get when the lambda_i_plus_one is used on the CTM equation, any ideas?
%Parameters
beta = 2;alpha = 200;Ccl = 2000;Cpm = 2500;Rl = 1100;Cren = 50000;delta = 0.223;P = 12;N = 8; Clog = 1600;
%Equations
lambda_i = @(t) (beta / alpha) * (t / alpha).^(beta - 1); %It is given
lambda_i_plus_1 = @(t) exp(delta) * lambda_i(t);
f_i = @(t) lambda_i(t) .* exp(-integral(lambda_i(t), 0, t));
integral_MTBF = @(tau_i) tau_i .* f_i(tau_i); % This doesn't work right
MTBF_i = integral(integral_MTBF, 0, Inf); % This doesn't work right
Error using integral (line 81)
First input argument must be a function handle.

Error in solution>@(t)lambda_i(t).*exp(-integral(lambda_i(t),0,t)) (line 5)
f_i = @(t) lambda_i(t) .* exp(-integral(lambda_i(t), 0, t));

Error in solution>@(tau_i)tau_i.*f_i(tau_i) (line 6)
integral_MTBF = @(tau_i) tau_i .* f_i(tau_i);

Error in integralCalc>iterateScalarValued (line 334)
fx = FUN(t);

Error in integralCalc>vadapt (line 148)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen, ...

Error in integralCalc (line 88)
[q,errbnd] = vadapt(vfunA,interval, ...

Error in integral (line 87)
Q = integralCalc(fun,a,b,opstruct);
Xi = MTBF + P; % MTBF should be a vector so that Xi will take values from 1 to N as article says.
%CTM
numerator=Rl*P*(sum_of_integrals)+(N*(Cpm+Ccl+Clog))+((Rl*P)+Ccl+Cren+Clog);
denominator=((N+1)*P)+(series_of_sum);
CTM=num/den

Respuesta aceptada

Torsten
Torsten el 20 de Jun. de 2024
Editada: Torsten el 20 de Jun. de 2024
%Parameters
beta = 2;
alpha = 200;
Ccl = 2000;
Cpm = 2500;
Rl = 1100;
Cren = 50000;
delta = 0.223;
P = 12;
N = 8;
Clog = 1600;
%Equations
lambda = @(t) (beta / alpha) * (t / alpha).^(beta - 1);
for i = 1:N+1
f = @(t) lambda(t).*exp(-integral(lambda, 0, t));
MTBF(i) = integral(@(t)t.*f(t),0,Inf,'ArrayValued',1);
integrals(i) = integral(f,0,MTBF(i)+P,'ArrayValued',1);
lambda = @(t)lambda(t)*exp(delta);
end
num=Rl*P*sum(integrals(1:N))+N*(Cpm+Ccl+Clog)+Rl*P+Ccl+Cren+Clog;
den=(N+1)*P+sum(MTBF);
CTM=num/den
CTM = 154.0758

Más respuestas (1)

Steven Lord
Steven Lord el 20 de Jun. de 2024
This line of your code is the first problem. I've commented it out so I can run other code later in my answer.
% f_i = @(t) lambda_i(t) .* exp(-integral(lambda_i(t), 0, t));
This line evaluates the function handle lambda_i at the values passed into f_i to obtain a numeric array and passes that numeric array into the integral function. That won't work. integral requires a function handle as its first input, so that it can evaluate the function with inputs of its choosing. Try:
% f_i = @(t) lambda_i(t) .* exp(-integral(lambda_i, 0, t));
But with this change, now you have a different problem. On the line where you try to integrate integral_MTBF integral will call integral_MTBF with a vector as input. This means f_i will be called with a vector as input and so the limit of integration in the integral call inside f_i will also be a vector. integral doesn't support this. Instead you're going to need to force the integral call in the line that defines MTBF_i to call integral_MTBF with scalars by telling it your function is array valued. Now it runs to completion through that line.
%Parameters
beta = 2;alpha = 200;Ccl = 2000;Cpm = 2500;Rl = 1100;Cren = 50000;delta = 0.223;P = 12;N = 8; Clog = 1600;
%Equations
lambda_i = @(t) (beta / alpha) * (t / alpha).^(beta - 1); %It is given
lambda_i_plus_1 = @(t) exp(delta) * lambda_i(t);
f_i = @(t) lambda_i(t) .* exp(-integral(lambda_i, 0, t)); % THIS LINE CHANGED
integral_MTBF = @(tau_i) tau_i .* f_i(tau_i); % This doesn't work right
MTBF_i = integral(integral_MTBF, 0, Inf, ArrayValued = true) % THIS LINE CHANGED
MTBF_i = 177.2454
After this point I still receive errors when I run your code, but they're related to some of the variables (MTBF and sum_of_integrals were the first two MATLAB complained about) not being defined so you're going to need to correct those errors.
Xi = MTBF + P; % MTBF should be a vector so that Xi will take values from 1 to N as article says.
Unrecognized function or variable 'MTBF'.
%CTM
numerator=Rl*P*(sum_of_integrals)+(N*(Cpm+Ccl+Clog))+((Rl*P)+Ccl+Cren+Clog);
denominator=((N+1)*P)+(series_of_sum);
CTM=num/den
  3 comentarios
Steven Lord
Steven Lord el 20 de Jun. de 2024
Nowhere in the code you've written do any of your functions explicitly depend on a loop index. Are you hoping to run this on a array of values for one or more of your parameters? If so you could put the code you've posted inside a loop over the elements of that parameter array and either create a vector of values to which you store the value of MTBF for each value of the parameter and call sum on the vector after all the iterations are done or initialize a variable sumOfMTBF to 0 prior to the loop over your parameter array and add the value of MTBF to that variable during each iteration.
CHRISTOS
CHRISTOS el 20 de Jun. de 2024
Thank you !

Iniciar sesión para comentar.

Productos


Versión

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by