Email: helpdesk@telkomuniversity.ac.id

This Portal for internal use only!

  • My Download
  • Checkout
Application Package Repository Telkom University
All Categories

All Categories

  • IBM
  • Visual Paradigm
  • Adobe
  • Google
  • Matlab
  • Microsoft
    • Microsoft Apps
    • Analytics
    • AI + Machine Learning
    • Compute
    • Database
    • Developer Tools
    • Internet Of Things
    • Learning Services
    • Middleware System
    • Networking
    • Operating System
    • Productivity Tools
    • Security
    • VLS
      • Office
      • Windows
  • Opensource
  • Wordpress
    • Plugin WP
    • Themes WP
  • Others

Search

0 Wishlist

Cart

Categories
  • Microsoft
    • Microsoft Apps
    • Office
    • Operating System
    • VLS
    • Developer Tools
    • Productivity Tools
    • Database
    • AI + Machine Learning
    • Middleware System
    • Learning Services
    • Analytics
    • Networking
    • Compute
    • Security
    • Internet Of Things
  • Adobe
  • Matlab
  • Google
  • Visual Paradigm
  • WordPress
    • Plugin WP
    • Themes WP
  • Opensource
  • Others
More Categories Less Categories
  • Get Pack
    • Product Category
    • Simple Product
    • Grouped Product
    • Variable Product
    • External Product
  • My Account
    • Download
    • Cart
    • Checkout
    • Login
  • About Us
    • Contact
    • Forum
    • Frequently Questions
    • Privacy Policy
  • Forum
    • News
      • Category
      • News Tag

iconTicket Service Desk

  • My Download
  • Checkout
Application Package Repository Telkom University
All Categories

All Categories

  • IBM
  • Visual Paradigm
  • Adobe
  • Google
  • Matlab
  • Microsoft
    • Microsoft Apps
    • Analytics
    • AI + Machine Learning
    • Compute
    • Database
    • Developer Tools
    • Internet Of Things
    • Learning Services
    • Middleware System
    • Networking
    • Operating System
    • Productivity Tools
    • Security
    • VLS
      • Office
      • Windows
  • Opensource
  • Wordpress
    • Plugin WP
    • Themes WP
  • Others

Search

0 Wishlist

Cart

Menu
  • Home
    • Download Application Package Repository Telkom University
    • Application Package Repository Telkom University
    • Download Official License Telkom University
    • Download Installer Application Pack
    • Product Category
    • Simple Product
    • Grouped Product
    • Variable Product
    • External Product
  • All Pack
    • Microsoft
      • Operating System
      • Productivity Tools
      • Developer Tools
      • Database
      • AI + Machine Learning
      • Middleware System
      • Networking
      • Compute
      • Security
      • Analytics
      • Internet Of Things
      • Learning Services
    • Microsoft Apps
      • VLS
    • Adobe
    • Matlab
    • WordPress
      • Themes WP
      • Plugin WP
    • Google
    • Opensource
    • Others
  • My account
    • Download
    • Get Pack
    • Cart
    • Checkout
  • News
    • Category
    • News Tag
  • Forum
  • About Us
    • Privacy Policy
    • Frequently Questions
    • Contact
Home/News

Category: News

Does SoC Builder do build optimizations, can I see the resources mapping and can I change it?
Matlab News

Does SoC Builder do build optimizations, can I see the resources mapping and can I change it?

PuTI / 2025-06-25

Dear all,

I am using SoC Blockset for a simple design for AMD Zynq Ultrascale+ ZCU111 evaluation board.

If I understand it correctly, the SoC Blockset add-on uses HDL coder to generate code for FPGA part of the SoC, but this is done through the SoC Builder interface, in which there are much less flexibility then in HDL coder. Does SoC Builder do some FPGA resource optimizations for build? How can I see the resource mapping? Can I change the mapping manually (for a better optimization, e.g.) or is it not possible to make a better mapping then the one produced automatically?

Thank you for your answers!Dear all,

I am using SoC Blockset for a simple design for AMD Zynq Ultrascale+ ZCU111 evaluation board.

If I understand it correctly, the SoC Blockset add-on uses HDL coder to generate code for FPGA part of the SoC, but this is done through the SoC Builder interface, in which there are much less flexibility then in HDL coder. Does SoC Builder do some FPGA resource optimizations for build? How can I see the resource mapping? Can I change the mapping manually (for a better optimization, e.g.) or is it not possible to make a better mapping then the one produced automatically?

Thank you for your answers! Dear all,

I am using SoC Blockset for a simple design for AMD Zynq Ultrascale+ ZCU111 evaluation board.

If I understand it correctly, the SoC Blockset add-on uses HDL coder to generate code for FPGA part of the SoC, but this is done through the SoC Builder interface, in which there are much less flexibility then in HDL coder. Does SoC Builder do some FPGA resource optimizations for build? How can I see the resource mapping? Can I change the mapping manually (for a better optimization, e.g.) or is it not possible to make a better mapping then the one produced automatically?

Thank you for your answers! hdl coder, soc builder, soc blockset, mapping, fpga, programmable logic, optimization MATLAB Answers — New Questions

​

Different output from ucover and musyn on different computers
Matlab News

Different output from ucover and musyn on different computers

PuTI / 2025-06-25

Hello
I am working on control design using ucover and musyn functions with a colleague, and we are sharing scripts to generate controllers. We see that the same script does not produce the same controller on our computers, even though all inputs and Matlab versions are identical (24.2.0.2923080 (R2024b) Update 6).
Basically, we input FRD objects into ucover, which outputs an uncertainty model, which is processed and in turn fed into musyn, whcih outputs the controller.
I’ve found that the output from musyn is different, even if I fetch all inputs to musyn from my colleagues workspace. So the difference is introduced in the function itself, likely related to some optimization or floating point processing.
I’ve seen some other posts dealing with this, for example this one:
https://se.mathworks.com/matlabcentral/answers/130493-how-come-i-get-different-output-answers-with-the-same-matlab-version-the-same-code-installed-on-two?s_tid=ta_ans_results
We both get the same output from this prompt, so I assume differing BLAS versions is not a problem (both apparently use AVX2):
>> version(‘-blas’)
ans =
‘Intel(R) oneAPI Math Kernel Library Version 2024.1-Product Build 20240215 for Intel(R) 64 architecture applications (CNR branch AVX2)’
I’ve also found that, if we restrict MATALB to 1 CPU by running
maxNumCompThreads(1)
the output from the ucover function becomes identical (at least for our test case). But the output from musyn is still different on our computers, even with identical input. The difference is large enough to be very significant from a control design perspective, so this is a bit frustrating since we want to be able to reproduce the same controllers in the future, using the script as a recipe (for tracability).
Any tips are greatly appreciated, thanks!Hello
I am working on control design using ucover and musyn functions with a colleague, and we are sharing scripts to generate controllers. We see that the same script does not produce the same controller on our computers, even though all inputs and Matlab versions are identical (24.2.0.2923080 (R2024b) Update 6).
Basically, we input FRD objects into ucover, which outputs an uncertainty model, which is processed and in turn fed into musyn, whcih outputs the controller.
I’ve found that the output from musyn is different, even if I fetch all inputs to musyn from my colleagues workspace. So the difference is introduced in the function itself, likely related to some optimization or floating point processing.
I’ve seen some other posts dealing with this, for example this one:
https://se.mathworks.com/matlabcentral/answers/130493-how-come-i-get-different-output-answers-with-the-same-matlab-version-the-same-code-installed-on-two?s_tid=ta_ans_results
We both get the same output from this prompt, so I assume differing BLAS versions is not a problem (both apparently use AVX2):
>> version(‘-blas’)
ans =
‘Intel(R) oneAPI Math Kernel Library Version 2024.1-Product Build 20240215 for Intel(R) 64 architecture applications (CNR branch AVX2)’
I’ve also found that, if we restrict MATALB to 1 CPU by running
maxNumCompThreads(1)
the output from the ucover function becomes identical (at least for our test case). But the output from musyn is still different on our computers, even with identical input. The difference is large enough to be very significant from a control design perspective, so this is a bit frustrating since we want to be able to reproduce the same controllers in the future, using the script as a recipe (for tracability).
Any tips are greatly appreciated, thanks! Hello
I am working on control design using ucover and musyn functions with a colleague, and we are sharing scripts to generate controllers. We see that the same script does not produce the same controller on our computers, even though all inputs and Matlab versions are identical (24.2.0.2923080 (R2024b) Update 6).
Basically, we input FRD objects into ucover, which outputs an uncertainty model, which is processed and in turn fed into musyn, whcih outputs the controller.
I’ve found that the output from musyn is different, even if I fetch all inputs to musyn from my colleagues workspace. So the difference is introduced in the function itself, likely related to some optimization or floating point processing.
I’ve seen some other posts dealing with this, for example this one:
https://se.mathworks.com/matlabcentral/answers/130493-how-come-i-get-different-output-answers-with-the-same-matlab-version-the-same-code-installed-on-two?s_tid=ta_ans_results
We both get the same output from this prompt, so I assume differing BLAS versions is not a problem (both apparently use AVX2):
>> version(‘-blas’)
ans =
‘Intel(R) oneAPI Math Kernel Library Version 2024.1-Product Build 20240215 for Intel(R) 64 architecture applications (CNR branch AVX2)’
I’ve also found that, if we restrict MATALB to 1 CPU by running
maxNumCompThreads(1)
the output from the ucover function becomes identical (at least for our test case). But the output from musyn is still different on our computers, even with identical input. The difference is large enough to be very significant from a control design perspective, so this is a bit frustrating since we want to be able to reproduce the same controllers in the future, using the script as a recipe (for tracability).
Any tips are greatly appreciated, thanks! ucover, musyn, avx2 MATLAB Answers — New Questions

​

MATLAB Classification Learner App
Matlab News

MATLAB Classification Learner App

PuTI / 2025-06-25

"When choosing a Holdout validation method before training any of the available models so that you can compare all the models in your session using the same validation technique", does the Classification Learner train all models on the same training data samples and compute validation accuracy on the same validation data samples, or do the data samples differ each time a new model is trained?"When choosing a Holdout validation method before training any of the available models so that you can compare all the models in your session using the same validation technique", does the Classification Learner train all models on the same training data samples and compute validation accuracy on the same validation data samples, or do the data samples differ each time a new model is trained? "When choosing a Holdout validation method before training any of the available models so that you can compare all the models in your session using the same validation technique", does the Classification Learner train all models on the same training data samples and compute validation accuracy on the same validation data samples, or do the data samples differ each time a new model is trained? classifcation learner MATLAB Answers — New Questions

​

Help with HSDM model for lithium adsorption: simulated curves do not match experimental data (based on Jiang et al., 2020)
Matlab News

Help with HSDM model for lithium adsorption: simulated curves do not match experimental data (based on Jiang et al., 2020)

PuTI / 2025-06-25

Hello everyone,
I’m trying to replicate the results from the paper by Jiang et al. (2020):
*“Application of concentration-dependent HSDM to the lithium adsorption from brine in fixed bed columns” – Separation and Purification Technology 241, 116682.
The paper models lithium adsorption in a fixed bed packed with Li–Al layered double hydroxide resins. It uses a concentration-dependent Homogeneous Surface Diffusion Model (HSDM), accounting for axial dispersion, film diffusion, surface diffusion, and Langmuir equilibrium. I’ve implemented a full MATLAB simulation including radial discretization inside the particles and a coupling with the axial profile.
I’ve followed the theoretical development very closely and used the same parameters as those reported by the authors. However, the breakthrough curves generated by my model still don’t fully match the experimental data shown in the paper (especially at intermediate values of C_out/C_in).
I suspect there may be a mistake in my implementation of either:
the mass balance in the fluid phase,
the boundary condition at the surface of the particle,
or how I define the rate of mass transfer using Kf.
I’m sharing my complete code below, and I would appreciate any suggestions or corrections you may have.

function hsdm_column_simulation_v2
% Full HSDM model with radial diffusion dependent on loading (Jiang et al. 2023)
clc; clear; close all

%% ==== PARÁMETROS DEL SISTEMA ==== –> %% ==== SYSTEM PARAMETERS ====
% Parámetros de la columna –> % Column parameters
Q = (15e-6)/60; % Brine flow rate [m3/s]
D = 0.02; % Column diameter [m]
A = pi/4 * D^2; % Cross-sectional area [m2]
v = Q/A; % Superficial or interstitial velocity [m/s]
epsilon = 0.355; % Bed void fraction
mu = 6.493e-3; % Fluid dynamic viscosity [Pa·s]

% Parámetros de la resina –> % Resin properties
rho = 1.3787; % Solid density [g/L] (coherent with q in mg/L)
dp = 0.65/1000; % Particle diameter [m]
Dm = 1.166e-5 / 10000; % Lithium diffusivity [m2/s]
R = 0.000325; % Particle radius [m]
Dax = 0.44*Dm + 0.83*v*dp; % Axial dispersion [m²/s] = 4.2983e-5

%% Isoterma de Langmuir –> %% Langmuir Isotherm
qmax = 5.9522; % Langmuir parameter [mg/g]
b = 0.03439; % Langmuir parameter [L/mg]

%% Difusión superficial dependiente de la carga –> %% Surface diffusion dependent on loading
Ds0 = 4e-14 ; % Surface diffusion coef. at 0 coverage [m²/s] (original was 3.2258e-14)
k_exp = 0.505; % Dimensionless constant

%% Correlaciones empíricas –> %% Empirical correlations
Re = (rho * v * dp) / mu;
Sc = mu / (rho * Dm);
Sh = 1.09 + 0.5 * Re^0.5 * Sc^(1/3);
Kf = Sh * Dm / dp; % 6.5386e-5

%% Discretización –> %% Discretization
L = 0.60; % Column height [m]
Nz = 20; % Axial nodes
Nr = 5; % Radial nodes per particle
dz = L / (Nz – 1);
dr = R / Nr;

%% Condiciones operacionales –> %% Operating conditions
cFeedVec = [300, 350, 400]; % mg/L
tf = 36000; % Final time [s] (600 min)
tspan = [0 tf];
colores = [‘b’,’g’,’r’];

%% Figura –> %% Plot
figure; hold on
for j = 1:length(cFeedVec)
cFeed = cFeedVec(j);

% Condiciones iniciales para el lecho y la partícula
c0 = zeros(Nz,1); % Initial concentration in fluid: C = 0
q0 = zeros(Nz*Nr,1); % Initial loading in particles: q = 0
y0 = [c0; q0];

% Agrupación de parámetros –> % Parameter grouping
param = struct(‘Nz’,Nz,’Nr’,Nr,’dz’,dz,’dr’,dr,’R’,R,…
‘epsilon’,epsilon,’rho’,rho,’v’,v,’Dax’,Dax,…
‘qmax’,qmax,’b’,b,’Ds0′,Ds0,’k’,k_exp,…
‘cFeed’,cFeed,’Kf’,Kf);

%% Resolución del sistema con ode15s –> %% System solution using ode15s
[T, Y] = ode15s(@(t,y) hsdm_rhs(t,y,param), tspan, y0);

% Ploteo de gráfico con salida normalizada –> % Plot normalized outlet
C_out = Y(:,Nz);
plot(T/60, C_out / cFeed, colores(j), ‘LineWidth’, 2, …
‘DisplayName’, [‘C_{in} = ‘ num2str(cFeed) ‘ mg/L’]);
end

% %% Evaluación de carga adsorbida para corroborar modelo
% Nz = param.Nz;
% Nr = param.Nr;
% R = param.R;
% dr = param.dr;
% qmax = param.qmax;
% q_final = reshape(Y(end, Nz+1:end), Nr, Nz); % q(r,z) at final time
% q_avg = trapz(linspace(0, R, Nr), q_final .* linspace(0, R, Nr)’, 1) * 2 / R^2;
% fprintf(‘n—– Saturation Analysis for C_in = %d mg/L —–n’, cFeed);
% fprintf(‘Global average q : %.4f mg/gn’, mean(q_avg));
% fprintf(‘Max q in column : %.4f mg/gn’, max(q_avg));
% fprintf(‘Theoretical qmax : %.4f mg/gn’, qmax);

%% Gráfico de Cout/Cin vs tiempo –> %% Plot Cout/Cin vs time
xlabel(‘Tiempo (min)’)
ylabel(‘C_{out} / C_{in}’)
title(‘Curva de ruptura Modelo HSDM’)
legend(‘Location’,’southeast’)
set(gca, ‘FontName’, ‘Palatino Linotype’) % Axes font
box on

%% Puntos experimentales aproximados (visualmente desde el paper)
t_exp = 0:30:600;
Cexp_300 = [0.00 0.22 0.36 0.48 0.57 0.63 0.69 0.73 0.77 0.80 …
0.82 0.84 0.85 0.86 0.87 0.88 0.88 0.89 0.89 0.89 0.90];
Cexp_350 = [0.00 0.26 0.40 0.53 0.62 0.69 0.74 0.78 0.81 0.83 …
0.85 0.86 0.87 0.88 0.88 0.89 0.89 0.90 0.90 0.90 0.91];
Cexp_400 = [0.00 0.29 0.45 0.59 0.68 0.75 0.79 0.83 0.85 0.87 …
0.88 0.89 0.90 0.90 0.91 0.91 0.91 0.91 0.92 0.92 0.92];

% Superponer puntos experimentales –> % Plot experimental data
plot(t_exp, Cexp_400, ‘r^’, ‘MarkerFaceColor’, ‘r’, ‘DisplayName’, ‘Exp 400 mg/L’)
plot(t_exp, Cexp_350, ‘go’, ‘MarkerFaceColor’, ‘g’, ‘DisplayName’, ‘Exp 350 mg/L’)
plot(t_exp, Cexp_300, ‘bs’, ‘MarkerFaceColor’, ‘b’, ‘DisplayName’, ‘Exp 300 mg/L’)

end

%% FUNCIÓN RHS DEL MODELO HSDM –> %% RHS FUNCTION FOR HSDM MODEL
function dydt = hsdm_rhs(~, y, p)
% Extraer parámetros –> % Extract parameters
Nz = p.Nz; Nr = p.Nr; dz = p.dz; dr = p.dr;
R = p.R; epsilon = p.epsilon; rho = p.rho;
v = p.v; Dax = p.Dax; qmax = p.qmax; b = p.b;
Ds0 = p.Ds0; k_exp = p.k; cFeed = p.cFeed; Kf = p.Kf;

% Separar variables –> % Split variables
c = y(1:Nz);
q = reshape(y(Nz+1:end), Nr, Nz); % q(r,z)

% Inicializar derivadas –> % Initialize derivatives
dc_dt = zeros(Nz,1);
dq_dt = zeros(Nr,Nz);

%% Balance de masa axial (fase fluida) –> %% Mass balance (fluid phase)
for i = 2:Nz-1
dcdz = (c(i+1)-c(i-1))/(2*dz);
d2cdz2 = (c(i+1) – 2*c(i) + c(i-1))/dz^2;
qsurf = q(end,i);
Csurf = c(i);
dqR_dt = (3/R) * Kf * (Csurf – qsurf);
dc_dt(i) = Dax * d2cdz2 – v * dcdz – ((1 – epsilon)/epsilon) * rho * 1000 * dqR_dt;
end

%% Condiciones de contorno en la columna
% Entrada z = 0 – tipo Danckwerts
qsurf = q(end,1);
Csurf = c(1);
dqR_dt_in = (3 / R) * Kf * (Csurf – qsurf);
dc_dt(1) = Dax * (c(2) – c(1)) / dz^2 – v * (cFeed – c(1)) – ((1 – epsilon)/epsilon) * rho * 1000 * dqR_dt_in;

% Salida z = L
dc_dt(end) = Dax * (c(end-1) – c(end)) / dz;

%% Difusión radial al interior de la partícula
for iz = 1:Nz
for ir = 2:Nr-1
rq = (ir-1)*dr;
d2q = (q(ir+1,iz) – 2*q(ir,iz) + q(ir-1,iz)) / dr^2;
Ds = Ds0 * (1 – q(ir,iz)/qmax)^k_exp;
dq_dt(ir,iz) = Ds * (d2q + (2/rq)*(q(ir+1,iz)-q(ir-1,iz))/(2*dr));
end

% Centro de la partícula
dq_dt(1,iz) = 0;

% Superficie de la partícula
q_eq = (qmax * b * c(iz)) / (1 + b * c(iz));
dq_dt(Nr,iz) = 3 * Kf / R * (q_eq – q(Nr,iz));
end

% Vector final
dydt = [dc_dt; dq_dt(:)];
endHello everyone,
I’m trying to replicate the results from the paper by Jiang et al. (2020):
*“Application of concentration-dependent HSDM to the lithium adsorption from brine in fixed bed columns” – Separation and Purification Technology 241, 116682.
The paper models lithium adsorption in a fixed bed packed with Li–Al layered double hydroxide resins. It uses a concentration-dependent Homogeneous Surface Diffusion Model (HSDM), accounting for axial dispersion, film diffusion, surface diffusion, and Langmuir equilibrium. I’ve implemented a full MATLAB simulation including radial discretization inside the particles and a coupling with the axial profile.
I’ve followed the theoretical development very closely and used the same parameters as those reported by the authors. However, the breakthrough curves generated by my model still don’t fully match the experimental data shown in the paper (especially at intermediate values of C_out/C_in).
I suspect there may be a mistake in my implementation of either:
the mass balance in the fluid phase,
the boundary condition at the surface of the particle,
or how I define the rate of mass transfer using Kf.
I’m sharing my complete code below, and I would appreciate any suggestions or corrections you may have.

function hsdm_column_simulation_v2
% Full HSDM model with radial diffusion dependent on loading (Jiang et al. 2023)
clc; clear; close all

%% ==== PARÁMETROS DEL SISTEMA ==== –> %% ==== SYSTEM PARAMETERS ====
% Parámetros de la columna –> % Column parameters
Q = (15e-6)/60; % Brine flow rate [m3/s]
D = 0.02; % Column diameter [m]
A = pi/4 * D^2; % Cross-sectional area [m2]
v = Q/A; % Superficial or interstitial velocity [m/s]
epsilon = 0.355; % Bed void fraction
mu = 6.493e-3; % Fluid dynamic viscosity [Pa·s]

% Parámetros de la resina –> % Resin properties
rho = 1.3787; % Solid density [g/L] (coherent with q in mg/L)
dp = 0.65/1000; % Particle diameter [m]
Dm = 1.166e-5 / 10000; % Lithium diffusivity [m2/s]
R = 0.000325; % Particle radius [m]
Dax = 0.44*Dm + 0.83*v*dp; % Axial dispersion [m²/s] = 4.2983e-5

%% Isoterma de Langmuir –> %% Langmuir Isotherm
qmax = 5.9522; % Langmuir parameter [mg/g]
b = 0.03439; % Langmuir parameter [L/mg]

%% Difusión superficial dependiente de la carga –> %% Surface diffusion dependent on loading
Ds0 = 4e-14 ; % Surface diffusion coef. at 0 coverage [m²/s] (original was 3.2258e-14)
k_exp = 0.505; % Dimensionless constant

%% Correlaciones empíricas –> %% Empirical correlations
Re = (rho * v * dp) / mu;
Sc = mu / (rho * Dm);
Sh = 1.09 + 0.5 * Re^0.5 * Sc^(1/3);
Kf = Sh * Dm / dp; % 6.5386e-5

%% Discretización –> %% Discretization
L = 0.60; % Column height [m]
Nz = 20; % Axial nodes
Nr = 5; % Radial nodes per particle
dz = L / (Nz – 1);
dr = R / Nr;

%% Condiciones operacionales –> %% Operating conditions
cFeedVec = [300, 350, 400]; % mg/L
tf = 36000; % Final time [s] (600 min)
tspan = [0 tf];
colores = [‘b’,’g’,’r’];

%% Figura –> %% Plot
figure; hold on
for j = 1:length(cFeedVec)
cFeed = cFeedVec(j);

% Condiciones iniciales para el lecho y la partícula
c0 = zeros(Nz,1); % Initial concentration in fluid: C = 0
q0 = zeros(Nz*Nr,1); % Initial loading in particles: q = 0
y0 = [c0; q0];

% Agrupación de parámetros –> % Parameter grouping
param = struct(‘Nz’,Nz,’Nr’,Nr,’dz’,dz,’dr’,dr,’R’,R,…
‘epsilon’,epsilon,’rho’,rho,’v’,v,’Dax’,Dax,…
‘qmax’,qmax,’b’,b,’Ds0′,Ds0,’k’,k_exp,…
‘cFeed’,cFeed,’Kf’,Kf);

%% Resolución del sistema con ode15s –> %% System solution using ode15s
[T, Y] = ode15s(@(t,y) hsdm_rhs(t,y,param), tspan, y0);

% Ploteo de gráfico con salida normalizada –> % Plot normalized outlet
C_out = Y(:,Nz);
plot(T/60, C_out / cFeed, colores(j), ‘LineWidth’, 2, …
‘DisplayName’, [‘C_{in} = ‘ num2str(cFeed) ‘ mg/L’]);
end

% %% Evaluación de carga adsorbida para corroborar modelo
% Nz = param.Nz;
% Nr = param.Nr;
% R = param.R;
% dr = param.dr;
% qmax = param.qmax;
% q_final = reshape(Y(end, Nz+1:end), Nr, Nz); % q(r,z) at final time
% q_avg = trapz(linspace(0, R, Nr), q_final .* linspace(0, R, Nr)’, 1) * 2 / R^2;
% fprintf(‘n—– Saturation Analysis for C_in = %d mg/L —–n’, cFeed);
% fprintf(‘Global average q : %.4f mg/gn’, mean(q_avg));
% fprintf(‘Max q in column : %.4f mg/gn’, max(q_avg));
% fprintf(‘Theoretical qmax : %.4f mg/gn’, qmax);

%% Gráfico de Cout/Cin vs tiempo –> %% Plot Cout/Cin vs time
xlabel(‘Tiempo (min)’)
ylabel(‘C_{out} / C_{in}’)
title(‘Curva de ruptura Modelo HSDM’)
legend(‘Location’,’southeast’)
set(gca, ‘FontName’, ‘Palatino Linotype’) % Axes font
box on

%% Puntos experimentales aproximados (visualmente desde el paper)
t_exp = 0:30:600;
Cexp_300 = [0.00 0.22 0.36 0.48 0.57 0.63 0.69 0.73 0.77 0.80 …
0.82 0.84 0.85 0.86 0.87 0.88 0.88 0.89 0.89 0.89 0.90];
Cexp_350 = [0.00 0.26 0.40 0.53 0.62 0.69 0.74 0.78 0.81 0.83 …
0.85 0.86 0.87 0.88 0.88 0.89 0.89 0.90 0.90 0.90 0.91];
Cexp_400 = [0.00 0.29 0.45 0.59 0.68 0.75 0.79 0.83 0.85 0.87 …
0.88 0.89 0.90 0.90 0.91 0.91 0.91 0.91 0.92 0.92 0.92];

% Superponer puntos experimentales –> % Plot experimental data
plot(t_exp, Cexp_400, ‘r^’, ‘MarkerFaceColor’, ‘r’, ‘DisplayName’, ‘Exp 400 mg/L’)
plot(t_exp, Cexp_350, ‘go’, ‘MarkerFaceColor’, ‘g’, ‘DisplayName’, ‘Exp 350 mg/L’)
plot(t_exp, Cexp_300, ‘bs’, ‘MarkerFaceColor’, ‘b’, ‘DisplayName’, ‘Exp 300 mg/L’)

end

%% FUNCIÓN RHS DEL MODELO HSDM –> %% RHS FUNCTION FOR HSDM MODEL
function dydt = hsdm_rhs(~, y, p)
% Extraer parámetros –> % Extract parameters
Nz = p.Nz; Nr = p.Nr; dz = p.dz; dr = p.dr;
R = p.R; epsilon = p.epsilon; rho = p.rho;
v = p.v; Dax = p.Dax; qmax = p.qmax; b = p.b;
Ds0 = p.Ds0; k_exp = p.k; cFeed = p.cFeed; Kf = p.Kf;

% Separar variables –> % Split variables
c = y(1:Nz);
q = reshape(y(Nz+1:end), Nr, Nz); % q(r,z)

% Inicializar derivadas –> % Initialize derivatives
dc_dt = zeros(Nz,1);
dq_dt = zeros(Nr,Nz);

%% Balance de masa axial (fase fluida) –> %% Mass balance (fluid phase)
for i = 2:Nz-1
dcdz = (c(i+1)-c(i-1))/(2*dz);
d2cdz2 = (c(i+1) – 2*c(i) + c(i-1))/dz^2;
qsurf = q(end,i);
Csurf = c(i);
dqR_dt = (3/R) * Kf * (Csurf – qsurf);
dc_dt(i) = Dax * d2cdz2 – v * dcdz – ((1 – epsilon)/epsilon) * rho * 1000 * dqR_dt;
end

%% Condiciones de contorno en la columna
% Entrada z = 0 – tipo Danckwerts
qsurf = q(end,1);
Csurf = c(1);
dqR_dt_in = (3 / R) * Kf * (Csurf – qsurf);
dc_dt(1) = Dax * (c(2) – c(1)) / dz^2 – v * (cFeed – c(1)) – ((1 – epsilon)/epsilon) * rho * 1000 * dqR_dt_in;

% Salida z = L
dc_dt(end) = Dax * (c(end-1) – c(end)) / dz;

%% Difusión radial al interior de la partícula
for iz = 1:Nz
for ir = 2:Nr-1
rq = (ir-1)*dr;
d2q = (q(ir+1,iz) – 2*q(ir,iz) + q(ir-1,iz)) / dr^2;
Ds = Ds0 * (1 – q(ir,iz)/qmax)^k_exp;
dq_dt(ir,iz) = Ds * (d2q + (2/rq)*(q(ir+1,iz)-q(ir-1,iz))/(2*dr));
end

% Centro de la partícula
dq_dt(1,iz) = 0;

% Superficie de la partícula
q_eq = (qmax * b * c(iz)) / (1 + b * c(iz));
dq_dt(Nr,iz) = 3 * Kf / R * (q_eq – q(Nr,iz));
end

% Vector final
dydt = [dc_dt; dq_dt(:)];
end Hello everyone,
I’m trying to replicate the results from the paper by Jiang et al. (2020):
*“Application of concentration-dependent HSDM to the lithium adsorption from brine in fixed bed columns” – Separation and Purification Technology 241, 116682.
The paper models lithium adsorption in a fixed bed packed with Li–Al layered double hydroxide resins. It uses a concentration-dependent Homogeneous Surface Diffusion Model (HSDM), accounting for axial dispersion, film diffusion, surface diffusion, and Langmuir equilibrium. I’ve implemented a full MATLAB simulation including radial discretization inside the particles and a coupling with the axial profile.
I’ve followed the theoretical development very closely and used the same parameters as those reported by the authors. However, the breakthrough curves generated by my model still don’t fully match the experimental data shown in the paper (especially at intermediate values of C_out/C_in).
I suspect there may be a mistake in my implementation of either:
the mass balance in the fluid phase,
the boundary condition at the surface of the particle,
or how I define the rate of mass transfer using Kf.
I’m sharing my complete code below, and I would appreciate any suggestions or corrections you may have.

function hsdm_column_simulation_v2
% Full HSDM model with radial diffusion dependent on loading (Jiang et al. 2023)
clc; clear; close all

%% ==== PARÁMETROS DEL SISTEMA ==== –> %% ==== SYSTEM PARAMETERS ====
% Parámetros de la columna –> % Column parameters
Q = (15e-6)/60; % Brine flow rate [m3/s]
D = 0.02; % Column diameter [m]
A = pi/4 * D^2; % Cross-sectional area [m2]
v = Q/A; % Superficial or interstitial velocity [m/s]
epsilon = 0.355; % Bed void fraction
mu = 6.493e-3; % Fluid dynamic viscosity [Pa·s]

% Parámetros de la resina –> % Resin properties
rho = 1.3787; % Solid density [g/L] (coherent with q in mg/L)
dp = 0.65/1000; % Particle diameter [m]
Dm = 1.166e-5 / 10000; % Lithium diffusivity [m2/s]
R = 0.000325; % Particle radius [m]
Dax = 0.44*Dm + 0.83*v*dp; % Axial dispersion [m²/s] = 4.2983e-5

%% Isoterma de Langmuir –> %% Langmuir Isotherm
qmax = 5.9522; % Langmuir parameter [mg/g]
b = 0.03439; % Langmuir parameter [L/mg]

%% Difusión superficial dependiente de la carga –> %% Surface diffusion dependent on loading
Ds0 = 4e-14 ; % Surface diffusion coef. at 0 coverage [m²/s] (original was 3.2258e-14)
k_exp = 0.505; % Dimensionless constant

%% Correlaciones empíricas –> %% Empirical correlations
Re = (rho * v * dp) / mu;
Sc = mu / (rho * Dm);
Sh = 1.09 + 0.5 * Re^0.5 * Sc^(1/3);
Kf = Sh * Dm / dp; % 6.5386e-5

%% Discretización –> %% Discretization
L = 0.60; % Column height [m]
Nz = 20; % Axial nodes
Nr = 5; % Radial nodes per particle
dz = L / (Nz – 1);
dr = R / Nr;

%% Condiciones operacionales –> %% Operating conditions
cFeedVec = [300, 350, 400]; % mg/L
tf = 36000; % Final time [s] (600 min)
tspan = [0 tf];
colores = [‘b’,’g’,’r’];

%% Figura –> %% Plot
figure; hold on
for j = 1:length(cFeedVec)
cFeed = cFeedVec(j);

% Condiciones iniciales para el lecho y la partícula
c0 = zeros(Nz,1); % Initial concentration in fluid: C = 0
q0 = zeros(Nz*Nr,1); % Initial loading in particles: q = 0
y0 = [c0; q0];

% Agrupación de parámetros –> % Parameter grouping
param = struct(‘Nz’,Nz,’Nr’,Nr,’dz’,dz,’dr’,dr,’R’,R,…
‘epsilon’,epsilon,’rho’,rho,’v’,v,’Dax’,Dax,…
‘qmax’,qmax,’b’,b,’Ds0′,Ds0,’k’,k_exp,…
‘cFeed’,cFeed,’Kf’,Kf);

%% Resolución del sistema con ode15s –> %% System solution using ode15s
[T, Y] = ode15s(@(t,y) hsdm_rhs(t,y,param), tspan, y0);

% Ploteo de gráfico con salida normalizada –> % Plot normalized outlet
C_out = Y(:,Nz);
plot(T/60, C_out / cFeed, colores(j), ‘LineWidth’, 2, …
‘DisplayName’, [‘C_{in} = ‘ num2str(cFeed) ‘ mg/L’]);
end

% %% Evaluación de carga adsorbida para corroborar modelo
% Nz = param.Nz;
% Nr = param.Nr;
% R = param.R;
% dr = param.dr;
% qmax = param.qmax;
% q_final = reshape(Y(end, Nz+1:end), Nr, Nz); % q(r,z) at final time
% q_avg = trapz(linspace(0, R, Nr), q_final .* linspace(0, R, Nr)’, 1) * 2 / R^2;
% fprintf(‘n—– Saturation Analysis for C_in = %d mg/L —–n’, cFeed);
% fprintf(‘Global average q : %.4f mg/gn’, mean(q_avg));
% fprintf(‘Max q in column : %.4f mg/gn’, max(q_avg));
% fprintf(‘Theoretical qmax : %.4f mg/gn’, qmax);

%% Gráfico de Cout/Cin vs tiempo –> %% Plot Cout/Cin vs time
xlabel(‘Tiempo (min)’)
ylabel(‘C_{out} / C_{in}’)
title(‘Curva de ruptura Modelo HSDM’)
legend(‘Location’,’southeast’)
set(gca, ‘FontName’, ‘Palatino Linotype’) % Axes font
box on

%% Puntos experimentales aproximados (visualmente desde el paper)
t_exp = 0:30:600;
Cexp_300 = [0.00 0.22 0.36 0.48 0.57 0.63 0.69 0.73 0.77 0.80 …
0.82 0.84 0.85 0.86 0.87 0.88 0.88 0.89 0.89 0.89 0.90];
Cexp_350 = [0.00 0.26 0.40 0.53 0.62 0.69 0.74 0.78 0.81 0.83 …
0.85 0.86 0.87 0.88 0.88 0.89 0.89 0.90 0.90 0.90 0.91];
Cexp_400 = [0.00 0.29 0.45 0.59 0.68 0.75 0.79 0.83 0.85 0.87 …
0.88 0.89 0.90 0.90 0.91 0.91 0.91 0.91 0.92 0.92 0.92];

% Superponer puntos experimentales –> % Plot experimental data
plot(t_exp, Cexp_400, ‘r^’, ‘MarkerFaceColor’, ‘r’, ‘DisplayName’, ‘Exp 400 mg/L’)
plot(t_exp, Cexp_350, ‘go’, ‘MarkerFaceColor’, ‘g’, ‘DisplayName’, ‘Exp 350 mg/L’)
plot(t_exp, Cexp_300, ‘bs’, ‘MarkerFaceColor’, ‘b’, ‘DisplayName’, ‘Exp 300 mg/L’)

end

%% FUNCIÓN RHS DEL MODELO HSDM –> %% RHS FUNCTION FOR HSDM MODEL
function dydt = hsdm_rhs(~, y, p)
% Extraer parámetros –> % Extract parameters
Nz = p.Nz; Nr = p.Nr; dz = p.dz; dr = p.dr;
R = p.R; epsilon = p.epsilon; rho = p.rho;
v = p.v; Dax = p.Dax; qmax = p.qmax; b = p.b;
Ds0 = p.Ds0; k_exp = p.k; cFeed = p.cFeed; Kf = p.Kf;

% Separar variables –> % Split variables
c = y(1:Nz);
q = reshape(y(Nz+1:end), Nr, Nz); % q(r,z)

% Inicializar derivadas –> % Initialize derivatives
dc_dt = zeros(Nz,1);
dq_dt = zeros(Nr,Nz);

%% Balance de masa axial (fase fluida) –> %% Mass balance (fluid phase)
for i = 2:Nz-1
dcdz = (c(i+1)-c(i-1))/(2*dz);
d2cdz2 = (c(i+1) – 2*c(i) + c(i-1))/dz^2;
qsurf = q(end,i);
Csurf = c(i);
dqR_dt = (3/R) * Kf * (Csurf – qsurf);
dc_dt(i) = Dax * d2cdz2 – v * dcdz – ((1 – epsilon)/epsilon) * rho * 1000 * dqR_dt;
end

%% Condiciones de contorno en la columna
% Entrada z = 0 – tipo Danckwerts
qsurf = q(end,1);
Csurf = c(1);
dqR_dt_in = (3 / R) * Kf * (Csurf – qsurf);
dc_dt(1) = Dax * (c(2) – c(1)) / dz^2 – v * (cFeed – c(1)) – ((1 – epsilon)/epsilon) * rho * 1000 * dqR_dt_in;

% Salida z = L
dc_dt(end) = Dax * (c(end-1) – c(end)) / dz;

%% Difusión radial al interior de la partícula
for iz = 1:Nz
for ir = 2:Nr-1
rq = (ir-1)*dr;
d2q = (q(ir+1,iz) – 2*q(ir,iz) + q(ir-1,iz)) / dr^2;
Ds = Ds0 * (1 – q(ir,iz)/qmax)^k_exp;
dq_dt(ir,iz) = Ds * (d2q + (2/rq)*(q(ir+1,iz)-q(ir-1,iz))/(2*dr));
end

% Centro de la partícula
dq_dt(1,iz) = 0;

% Superficie de la partícula
q_eq = (qmax * b * c(iz)) / (1 + b * c(iz));
dq_dt(Nr,iz) = 3 * Kf / R * (q_eq – q(Nr,iz));
end

% Vector final
dydt = [dc_dt; dq_dt(:)];
end adsorption, hsdm, resin, adsorption column, lithium MATLAB Answers — New Questions

​

Querying data from enum arrays using C API
Matlab News

Querying data from enum arrays using C API

PuTI / 2025-06-25

I am passing a struct as a block dialog parameter to an S-function. The struct is deeply nested and contains some fields that are enumeration arrays. The enums are defined in matlab and inherit from Simulink.IntType. I am able to grab the data fine when the field is a scalar, as in just one element. However, if the field is an enumeration array, then I cannot. For example, I have an enumeration array that in matlab shows size = [16×1]. I have a corresponding C type array of size 16, and type of the enumeration, also defined in C. I’m confused as to how to copy the data from the enum array since I’m getting rows =1, cols = 1, and numElements = 1 when running the following code.

My code is as follows:
const char *class_name = mxGetClassName(matlabArray); -> This returns the expected enumeration type name.
mxArray *enumArrayField = mxGetField(parentField, 0, “myEnumInstanceName”);

size_t rows = mxGetM(enumArrayField); %-> This returns 1
size_t cols = mxGetN(enumArrayField); %-> This also returns 1
size_t numElements = mxGetNumberOfElements(matlabArray); %-> This also returns 1.

//
void *raw_data = mxGetData(matlabArray); %->i tried to grab the data this way but doesn’t seem to work because i cannot iterate on it
size_t element_size = mxGetElementSize(matlabArray); %-> This returns 8 bytesI am passing a struct as a block dialog parameter to an S-function. The struct is deeply nested and contains some fields that are enumeration arrays. The enums are defined in matlab and inherit from Simulink.IntType. I am able to grab the data fine when the field is a scalar, as in just one element. However, if the field is an enumeration array, then I cannot. For example, I have an enumeration array that in matlab shows size = [16×1]. I have a corresponding C type array of size 16, and type of the enumeration, also defined in C. I’m confused as to how to copy the data from the enum array since I’m getting rows =1, cols = 1, and numElements = 1 when running the following code.

My code is as follows:
const char *class_name = mxGetClassName(matlabArray); -> This returns the expected enumeration type name.
mxArray *enumArrayField = mxGetField(parentField, 0, “myEnumInstanceName”);

size_t rows = mxGetM(enumArrayField); %-> This returns 1
size_t cols = mxGetN(enumArrayField); %-> This also returns 1
size_t numElements = mxGetNumberOfElements(matlabArray); %-> This also returns 1.

//
void *raw_data = mxGetData(matlabArray); %->i tried to grab the data this way but doesn’t seem to work because i cannot iterate on it
size_t element_size = mxGetElementSize(matlabArray); %-> This returns 8 bytes I am passing a struct as a block dialog parameter to an S-function. The struct is deeply nested and contains some fields that are enumeration arrays. The enums are defined in matlab and inherit from Simulink.IntType. I am able to grab the data fine when the field is a scalar, as in just one element. However, if the field is an enumeration array, then I cannot. For example, I have an enumeration array that in matlab shows size = [16×1]. I have a corresponding C type array of size 16, and type of the enumeration, also defined in C. I’m confused as to how to copy the data from the enum array since I’m getting rows =1, cols = 1, and numElements = 1 when running the following code.

My code is as follows:
const char *class_name = mxGetClassName(matlabArray); -> This returns the expected enumeration type name.
mxArray *enumArrayField = mxGetField(parentField, 0, “myEnumInstanceName”);

size_t rows = mxGetM(enumArrayField); %-> This returns 1
size_t cols = mxGetN(enumArrayField); %-> This also returns 1
size_t numElements = mxGetNumberOfElements(matlabArray); %-> This also returns 1.

//
void *raw_data = mxGetData(matlabArray); %->i tried to grab the data this way but doesn’t seem to work because i cannot iterate on it
size_t element_size = mxGetElementSize(matlabArray); %-> This returns 8 bytes simulink, matlab, matlab coder MATLAB Answers — New Questions

​

Microsoft 365 PowerShell Modules Need Better Testing
News

Microsoft 365 PowerShell Modules Need Better Testing

Tony Redmond / 2025-06-25

Problems with Azure Automation Afflict Microsoft 365 PowerShell Modules

The recent problems with the Microsoft Graph PowerShell SDK are well documented. Suffice to say that the Graph PowerShell SDK hasn’t been very stable since V2.25. V2.26 and V2.27 just didn’t work, and although Microsoft delivered a much-improved update in V2.28 in May 2025, the Graph PowerShell SDK still has problems with Azure Automation.

In the Azure Automation environment, runbooks are configured to use a runtime version of PowerShell. When a runbook starts, Azure Automation loads the dependent modules (which must be a version that matches the runtime version) on the target server where the runbook executes. Currently, Azure Automation supports runtime versions for PowerShell V5.1, V7.1, and V7.2.

A Question of .NET

PowerShell V5.1 is the “classic” version. V7-based PowerShell is “PowerShell Core.” The V7.1 and V7.2 runtimes support .NET 6 while the latest versions of PowerShell use .NET 8. Software engineering groups don’t like supporting what they consider to be outdated software, so a decision was taken to drop support for .NET 6. The net effect was that V7.1 and V7.2 runbooks couldn’t use the Graph PowerShell SDK. The workaround was to use the PowerShell V5.1 runtime or revert to V2.25 of the Graph PowerShell SDK, which still supports .NET6.

Microsoft says that the solution will come when Azure Automation supports the PowerShell V7.4 runtime. That update was supposed to arrive by June 15, 2025. It’s late, so I cannot confirm or deny if Graph PowerShell SDK V2.28 code supports PowerShell V7.4 runbooks.

The .NET Versioning Problem Strikes Exchange

A week or so ago, a reader complained that the latest version of the Exchange Online management module (now V3.8.0) didn’t run with PowerShell V7.2 runbooks. A previous comment for the article where the issue was raised said that V3.5 was required to support PowerShell V7.2 runbooks as long ago as February 13, 2025. At the time, apart from finding a relevant Stack Overflow discussion, I didn’t pay too much attention to the problem. I guess I became accustomed to the Exchange module just working while the Graph PowerShell SDK was the problem child of the Microsoft 365 PowerShell modules.

As it turns out, the Exchange Online management module shares the same problem as the Microsoft Graph PowerShell SDK. Engineering decided to remove support for .NET 6 in V3.5.1 of the Exchange module and screwed up Azure Automation V7 runbooks. The release notes for V3.5.1 are brief and concise:

Version 3.5.1

  • Bug fixes in Get-EXOMailboxPermission and Get-EXOMailbox.
  • The module has been upgraded to run on .NET 8, replacing the previous version based on .NET 6.
  • Enhancements in Add-VivaModuleFeaturePolicy.

There’s nothing to raise awareness for tenant administrators that the change in supported .NET version will stop runbooks dead in the water. It’s easy to glance over the release notes and conclude that not much has changed and it’s therefore safe to upgrade to the new version. The problem becomes very evident when the Connect-ExchangeOnline cmdlet can’t run and as a result, every other Exchange cmdlet cannot be found (Figure 1).

An Exchange Online management runbook barfs when run by Azure Automation.Microsoft 365 PowerShell.
Figure 1: An Exchange Online management runbook barfs when run by Azure Automation

The Need for Solid Azure Automation Support

No one denies that Microsoft must prune old software from their cloud services. It’s hard enough to keep a service running smoothly when it carries unnecessary baggage in the form of old code. But in the cases of both the Microsoft Graph PowerShell SDK and the Exchange Online Management module, it seems like the engineering groups never stopped to ask if the change might impact the ability of scripts to run. Running scripts interactively revealed no issues, but running code in an interactive session on a Windows PC (or even a Mac) is not the same as Azure Automation firing up a headless Linux server and configuring it with the software necessary to execute a runbook.

Ensuring that shipped modules support Azure Automation is a problem that can be solved by incorporating Azure Automation runbooks in the test procedures that must succeed before a new version of a module can be released. What’s more upsetting is the lack of awareness within Microsoft about why customers pay for Azure Automation to run scripts.

When a script moves from running interactively on an administrator workstation to become an Azure Automation runbook, it’s probably because the script is deemed to be important enough to run on a stable, robust, and secure environment, often on a schedule (the Windows Task Schedule should not be relied upon to run important scripts). In other words, Azure Automation is an important platform that deserves the respect and solid support of the Microsoft engineers that build PowerShell modules that can run within Azure Automation. That doesn’t seem to be the case today.

Too Much Disruption

Microsoft 365 tenants have suffered far too much disruption with PowerShell modules over the last few years. The retirement of the old Azure AD and MSOL modules was a necessary evil, but Microsoft didn’t handle the situation as well as they should. Many sins might be forgiven if the Microsoft 365 PowerShell modules were rock solid. They’re not currently. Let’s hope that Microsoft does a better job in their testing and pre-release verification processes for PowerShell modules in the future.


Need some assistance to write and manage PowerShell scripts for Microsoft 365? Get a copy of the Automating Microsoft 365 with PowerShell eBook, available standalone or as part of the Office 365 for IT Pros eBook bundle.

 

When running an official HTL model, an error “For this operation, the sizes of the arrays are incompatible” occurs
Matlab News

When running an official HTL model, an error “For this operation, the sizes of the arrays are incompatible” occurs

PuTI / 2025-06-24

When running the official VTOL HITL model in MATLAB 2024b, sometimes an error about array size mismatch occurs, but checking the signal output dimensions doesn’t reveal any issues,could you please advise on how to resolve this issue?When running the official VTOL HITL model in MATLAB 2024b, sometimes an error about array size mismatch occurs, but checking the signal output dimensions doesn’t reveal any issues,could you please advise on how to resolve this issue? When running the official VTOL HITL model in MATLAB 2024b, sometimes an error about array size mismatch occurs, but checking the signal output dimensions doesn’t reveal any issues,could you please advise on how to resolve this issue? hitl, vtol MATLAB Answers — New Questions

​

How to determine index for gradient?
Matlab News

How to determine index for gradient?

PuTI / 2025-06-24

Hello,
I’m trying to determine the index for a change in gradient along the radial direction from x=0 to x=1, which is expected to be negative. My code which runs but doesn’t give correct result. Kindly have a look at the same and suggest me the possible correction(s) please.
data.variable.gradpressure = 10000 x 100 matrix
data.variable.x = 1 x 100 vector
Moreover the matchflag is also false when I try to match the columns which are both equal.
The code is as below:
% Determine the index for negative gradient from x=0 to x=1
clear grad_width;
global grad_width;
global data;

match_flags = false(size(data.variable.gradpressure,1),1); % Logical vector for matching rows

% Check if any row of pressure equals x
for i = 1:size(data.variable.x, 1)
if isequal(data.variable.gradpressure(:,i)’, data.variable.x(:,i))
match_flags(i) = true;
end
end
%disp(match_flags)

threshold_fraction = 0.1;

% Preallocate result arrays
nTimes = length(data.variable.t);
grad_foot_idx = zeros(nTimes,1);
grad_head_idx = zeros(nTimes,1);
grad_width = zeros(nTimes,1);

for i = 1:nTimes
gradp = data.variable.gradpressure(i,:); % 1D vector at time i

% Avoid division by zero
valid = gradp(1:end-1) ~= 0;

% Compute gradient change (like second derivative)
change_gp = zeros(1, length(gradp)-1);
change_gp(valid) = diff(gradp)./gradp(1:end-1); % Central diff approx

% Find steepest drop (most negative change)
[max_grad1, max_grad1_idx] = min(abs(change_gp)); % Min of |second derivative|
grad_threshold = threshold_fraction * abs(max_grad1);

% Search left (foot)
left_idx = max_grad1_idx;
while left_idx > 1 && abs(change_gp(left_idx)) > grad_threshold
left_idx = left_idx – 1;
end

% Search right (head)
right_idx = max_grad1_idx;
while right_idx < length(change_gp) && abs(change_gp(right_idx)) > grad_threshold
right_idx = right_idx + 1;
end

% Store
grad_foot_idx(i) = left_idx;
grad_head_idx(i) = right_idx;
grad_width(i) = data.variable.x(right_idx) – data.variable.x(left_idx);
end

% Display last result (or modify to plot or analyze all)
disp(grad_width(end));Hello,
I’m trying to determine the index for a change in gradient along the radial direction from x=0 to x=1, which is expected to be negative. My code which runs but doesn’t give correct result. Kindly have a look at the same and suggest me the possible correction(s) please.
data.variable.gradpressure = 10000 x 100 matrix
data.variable.x = 1 x 100 vector
Moreover the matchflag is also false when I try to match the columns which are both equal.
The code is as below:
% Determine the index for negative gradient from x=0 to x=1
clear grad_width;
global grad_width;
global data;

match_flags = false(size(data.variable.gradpressure,1),1); % Logical vector for matching rows

% Check if any row of pressure equals x
for i = 1:size(data.variable.x, 1)
if isequal(data.variable.gradpressure(:,i)’, data.variable.x(:,i))
match_flags(i) = true;
end
end
%disp(match_flags)

threshold_fraction = 0.1;

% Preallocate result arrays
nTimes = length(data.variable.t);
grad_foot_idx = zeros(nTimes,1);
grad_head_idx = zeros(nTimes,1);
grad_width = zeros(nTimes,1);

for i = 1:nTimes
gradp = data.variable.gradpressure(i,:); % 1D vector at time i

% Avoid division by zero
valid = gradp(1:end-1) ~= 0;

% Compute gradient change (like second derivative)
change_gp = zeros(1, length(gradp)-1);
change_gp(valid) = diff(gradp)./gradp(1:end-1); % Central diff approx

% Find steepest drop (most negative change)
[max_grad1, max_grad1_idx] = min(abs(change_gp)); % Min of |second derivative|
grad_threshold = threshold_fraction * abs(max_grad1);

% Search left (foot)
left_idx = max_grad1_idx;
while left_idx > 1 && abs(change_gp(left_idx)) > grad_threshold
left_idx = left_idx – 1;
end

% Search right (head)
right_idx = max_grad1_idx;
while right_idx < length(change_gp) && abs(change_gp(right_idx)) > grad_threshold
right_idx = right_idx + 1;
end

% Store
grad_foot_idx(i) = left_idx;
grad_head_idx(i) = right_idx;
grad_width(i) = data.variable.x(right_idx) – data.variable.x(left_idx);
end

% Display last result (or modify to plot or analyze all)
disp(grad_width(end)); Hello,
I’m trying to determine the index for a change in gradient along the radial direction from x=0 to x=1, which is expected to be negative. My code which runs but doesn’t give correct result. Kindly have a look at the same and suggest me the possible correction(s) please.
data.variable.gradpressure = 10000 x 100 matrix
data.variable.x = 1 x 100 vector
Moreover the matchflag is also false when I try to match the columns which are both equal.
The code is as below:
% Determine the index for negative gradient from x=0 to x=1
clear grad_width;
global grad_width;
global data;

match_flags = false(size(data.variable.gradpressure,1),1); % Logical vector for matching rows

% Check if any row of pressure equals x
for i = 1:size(data.variable.x, 1)
if isequal(data.variable.gradpressure(:,i)’, data.variable.x(:,i))
match_flags(i) = true;
end
end
%disp(match_flags)

threshold_fraction = 0.1;

% Preallocate result arrays
nTimes = length(data.variable.t);
grad_foot_idx = zeros(nTimes,1);
grad_head_idx = zeros(nTimes,1);
grad_width = zeros(nTimes,1);

for i = 1:nTimes
gradp = data.variable.gradpressure(i,:); % 1D vector at time i

% Avoid division by zero
valid = gradp(1:end-1) ~= 0;

% Compute gradient change (like second derivative)
change_gp = zeros(1, length(gradp)-1);
change_gp(valid) = diff(gradp)./gradp(1:end-1); % Central diff approx

% Find steepest drop (most negative change)
[max_grad1, max_grad1_idx] = min(abs(change_gp)); % Min of |second derivative|
grad_threshold = threshold_fraction * abs(max_grad1);

% Search left (foot)
left_idx = max_grad1_idx;
while left_idx > 1 && abs(change_gp(left_idx)) > grad_threshold
left_idx = left_idx – 1;
end

% Search right (head)
right_idx = max_grad1_idx;
while right_idx < length(change_gp) && abs(change_gp(right_idx)) > grad_threshold
right_idx = right_idx + 1;
end

% Store
grad_foot_idx(i) = left_idx;
grad_head_idx(i) = right_idx;
grad_width(i) = data.variable.x(right_idx) – data.variable.x(left_idx);
end

% Display last result (or modify to plot or analyze all)
disp(grad_width(end)); gradient MATLAB Answers — New Questions

​

Converter (Three-Phase) block, Averaged Switch option, how to feed modulation waveform
Matlab News

Converter (Three-Phase) block, Averaged Switch option, how to feed modulation waveform

PuTI / 2025-06-24

Converter (Three-Phase) block:
Looking at the help description of this Simscape electrical block, I can read:
Averaged Switch — Semiconductor switch with an anti-parallel diode. The control signal port, G, accepts values in the [0,1] interval. When the value at port G is equal to 0 or 1, the averaged switch is either fully opened or fully closed, and it behaves similarly to the Ideal Semiconductor Switch block with an anti-parallel diode. When the value at port G is between 0 and 1, the averaged switch is partly opened. You can then average the PWM signal over a specified period. This allows for undersampling of the model or using modulation waveforms instead of PWM signals.
Is it possible to have an example of an "averaged switch" converter undersampled? Or an example of use of that block feeding modulation waveform instead of PWM signals?
Do I need to average the modulation waveforms? Do you have any idea how to do this?
All the example I can see in the Mathworks website doesn’t use this feature, falling into a very long simulation because not benefit the undersampling, an example should be very very usefull.
ThanksConverter (Three-Phase) block:
Looking at the help description of this Simscape electrical block, I can read:
Averaged Switch — Semiconductor switch with an anti-parallel diode. The control signal port, G, accepts values in the [0,1] interval. When the value at port G is equal to 0 or 1, the averaged switch is either fully opened or fully closed, and it behaves similarly to the Ideal Semiconductor Switch block with an anti-parallel diode. When the value at port G is between 0 and 1, the averaged switch is partly opened. You can then average the PWM signal over a specified period. This allows for undersampling of the model or using modulation waveforms instead of PWM signals.
Is it possible to have an example of an "averaged switch" converter undersampled? Or an example of use of that block feeding modulation waveform instead of PWM signals?
Do I need to average the modulation waveforms? Do you have any idea how to do this?
All the example I can see in the Mathworks website doesn’t use this feature, falling into a very long simulation because not benefit the undersampling, an example should be very very usefull.
Thanks Converter (Three-Phase) block:
Looking at the help description of this Simscape electrical block, I can read:
Averaged Switch — Semiconductor switch with an anti-parallel diode. The control signal port, G, accepts values in the [0,1] interval. When the value at port G is equal to 0 or 1, the averaged switch is either fully opened or fully closed, and it behaves similarly to the Ideal Semiconductor Switch block with an anti-parallel diode. When the value at port G is between 0 and 1, the averaged switch is partly opened. You can then average the PWM signal over a specified period. This allows for undersampling of the model or using modulation waveforms instead of PWM signals.
Is it possible to have an example of an "averaged switch" converter undersampled? Or an example of use of that block feeding modulation waveform instead of PWM signals?
Do I need to average the modulation waveforms? Do you have any idea how to do this?
All the example I can see in the Mathworks website doesn’t use this feature, falling into a very long simulation because not benefit the undersampling, an example should be very very usefull.
Thanks converter (three-phase), averaged switch MATLAB Answers — New Questions

​

first order PDE , verification of one solution
Matlab News

first order PDE , verification of one solution

PuTI / 2025-06-24

Hello
the solution of the PDE:
df(x,y)/dx + df(x,y)/dy =0
should be f= f(x-y) , with f an arbitrary function of the argument which is the compound variable (x-y).
Wanting to verify this symbolic solution I would like to execute these commands
1) syms x y real
2) syms f(x-y)
and then do the calculation
3) ver=diff(f(x-y),x)+diff(f(x-y),y)
and simplifying it should give
ver=zero

but unfortunately on the second line it
gives me an error :
———————————————————————
Error using symfun.parseString (line 101)
Invalid variable name.

Error in syms (line 276)
[name, vars] = symfun.parseString(x,’allowPercent’);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
———————————————————————–

I was kindly asking
how to proceed and be able to do this
symbolic verification

thankyou very much !
ValerioHello
the solution of the PDE:
df(x,y)/dx + df(x,y)/dy =0
should be f= f(x-y) , with f an arbitrary function of the argument which is the compound variable (x-y).
Wanting to verify this symbolic solution I would like to execute these commands
1) syms x y real
2) syms f(x-y)
and then do the calculation
3) ver=diff(f(x-y),x)+diff(f(x-y),y)
and simplifying it should give
ver=zero

but unfortunately on the second line it
gives me an error :
———————————————————————
Error using symfun.parseString (line 101)
Invalid variable name.

Error in syms (line 276)
[name, vars] = symfun.parseString(x,’allowPercent’);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
———————————————————————–

I was kindly asking
how to proceed and be able to do this
symbolic verification

thankyou very much !
Valerio Hello
the solution of the PDE:
df(x,y)/dx + df(x,y)/dy =0
should be f= f(x-y) , with f an arbitrary function of the argument which is the compound variable (x-y).
Wanting to verify this symbolic solution I would like to execute these commands
1) syms x y real
2) syms f(x-y)
and then do the calculation
3) ver=diff(f(x-y),x)+diff(f(x-y),y)
and simplifying it should give
ver=zero

but unfortunately on the second line it
gives me an error :
———————————————————————
Error using symfun.parseString (line 101)
Invalid variable name.

Error in syms (line 276)
[name, vars] = symfun.parseString(x,’allowPercent’);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
———————————————————————–

I was kindly asking
how to proceed and be able to do this
symbolic verification

thankyou very much !
Valerio symbolic functions MATLAB Answers — New Questions

​

I am learnig “Motor modeling with Simscape Electrical” from MATLAB/Simulink platform but when I got to Task 4 I could not continue because an error.
Matlab News

I am learnig “Motor modeling with Simscape Electrical” from MATLAB/Simulink platform but when I got to Task 4 I could not continue because an error.

PuTI / 2025-06-24

Below are the error and screenshot of the model:
[‘MotorModelingwithSimscapeElectrical/Solver Configuration’]: When trying to advance one time step, nonlinear solver failed to converge, residual norm too large.
Caused by:
Here is the set of components with unconverged equations:

‘MotorModelingwithSimscapeElectrical/FEM-Parameterized PMSM’
Equation location is:
‘ee.electromech.pmsm.fem_motor.fem_motor_base'(no line number info)

I believe I followed all the steps accordingly, kindly look into and let me know where I am wrong.

Thank you.Below are the error and screenshot of the model:
[‘MotorModelingwithSimscapeElectrical/Solver Configuration’]: When trying to advance one time step, nonlinear solver failed to converge, residual norm too large.
Caused by:
Here is the set of components with unconverged equations:

‘MotorModelingwithSimscapeElectrical/FEM-Parameterized PMSM’
Equation location is:
‘ee.electromech.pmsm.fem_motor.fem_motor_base'(no line number info)

I believe I followed all the steps accordingly, kindly look into and let me know where I am wrong.

Thank you. Below are the error and screenshot of the model:
[‘MotorModelingwithSimscapeElectrical/Solver Configuration’]: When trying to advance one time step, nonlinear solver failed to converge, residual norm too large.
Caused by:
Here is the set of components with unconverged equations:

‘MotorModelingwithSimscapeElectrical/FEM-Parameterized PMSM’
Equation location is:
‘ee.electromech.pmsm.fem_motor.fem_motor_base'(no line number info)

I believe I followed all the steps accordingly, kindly look into and let me know where I am wrong.

Thank you. motor, model, simulink, error MATLAB Answers — New Questions

​

Launch Plan for Office 365 for IT Pros (2026 Edition)
News

Launch Plan for Office 365 for IT Pros (2026 Edition)

Tony Redmond / 2025-06-24

Thanks to the Office 365 for IT Pros Subscribers

In a time when some question the value of books, we deeply appreciate the support of the folks who subscribe to the Office 365 for IT Pros eBook. AI tools like ChatGPT and Copilot can find and synthesize information scoured from across the internet to respond to questions, but so far generative AI cannot provide the context or insight that understanding technology often needs.

An ecosystem like Microsoft 365 can become terribly complicated through different combinations of products, licenses, and configurations. Throw in hybrid organizations and there’s enough to melt an administrator’s mind. We don’t pretend that we have more answers than AI can generate; we do say that our answers are based on hard-won experience and a ton of research into why Microsoft 365 works the way that it does. In other words, we ask “why” when AI just accepts what something is.

Office 365 for IT Pros (2026 edition)

Heading for a July 1 Release

It’s just seven days to go before we release Office 365 for IT Pros (2026 edition), including Automating Microsoft 365 with PowerShell (2nd edition). The writing team is still heads-down to make sure that the content is compelling, informative, and up to date, and that any of the issues raised by technical editor Vasil Michev are addressed.

We’ve received some questions about how we will release the 2026 edition. Thankfully, people want to know when they can subscribe to the new edition. With that in mind, here’s our plan.

The Release Plan

The first task is to complete all the updates to the chapters, resolve any open issues, chase down the last-minute glitches, and have a coffee. We can then proceed to do the following:

  • Generate the PDF and EPUB files for the two books, check that everything is OK, and if all checks out, upload the new files to Gumroad.com. We then switch the shortcut URL for the current version from the 2025 edition to the 2026 edition.
  • The 2025 edition files will remain online to allow subscribers to that edition to download the final updates. We made some small tweaks to the Office 365 for IT Pros (2025 edition) files since releasing update #120 on June 1. The current update number for the 2025 edition is 120.4, dated 21 June 2025. We will start the 2026 edition at update 121.0.
  • We will send an offer to current subscribers to allow them to extend their subscription to cover the 2026 edition and receive monthly updates for the next year. To reward the folks who renew subscriptions immediately a new edition is available, the price to extend a subscription in July 2025 is $18.95. After August 1, 2025, the price to extend a subscription increases to $24.95.
  • Anyone who bought a full-price ($49.95) copy of the 2025 edition in June 2025 will receive a full discount code to extend their subscription for the 2026 edition.
  • The update offer and codes are distributed via email to the addresses registered when people subscribed to the 2025 edition. If an email address is incorrect, you won’t receive anything from us. In this case, send email to contact@office365itpros.com to tell us what’s going on. If we can find you on our subscriber list, we’ll respond with the code.
  • Some tenants consider email from Gumroad.com as spam. Our email isn’t and we have experimented with sending email using the Exchange HVE and Azure ECS solutions during the last year. HVE is now out of the picture because Microsoft has decided that it will only handle internal email, but anyway, mass mailings about new versions are always sent from Gumroad.
  • New subscriptions for the 2026 edition cost $59.95. This is our first price increase since 2015. According to Copilot, the price should be $67.73, but accepting an AI recommendation without question is never a good idea. We believe that the increase is more than justified by the massive amount of information contained in the two books, which can be reasoned over by a Copilot agent if you want.
  • The Automating Microsoft 365 with PowerShell eBook is bundled with Office 365 for IT Pros and doesn’t have to be bought separately. People who subscribed to the first edition of the PowerShell book can download the second edition free of charge. It’s our way of saying thanks to those who bought the first edition while we built out the content.
  • For those who like paper books, a version of Automating Microsoft 365 with PowerShell is available in paperback from Amazon.com. This is the same text as the electronic version, except that hyperlinks are converted to footnotes. The paperback also has an index because it’s harder to search through paper. Regretfully, we haven’t found a way to update a paperback remotely, so buying a paper copy of the PowerShell book is like buying any other paperback.
  • Anyone who received a free copy of the 2025 edition from us or another source (companies commonly buy multiple copies to give to customers) can use the code to extend their subscription for $18.95. Alternatively, ask the source for the free copy – maybe they have free copies of the 2026 edition to distribute.

2026 or Twelfth?

Some ask us why we name the book after the year ahead. We do so because we match Microsoft’s fiscal year. Their FY26 begins on July 1, 2025. We could call this release Office 365 for IT Pros (12th edition). Maybe that would be clearer, but the date does help in terms of telling people how recent the content is.

Enjoy the 2026 edition!

 

PV array with DC/DC Buck Converter
Matlab News

PV array with DC/DC Buck Converter

PuTI / 2025-06-23

I did a simulink simulation for PV array with DC/DC Buck Converter to charged the battery. But i after try to simulate it i found that my PV voltage is close to my Output Voltage. It seems like its not a correct results. The parameter of PV Voc (19V), Isc (0.124A) ,Vmp (15.4V), Imp ( 0.1A) is set by my ownself from a solar panel datasheet. While the converter should step down the voltage to 8.4V (2s lithium ion battery). P&O MPPT already been implement in this circuit.I did a simulink simulation for PV array with DC/DC Buck Converter to charged the battery. But i after try to simulate it i found that my PV voltage is close to my Output Voltage. It seems like its not a correct results. The parameter of PV Voc (19V), Isc (0.124A) ,Vmp (15.4V), Imp ( 0.1A) is set by my ownself from a solar panel datasheet. While the converter should step down the voltage to 8.4V (2s lithium ion battery). P&O MPPT already been implement in this circuit. I did a simulink simulation for PV array with DC/DC Buck Converter to charged the battery. But i after try to simulate it i found that my PV voltage is close to my Output Voltage. It seems like its not a correct results. The parameter of PV Voc (19V), Isc (0.124A) ,Vmp (15.4V), Imp ( 0.1A) is set by my ownself from a solar panel datasheet. While the converter should step down the voltage to 8.4V (2s lithium ion battery). P&O MPPT already been implement in this circuit. mppt, dc/dc converter, pv arrays, buck converter, maximum power point tracking, charging, battery MATLAB Answers — New Questions

​

How to change node names and divide and print the individual graph?
Matlab News

How to change node names and divide and print the individual graph?

PuTI / 2025-06-23

I have this graph

Gp = graph({‘n1’ ‘n1’ ‘n2’ ‘n2’ ‘n3’ ‘n4’},{‘n2’ ‘n4’ ‘n3’ ‘n4’ ‘n5’ ‘n5’});

*how to change node name without altering the existing one?*
say i would like to change n1 as *[s1,s_1]*

Can we able to add Weights for Node? And is it possible to represent weight of node in the graph by plotting ?

*As well as how to print a graph containing desired nodes from the Gp GRAPH? just to print say n1,n2,n3*I have this graph

Gp = graph({‘n1’ ‘n1’ ‘n2’ ‘n2’ ‘n3’ ‘n4’},{‘n2’ ‘n4’ ‘n3’ ‘n4’ ‘n5’ ‘n5’});

*how to change node name without altering the existing one?*
say i would like to change n1 as *[s1,s_1]*

Can we able to add Weights for Node? And is it possible to represent weight of node in the graph by plotting ?

*As well as how to print a graph containing desired nodes from the Gp GRAPH? just to print say n1,n2,n3* I have this graph

Gp = graph({‘n1’ ‘n1’ ‘n2’ ‘n2’ ‘n3’ ‘n4’},{‘n2’ ‘n4’ ‘n3’ ‘n4’ ‘n5’ ‘n5’});

*how to change node name without altering the existing one?*
say i would like to change n1 as *[s1,s_1]*

Can we able to add Weights for Node? And is it possible to represent weight of node in the graph by plotting ?

*As well as how to print a graph containing desired nodes from the Gp GRAPH? just to print say n1,n2,n3* graph, edges MATLAB Answers — New Questions

​

How can I install the “Simulink Real-Time Target Support Package” and “Speedgoat I/O Blockset” in a Docker container?
Matlab News

How can I install the “Simulink Real-Time Target Support Package” and “Speedgoat I/O Blockset” in a Docker container?

PuTI / 2025-06-23

I am working on a CI pipeline using a headless version of MATLAB in a Docker® container. Building Simulink Real-Time models requires the "Simulink Real-Time Target Support Package" and "Speedgoat I/O Blockset" (mandatory since R2024a).
However, it seems that these support packages cannot be installed inside a Docker container. How can I get this CI pipeline up and running?I am working on a CI pipeline using a headless version of MATLAB in a Docker® container. Building Simulink Real-Time models requires the "Simulink Real-Time Target Support Package" and "Speedgoat I/O Blockset" (mandatory since R2024a).
However, it seems that these support packages cannot be installed inside a Docker container. How can I get this CI pipeline up and running? I am working on a CI pipeline using a headless version of MATLAB in a Docker® container. Building Simulink Real-Time models requires the "Simulink Real-Time Target Support Package" and "Speedgoat I/O Blockset" (mandatory since R2024a).
However, it seems that these support packages cannot be installed inside a Docker container. How can I get this CI pipeline up and running?  MATLAB Answers — New Questions

​

writematrix does NOT overwrite existing file
Matlab News

writematrix does NOT overwrite existing file

PuTI / 2025-06-23

In the new 2025a version, When trying to overwrite an existing file using writematrix, the old data does not change, but I also do not see an error message telling me that overwrite is (for whatever reason) is not possible. In other words: I run the script, it ends, and the new data is not in the file. I did not have this problem with any of the previous versions.In the new 2025a version, When trying to overwrite an existing file using writematrix, the old data does not change, but I also do not see an error message telling me that overwrite is (for whatever reason) is not possible. In other words: I run the script, it ends, and the new data is not in the file. I did not have this problem with any of the previous versions. In the new 2025a version, When trying to overwrite an existing file using writematrix, the old data does not change, but I also do not see an error message telling me that overwrite is (for whatever reason) is not possible. In other words: I run the script, it ends, and the new data is not in the file. I did not have this problem with any of the previous versions. writematrix, overwrite, file, save files, r2025a MATLAB Answers — New Questions

​

Extract certain data from array where repeats are present (but constant values)
Matlab News

Extract certain data from array where repeats are present (but constant values)

PuTI / 2025-06-23

Hello, I have some data where I my relevant column (Y position) is as this yellow graph

I want to pull out just the data that is between the green arrows – I do know the actual starting and finishing Y positions (101 and 121 respectively) , but there are other values at these values – but they are constant

My data is actually in an array, and the Yposition is column 2, but I delete the 1st column, so the column becomes 1
this was my attempt to remove all rows of my array outside of these green arrows.

% Get user input to the real starting and finishing Y values
prompt = {‘Col:’,’start:’,’finish:’};
dlgtitle = ‘Keep Rows Between’;
dims = [1 35];
definput = {‘1′,’101′,’121’}; % definput = {‘Region:’,num2str(X),num2str(Y)};
answer = inputdlg(prompt,dlgtitle,dims,definput);
col=str2num(answer{1}); low=str2num(answer{2}); high=str2num(answer{3});

% Get Current table data
t=app.UITable;
d=t.Data;

d=rmmissing(d); % One wat Remove Nans

Y=table2array(d);
Y=Y(:,col);

low
head(Y)
class(Y)

% Get index of
idx1=find(Y<=low);
idx2=find(Y>=high);
size(idx1)
size(idx2)
id=[idx1;idx2];

d(id,:)=[];
t.Data=d;
However, this keeps all values not just within the greena rrows.
I have included my dataHello, I have some data where I my relevant column (Y position) is as this yellow graph

I want to pull out just the data that is between the green arrows – I do know the actual starting and finishing Y positions (101 and 121 respectively) , but there are other values at these values – but they are constant

My data is actually in an array, and the Yposition is column 2, but I delete the 1st column, so the column becomes 1
this was my attempt to remove all rows of my array outside of these green arrows.

% Get user input to the real starting and finishing Y values
prompt = {‘Col:’,’start:’,’finish:’};
dlgtitle = ‘Keep Rows Between’;
dims = [1 35];
definput = {‘1′,’101′,’121’}; % definput = {‘Region:’,num2str(X),num2str(Y)};
answer = inputdlg(prompt,dlgtitle,dims,definput);
col=str2num(answer{1}); low=str2num(answer{2}); high=str2num(answer{3});

% Get Current table data
t=app.UITable;
d=t.Data;

d=rmmissing(d); % One wat Remove Nans

Y=table2array(d);
Y=Y(:,col);

low
head(Y)
class(Y)

% Get index of
idx1=find(Y<=low);
idx2=find(Y>=high);
size(idx1)
size(idx2)
id=[idx1;idx2];

d(id,:)=[];
t.Data=d;
However, this keeps all values not just within the greena rrows.
I have included my data Hello, I have some data where I my relevant column (Y position) is as this yellow graph

I want to pull out just the data that is between the green arrows – I do know the actual starting and finishing Y positions (101 and 121 respectively) , but there are other values at these values – but they are constant

My data is actually in an array, and the Yposition is column 2, but I delete the 1st column, so the column becomes 1
this was my attempt to remove all rows of my array outside of these green arrows.

% Get user input to the real starting and finishing Y values
prompt = {‘Col:’,’start:’,’finish:’};
dlgtitle = ‘Keep Rows Between’;
dims = [1 35];
definput = {‘1′,’101′,’121’}; % definput = {‘Region:’,num2str(X),num2str(Y)};
answer = inputdlg(prompt,dlgtitle,dims,definput);
col=str2num(answer{1}); low=str2num(answer{2}); high=str2num(answer{3});

% Get Current table data
t=app.UITable;
d=t.Data;

d=rmmissing(d); % One wat Remove Nans

Y=table2array(d);
Y=Y(:,col);

low
head(Y)
class(Y)

% Get index of
idx1=find(Y<=low);
idx2=find(Y>=high);
size(idx1)
size(idx2)
id=[idx1;idx2];

d(id,:)=[];
t.Data=d;
However, this keeps all values not just within the greena rrows.
I have included my data find, table2array MATLAB Answers — New Questions

​

Outlook’s New Summarize Option for Email Attachments
News

Outlook’s New Summarize Option for Email Attachments

Tony Redmond / 2025-06-23

Summarize Attachment Feature is an Example of New Features Needed to Maintain Customer Interest

Introducing a new technology is hard. The great expectations created at the initial launch soon meets the hard reality of deployment and things don’t get better until the technology has had time to bake. This is as true for Microsoft 365 Copilot as for any other major technology. I see people questioning whether the $30/user/month really delivers any benefits, with real concern over whether people use any of the purported time saved through Copilot interventions doing anything more valuable than drinking more coffee.

News that the U.S. Better Business Bureau forced Microsoft to change some of the claims it makes about how Microsoft 365 Copilot affects user productivity doesn’t help the case for AI-based assistance. And lukewarm or mildly enthusiastic (but independent) reports about Copilot usage in organizations, like the recent UK Government report based on a 3-month trial for 20,000 employees don’t bolster the case much either.

All Microsoft can do is continue to push out updates and new AI-based features to keep customer interest while Copilot matures to become more useful in day-to-day activities. The result is a flood of new Copilot-related features, not all of which seem valuable except in specific cases. I don’t know whether AI-informed People Skills will become popular (some HR professionals that I know like People Skills a lot). Those in the Power Platform world (now with 56 million monthly active users according to data made available at Microsoft’s FY25 Q3 results) see lots of changes to make Copilot agents more productive. I do like the ability to upload documents to agents for the agents to reason over.

Summarizing Attachments

All of which brings me to the update described in message center notification MC1073094 (13 May 2025, Microsoft 365 Roadmap item 475249). It’s an example of a recent Copilot enhancement to help users process “classic” email attachments faster. Even though cloudy attachments are preferable in many respects, many people still send files instead of links.

Copilot has been able to summarize cloudy attachments for email for quite a while. Now, when a message with one or more classic file attachments arrives, users with a Microsoft 365 license see a new summarize option for Office and PDF attachments. The feature is available in the New Outlook for Windows, OWA, Outlook mobile, and Outlook for Mac, but not for Outlook classic. Microsoft is rolling out the update now with estimated completion by late August 2025.

Figure 1 shows the general idea. A Word file is attached to a message. Clicking the summarize option from the drop-down menu beside the attachment causes Copilot to create and display the summary for the file inside the Summary by Copilot panel (or card). If a message has multiple file attachments, the summarize option must be invoked separately.

The summarize option for a file attachment for a message opened in OWA.
Figure 1: The summarize option for a file attachment for a message opened in OWA

Copilot cannot process encrypted attachments (using sensitivity labels or another encryption mechanism).

No Archived Messages

My archive mailbox is full of attachments from long-forgotten projects, including files related to some legal cases that I was involved with. I was curious to see what sense Copilot might extract from some of the PDFs and Word documents from those cases. Oddly, Outlook won’t summarize any of the attachments for messages stored in an archive mailbox. To generate a summary for these files, you must open download and open Office files in a desktop or web app and use the Copilot options available in the app.

Thinking about why this might be so, I guess the logic is that attachments for archived messages probably aren’t of very high interest, and if someone goes to the trouble of finding an archived message, they have a purpose for doing so and won’t mind opening attachments to view content. On the other hand, I could be overthinking things and Microsoft simply designed the feature to work only with messages from the primary mailbox.

The Value of Small Changes

Over my many years of work, I cannot say how many emails I have received with file attachments. Being able to see a quick summary of an attachment is a good example of how AI can be effective. The feature works well because the AI has just one file to process, so it’s unlikely that hallucinations or other issues will occur. You might disagree with points made in the summary, but having the summary is a timesaver and a great starting point for understanding whether a file contains anything important.

Another example of a small but interesting change is the ability to create a meeting from an Outlook email thread (MC1090693, 9 June 2025, Microsoft 365 roadmap item 494154). The idea is that Copilot scans an email thread to determine the topic for a meeting and its participants and creates a meeting invitation ready to go. This kind of thing doesn’t need AI because existing Graph APIs can do the work, but Copilot integrates the work into a new Schedule with Copilot option (only for email threads with sufficient data to base a meeting upon). According the roadmap item, this feature is for the mobile clients, but I bet it will be available in the new Outlook and OWA too.

In the overall scheme of Copilot, delivering Outlook features to make small tasks easier is not important. However, changes that reduce friction for users are important and collectively a bunch of changes like this might just be enough to convince an organization that they really can’t live without Copilot.


Insight like this doesn’t come easily. You’ve got to know the technology and understand how to look behind the scenes. Benefit from the knowledge and experience of the Office 365 for IT Pros team by subscribing to the best eBook covering Office 365 and the wider Microsoft 365 ecosystem.

 

Microsoft Rilis Laporan Work Trend Index 2025: Dorong Potensi Indonesia Lewat Kolaborasi Manusia dan AI
Microsoft

Microsoft Rilis Laporan Work Trend Index 2025: Dorong Potensi Indonesia Lewat Kolaborasi Manusia dan AI

hilfan / 2025-06-23

Read in English here.

Seiring Indonesia melangkah ke tahun yang krusial dalam perjalanan transformasi digitalnya, Microsoft merilis temuan terbaru dari laporan Work Trend Index 2025 yang secara khusus menyoroti Indonesia. Laporan ini mengungkap bagaimana kecerdasan buatan (AI) tengah mengubah lanskap bisnis dan cara orang bekerja. Menariknya, 97% pemimpin bisnis di Indonesia meyakini bahwa tahun 2025 ini adalah momen untuk meninjau ulang strategi dan operasional bisnis secara inti—angka ini bahkan melampaui hasil tren global.

Perubahan ini bukan hanya soal tren teknologi semata, melainkan sebuah perubahan yang berdampak terhadap cara kita bekerja. Guna membuka potensi ekonomi baru berbasis AI dan memanfaatkan momentum yang ada, kita tidak hanya berbicara soal adopsi teknologi saja. Diperlukan mindset baru yang memadukan kepemimpinan manusia dan bantuan intelligence on tap, di mana wawasan dan kapabilitas manusia didukung sepenuhnya oleh AI. Kini, perusahaan dari berbagai sektor tengah bergerak cepat menciptakan kolaborasi antara manusia dan AI, di mana agen digital bekerja berdampingan dengan manusia. Kolaborasi ini membuka jalan bagi terbentuknya struktur baru yang beroperasi dengan alur kerja cerdas, tim kerja yang dinahkodai oleh agen AI, serta peran baru manusia yang dikenal dengan istilah agent boss. Inilah ciri khas dari perusahaan masa depan yang dalam laporan ini disebut sebagai Frontier Firm.

“Frontier Firm bukan hanya perihal model bisnis baru, melainkan peluang besar bagi Indonesia untuk melangkah lebih jauh lagi. Era ketika AI mengubah setiap aspek pekerjaan adalah momen yang justru memberikan kita kesempatan untuk melampaui batasan yang ada dan mendorong adanya terobosan untuk meningkatkan produktivitas dan inovasi. Dengan mindset dan investasi yang tepat, perusahaan di Indonesia dapat memanfaatkan kolaborasi antara manusia dan AI untuk menciptakan alur kerja yang benar-benar berbeda, yang lebih cepat, lebih cerdas, dan lebih berdampak. Inilah cara kita membangun bisnis yang berdaya saing global, sekaligus mencerminkan kecerdasan serta ambisi luhur kita.” ujar Dharma Simorangkir, President Director of Microsoft Indonesia.

Laporan tahun ini, yang berjudul “2025: The Year the Frontier Firm is Born,” didasarkan pada survei terhadap 31.000 orang di 31 negara, termasuk Indonesia, tren ketenagakerjaan dan perekrutan di LinkedIn, serta analisis triliunan sinyal produktivitas Microsoft 365. Hasil laporan tersebut mengungkap bagaimana perusahaan tengah berevolusi dari struktur hierarki yang tradisional menjadi ekosistem yang lebih leluasa dan disokong oleh AI. Keberadaan tim hybrid, yang terlahir dari kolaborasi manusia dan agen AI, memungkinkan perusahaan bergerak lebih cepat, mengambil keputusan yang lebih baik, dan menciptakan nilai tambah di setiap jenjang pekerjaan.

Proses menjadi sebuah Frontier Firm berlangsung dalam tiga fase utama. Pertama, AI berperan sebagai asisten yang membantu mengerjakan pekerjaan repetitif dan meningkatkan efisiensi kerja. Selanjutnya, agen AI tersebut mulai mengambil peran yang lebih spesifik sebagai rekan kerja digital untuk mendukung aktivitas seperti riset atau perencanaan proyek. Di fase akhir, agen AI mulai mengelola alur kerja secara mandiri, sementara manusia berfokus pada strategi dan turun tangan hanya jika diperlukan.

Evolusi ini bukan sekadar teori belaka, melainkan telah menjadi kekuatan penggerak ekonomi yang membuat bisnis mampu melampaui sistem lama dan bersaing lebih efektif di tingkat global. Dengan mengadopsi model Frontier Firm, perusahaan di Indonesia memiliki peluang unik untuk meningkatkan produktivitas, mempercepat inovasi di berbagai sektor, seperti layanan keuangan, layanan publik, serta usaha kecil dan menengah (UMKM), yang akhirnya turut mendorong pertumbuhan inklusif dalam mewujudkan visi Indonesia Emas 2045.

Survei ini juga menyoroti tiga hal penting yang perlu diperhatikan oleh para pemimpin bisnis dan profesional di Indonesia, karena AI mulai mengubah cara kita bekerja dan mempengaruhi pasar tenaga kerja di tahun mendatang:

Berinvestasi pada penggunaaan intelligence on tap untuk mengatasi kesenjangan kapasitas

  • Sekitar 63% pemimpin bisnis di Indonesia menyatakan bahwa produktivitas harus ditingkatkan, namun 88% tenaga kerja, baik karyawan maupun para pemimpin bisnis, mengaku kekurangan waktu atau energi untuk menyelesaikan pekerjaan mereka.
  • Untuk mengatasi hal ini, 95% pemimpin bisnis di Indonesia menyatakan mereka yakin akan penggunaan agen AI sebagai anggota tim digital pendukung, guna memperluas kapasitas kerja dalam satu hingga dua tahun ke depan. Lebih dari separuhnya, atau sekitar 52%, menjadikan penambahan kapasitas tim dengan tenaga kerja digital sebagai prioritas utama, lalu diikuti peningkatan kapasitas melalui kegiatan upskilling.
  • Karyawan di perusahaan yang mengadopsi model Frontier Firm di Indonesia lebih dari dua kali lipat lebih optimis bahwa perusahaan tempat mereka bekerja sedang berkembang—sentimen yang lebih besar dibandingkan rata-rata angka global dan di Asia-Pasifik. Bahkan, hampir tiga kali lipat dari mereka yang percaya diri dalam menghadapi beban kerja yang besar dan merasa memiliki kesempatan untuk fokus ke pekerjaan yang penting.

Kolaborasi Tim Manusia dan Agen AI Akan Membentuk Ulang Struktur Organisasi

  • Di Indonesia, 59% pemimpin menyatakan bahwa perusahaan mereka sudah menggunakan agen AI untuk mengotomatisasi pekerjaan—angka ini sedikit lebih tinggi dibandingkan rata-rata di Asia-Pasifik yang sebesar 53%.
  • Semakin banyak karyawan di Indonesia memanfaatkan AI berkat ketersediaan dan fungsinya yang praktis. Hampir setengahnya (48%) menyatakan lebih memilih mengandalkan AI dibandingkan rekan kerja karena AI siap sedia selama 24 jam penuh. Tidak hanya itu, sebanyak 28% karyawan mengatakan bahwa kecepatan adalah alasannya, sementara 38% lainnya mengarah pada kemampuan berpikir kreatif AI. Menariknya, 66% pekerja menganggap AI sebagai teman diskusi, sementara 33% lainnya menganggapnya lebih dari sekedar tools yang suka diperintah.

Kini, setiap karyawan bisa mengarahkan dan mengelola agen AI sendiri

  • Dalam lima tahun ke depan, para pemimpin bisnis di Indonesia memperkirakan tim mereka akan mulai menjalankan tugas baru. Sebanyak 48% berharap AI akan dimanfaatkan untuk merancang ulang proses kerja, 63% berencana membangun multi-agent systems, sementara 69% akan fokus pada pelatihan, dan 58% lainnya akan mengelola agen AI secara langsung.
  • Mengingat AI mulai mengubah cara kerja tim, 65% manajer di Indonesia memperkirakan bahwa pelatihan dan upskillingAI akan menjadi bagian penting untuk tim mereka ke depannya.
  • Namun, masih ada kesenjangan yang tertinggal. Meskipun 87% pemimpin sudah memahami konsep agen AI, hanya 56% karyawan yang memiliki tingkat pemahaman yang sama. Menjembatani kesenjangan ini sangat penting untuk memastikan adopsi AI yang inklusif dan berjangka panjang untuk ketenagakerjaan.

Tahun 2025 akan dikenang sebagai tahun lahirnya Frontier Firm, ketika para perusahaan bersiap menjalani transformasi digital di mana agen AI menjadi bagian penting dalam tim kerja. Demi mengintegrasikan AI secara efektif dalam ketenagakerjaan, perusahaan perlu mulai mengadopsi AI dengan merekrut tenaga kerja digital, menentukan mana pekerjaan yang dapat diotomatisasi, dan memperlakukan AI sebagai bagian penting dari tim.

Namun, tidak hanya berhenti pada pengadopsian saja. Perusahaan juga perlu menentukan keseimbangan antara manusia dan AI (human-agent ratio) agar AI benar-benar mampu melengkapi kreativitas dan penilaian manusia. Bentuk investasi lainnya, seperti penanaman literasi AI dan upskilling berkelanjutan bagi karyawan akan menjadi kunci agar mereka mampu mengelola dan berkolaborasi dengan AI secara efektif.

“Meskipun AI menjanjikan perubahan pada cara kita bekerja, dampak nyatanya baru akan terasa ketika setiap karyawan diberdayakan untuk memimpin bersama teknologi ini. Di Indonesia, kesenjangan pemahaman terhadap AI antara pemimpin (87%) dan karyawan (56%) bukan sekadar angka—ini adalah panggilan bagi kita untuk bertindak. Inilah saatnya kita berinvestasi untuk manusia, mengembangkan keterampilan baru, dan membangun budaya kerja di mana setiap orang siap menjadi agent boss. Dengan mengatasi kesenjangan ini, kita tidak hanya sekadar mengadopsi teknologi, tetapi juga membuka seluruh potensi yang dimiliki tenaga kerja kita, serta membangun masa depan kerja yang lebih inklusif dan inovatif,” tambah Dharma.

Menghidupkan era kolaborasi manusia-AI dengan Microsoft 365

Bersamaan dengan rilisnya Work Trend Index 2025, Microsoft juga mengumumkan peluncuran Microsoft 365 Copilot Wave 2 spring release. Rangkaian fitur baru ini dirancang untuk mendukung era baru kolaborasi antara manusia dan AI, yang meliputi:

  • Fitur Search yang dilengkapi AI, yang siap membantu pengguna menemukan informasi relevan di tempat kerja dengan lebih cepat.
  • Fitur Create, sebuah pengalaman baru yang menghadirkan kemampuan desain dan pembuatan konten bagi siapa saja, sehingga setiap gagasan atau ide bisa diwujudkan dengan lebih mudah.
  • Copilot Notebooks yang mampu mengubah data menjadi insight yang langsung bisa direalisasikan.
  • Agent Store, tempat untuk mengakses dan mengarahkan agen AI, yang spesifik ditugaskan untuk melakukan pekerjaan tertentu.

Visuals of the Agent Store, Microsoft

“Update terbaru dari Microsoft 365 Copilot Wave 2 spring release menandakan pergeseran besar terhadap cara kita bekerja bersama AI, membuka alur baru di dunia kerja. Fitur-fitur seperti Copilot Search, Agent Store, kemampuan fitur baru Create dan Notebook, serta ditambah lagi dengan frontier agents seperti Researcher dan Analyst, menunjukkan bahwa kita sedang memasuki masa depan di mana manusia dan AI tidak lagi  hidup berdampingan, namun juga berkolaborasi. Ini sejalan dengan tujuan kami, yaitu memberdayakan setiap individu dan organisasi di Indonesia agar dapat bekerja dengan lebih cermat, cepat, dan kreatif, serta menyediakan Copilot bagi setiap karyawan dan agen AI untuk setiap proses bisnis, sambil meningkatkan keterampilan agar sukses di era kerja sama tim antara manusia dan AI,” ujar Ricky Haryadi, Sr. Go To Market Lead – AI at Work (ASEAN), Microsoft.

Untuk informasi lebih lanjut, kunjungi Microsoft’s Official Blog, Work Trend Index 2025 Report, dan pengumuman baru Microsoft 365 untuk mempelajari era kolaborasi antara manusia dan AI.

 

Microsoft Shares Latest Findings from 2025 Work Trend Index: Unlocking Indonesia’s Potential Through Human-AI Collaboration
Microsoft

Microsoft Shares Latest Findings from 2025 Work Trend Index: Unlocking Indonesia’s Potential Through Human-AI Collaboration

hilfan / 2025-06-23

Read in Bahasa Indonesia here.

As Indonesia enters a pivotal year for digital transformation, Microsoft has released new, Indonesia-specific findings from the 2025 Work Trend Index. The report highlights how artificial intelligence (AI) is reshaping the rules of business and the way people work. Notably, 97% of business leaders in Indonesia say 2025 is the year to rethink core facets of strategies and operations, outpacing global trends.

This shift marks more than a technology trend – it reflects a fundamental change in how work gets done. Unlocking the potential of the new AI economy and seizing the momentum means going beyond technology adoption and embracing a new mindset: combining human leadership with intelligence on tap – readily accessible insights and capabilities powered by AI. Organizations across industries are navigating a rapid move toward human-AI collaboration, where digital agents work alongside people, enabling a new type of organization structured around intelligent workflows, agent-led teams, and a new leadership role – the agent boss. These are the hallmarks of what the study calls the Frontier Firm.

“The Frontier Firm is more than a new business model but a leapfrog opportunity for Indonesia. In an era where AI is reshaping every aspect of work, this moment allows us to bypass traditional limitations and drive breakthrough gains in productivity and innovation. With the right mindset and investments, Indonesian organizations can harness human-AI collaboration to unlock entirely new ways of working. One that is faster, smarter, and more impactfully. This is how we shape globally competitive businesses that reflect our local ingenuity and ambition,” said Dharma Simorangkir, President Director of Microsoft Indonesia.

Drawing on insights from 31,000 workers across 31 countries, LinkedIn hiring trends, and trillions of Microsoft 365 productivity signals, the report, titled “2025: The Year the Frontier Firm is Born,” reveals how organizations are evolving from traditional hierarchies into fluid, intelligence-driven ecosystems. These hybrid teams—humans working alongside AI agents—are enabling companies to move faster, make better decisions, and unlock new value across all levels of work.

The path to becoming a Frontier Firm unfolds in three key phases. First, AI serves as an assistant, eliminating repetitive tasks and boosting efficiency. Next, agents take on defined roles as digital colleagues, supporting tasks like research or project planning. In the final phase, AI agents begin to autonomously run entire workflows, with humans steering strategy and stepping in to resolve exceptions.

This evolution is not just theoretical; it’s emerging as a powerful economic driver, enabling businesses to leapfrog legacy systems and compete more effectively on the global stage. By adopting the Frontier Firm model, Indonesian companies have a unique opportunity to improve productivity, accelerate innovation in sectors like financial services, public services, as well as small and medium businesses, thereby fueling inclusive growth that supports Golden Indonesia 2045 Vision.

The study also highlights three key takeaways for leaders and professionals in Indonesia as AI begins to reshape the way we work and impact the job market in the coming year:

Investing in intelligence on tap to fill the capacity gap

  • Around 63% of leaders in Indonesia say productivity must increase but 88% of the workforce—both employees and leaders— say they’re lacking enough time or energy to do their work.
  • To address this, 95% of business leaders in Indonesia say they’re confident to use AI agents as supporting digital team members to extend work capacity within the next one or two years. Over half (52%) rank expanding team capacity with digital labor as a top priority, followed by capacity enhancement through upskilling.
  • Employees at Frontier Firms in Indonesia are more than twice as likely to say their company is thriving—reflecting a stronger setiment than global and Asia-Pacific averages. Nearly three times as many report feeling optimistic about managing higher workloads and getting the chance to focus on more meaningful tasks.

Human-AI agent teams will reshape organizational structures

  • In Indonesia, 59% of leaders say their company is already using AI agents to automate workflows—slightly higher than the Asia-Pacific average of 53%.
  • Indonesian employees are also increasingly turning to AI because of its availability and utility. Nearly half (48%) say they prefer using AI over a colleague because it’s available 24/7. Others cite speed (28%) and creative thinking/ideas (38%) as key advantages. Interestingly, 66% of workers view AI as a brainstorming partner, while 33% of them see it more as a command-based tool.

Now, every employee can instruct and manage their own AI agents

  • In the next five years, leaders in Indonesia expect their teams to take on new tasks, such as redesigning processes with AI (48%), building multi-agent systems (63%), and training (60%) and managing AI agents (58%).
  • As AI redefines team responsibilities, 65% of managers expect AI training and upskilling to become a key responsibility for their teams.
  • However, a noticeable gap remains: while 87% of leaders are familiar with AI agents, only 56% of employees share the same level of understanding. Bridging this gap is essential to ensuring inclusive AI adoption and long-term workforce resilience.

As 2025 will be remembered as the year the Frontier Firm was born, companies are poised for a digital transformation where AI agents become essential team members. To successfully integrate AI into the workforce, organizations must begin their AI-adoption journey by hiring digital employees, defining roles that can be automated, and treating AI as a crucial part of the team.

Yet adoption alone is not enough. Organizations must also determine the right balance between humans and AI (the human-agent ratio) to ensure that AI complements human creativity and judgment. Additional investments in AI literacy and continuous upskilling for employees will be key to enabling them to manage and collaborate effectively with AI.

“While the promise of AI is transforming the way we work, its true impact will only be realized when every employee is empowered to lead alongside it. In Indonesia, the gap in AI familiarity between leaders (87%) and employees (56%) is not just a statistic—it’s a call to action. This is our opportunity to invest in people, nurture new skills, and create a culture where everyone is equipped to become an agent boss. By closing this gap, we’re not only embracing technology—we are unlocking the full potential of our workforce, shaping a future of work that is more inclusive and innovative,” added Dharma.

Enabling the era of human-agent collaboration with Microsoft 365

Alongside the 2025 Work Trend Index, Microsoft also announced the Microsoft 365 Copilot Wave 2 spring release, introducing new features designed to support the next era of human–AI collaboration, including:

  • AI-powered Search to help users quickly find relevant information at workplace.
  • A Create experience for business that unlock design and content creation skill for everyone, bringing ideas to life.
  • Copilot Notebooks for transforming data into actionable insights.
  • Agent Store to access and deploy AI agents tailored to specific tasks within the workflow.

Visuals of the Agent Store, Microsoft

“The latest updates from the Microsoft 365 Copilot Wave 2 spring release mark a significant leap in how we work with AI, unlocking a new path of working. Features like Copilot Search, Agent Store, new Create and Notebook capabilities, general availability of frontier agents such as Researcher and Analyst show we are entering a future where humans and AI don’t merely coexist, but collaborate. This aligns with our goal to empower every individual and organization in Indonesia to work smarter, faster, and more creatively, a Copilot for every employee, an agent for every business process—while building the skills to thrive in the era of human–agent teamwork,” said Ricky Haryadi, Sr. Go To Market Lead – AI at Work (ASEAN) Microsoft.

For further reading, visit Microsoft’s Official Blog, Work Trend Index 2025 Report, and Microsoft 365 news announcement to learn more about the new era of human- agents collaboration.

 

Previous 1 … 9 10 11 12 13 … 59 Next

Search

Categories

  • Matlab
  • Microsoft
  • News
  • Other
Application Package Repository Telkom University

Tags

matlab microsoft opensources
Application Package Download License

Application Package Download License

Adobe
Google for Education
IBM
Matlab
Microsoft
Wordpress
Visual Paradigm
Opensource

Sign Up For Newsletters

Be the First to Know. Sign up for newsletter today

Application Package Repository Telkom University

Portal Application Package Repository Telkom University, for internal use only, empower civitas academica in study and research.

Information

  • Telkom University
  • About Us
  • Contact
  • Forum Discussion
  • FAQ
  • Helpdesk Ticket

Contact Us

  • Ask: Any question please read FAQ
  • Mail: helpdesk@telkomuniversity.ac.id
  • Call: +62 823-1994-9941
  • WA: +62 823-1994-9943
  • Site: Gedung Panambulai. Jl. Telekomunikasi

Copyright © Telkom University. All Rights Reserved. ch

  • FAQ
  • Privacy Policy
  • Term