Posting by Dominik Hose
Post date: Jun 30, 2021 4:44:22 PM
REQUIRES CVX Toolbox: http://cvxr.com/cvx/
clear all
close all
%%
x = linspace(1,4,101);
mu_x = trimf( x, [1, 2.5, 4] );
% mu_x = trapmf( x, [1,2,3,4] );
% mu_x = trapmf( x, [1,1,4,4] )/2 + trapmf( x, [2,2,3,3] )/2;
pi_x = mu_x; % for fuzzy-to-pbox trafo
pi_x = min(1, 2 * mu_x); % for pbox-to-fuzzy trafo
alpha_lvl = unique( pi_x );
%%
cvx_begin
variable p_x_fuzzy( size(pi_x) )
variable M1_x
variable M2_x
maximize( M2_x - M1_x.^2 )
p_x_fuzzy >= 0
sum(p_x_fuzzy) == 1
M1_x == sum( x .* p_x_fuzzy )
M2_x == sum( x.^2 .* p_x_fuzzy )
for i_lvl = 1 : length( alpha_lvl )
sum( p_x_fuzzy( pi_x <= alpha_lvl( i_lvl ) ) ) <= alpha_lvl( i_lvl );
end
cvx_end
F_x_fuzzy = cumsum( p_x_fuzzy );
figure
hold on
plot( x, pi_x, '--' )
plot( x, p_x_fuzzy )
plot( x, F_x_fuzzy )
%%
pos_x = cummax( mu_x );
nec_x = 1 - cummax( mu_x, 2, 'reverse' );
cvx_begin
variable p_x_pbox( size(pi_x) )
variable M1_x
variable M2_x
maximize( M2_x - M1_x.^2 )
p_x_pbox >= 0
sum(p_x_pbox) == 1
M1_x == sum( x .* p_x_pbox )
M2_x == sum( x.^2 .* p_x_pbox )
cumsum( p_x_pbox ) <= pos_x;
nec_x <= cumsum( p_x_pbox );
cvx_end
F_x_pbox = cumsum( p_x_pbox );
figure
hold on
plot( x, p_x_pbox )
plot( x, F_x_pbox )
plot( x, pos_x, '--' )
plot( x, nec_x, '--' )