Category: News
The Downside of Losing the Exchange Mailbox Audit Search Cmdlets
Finding Exchange Mailbox Audit Data Isn’t So Easy Anymore
From an engineering perspective, Microsoft’s decision to decommission the Search-MailboxAuditLog and New-MailboxAuditLogSearch cmdlets makes a ton of sense. Microsoft 365 apps consume shared services, and the unified audit service ingests the data used by these Exchange Online cmdlets. Why incur the engineering and support expense to keep the old on-premises cmdlets going?
Microsoft posted the news on January 14, 2025, and stopped writing audit log data to mailboxes on March 1, 2025. The cmdlets will disappear at the end of 2025. You might have missed this information because Microsoft posted to the security blog instead of the Exchange EHLO blog, where all the other Exchange-related news appears. Perhaps this is because audit data is related to Microsoft Purview and the topic therefore is in the security space. However, losing cmdlets that might be used in Exchange-related administrative processes is a big deal deserving better awareness.
In 2016, Exchange mailbox audit data was one of the first sources of audit events for the unified audit log. Ever since, mailbox audit data has flowed into the unified audit log and can be found by audit log searches, so what’s the problem?
Searching the Unified Audit Log for Exchange Mailbox Audit Data
Searches of the unified audit log can be performed synchronously using the Search-UnifiedAuditLog cmdlet or asynchronously through the Audit section of the Purview compliance portal or by submitting a job through the Graph AuditLogQuery API. Audit log searches can find mailbox data among the many other forms of workload data ingested on an ongoing basis, and searches can go back 180 days (audit standard) or 365 days (audit premium). It all sounds good.

But people build processes around PowerShell cmdlets, and when a cmdlet disappears, those processes must be redeveloped. In this instance, any script that uses the deprecated cmdlets must be altered, probably to use the Search-UnifiedAuditLog cmdlet. And let’s face it, even its biggest fans (and I’m probably in that category) wouldn’t consider Search-UnifiedAuditLog to be an easy cmdlet to use, and Microsoft has tinkered with the way the cmdlet functions over the years. Thankfully, they’ve retreated from the idea of making high completeness (very slow) searches the norm.
The parameters for audit log searches can be complex to construct, duplicate audit records can be retrieved, and there’s always the need to unpack the JSON structure contained in the AuditData property to find out what actually happened for the auditable event.
Those accustomed to interacting with the AuditData property know that every workload decides what information to include in audit events and how that data is formatted. Extracting properties from AuditData usually isn’t hard, but it’s tiresome to see how many variations Microsoft engineers can come up with when inserting data into audit events.
Apart from the issue of interpreting audit events, there’s also the simple fact that it’s easier to extract audit data for the actions of a single user from their mailbox. Finding the relevant information about mailbox events from the unified audit log is more complicated.
Find Exchange Mailbox Audit Data for a Single Mailbox
The easiest way to find audit records for a specific mailbox with the Search-UnifiedAuditLog cmdlet is to pass the user principal name for the mailbox owner (or, to search multiple mailboxes, a set of user principal names) in the UserIds parameter. Here’s an example that finds the audit records for a mailbox and reduces the set to those belonging to Exchange actions:
$RecordType = "ExchangeAdmin","ExchangeItem","ExchangeItemAggregated","ExchangeItemGroup","ExchangeSearch" [array]$Records = Search-UnifiedAuditLog -Userids ‘kim.akers@office365itpros.com' -StartDate (Get-Date).AddDays(-1) -EndDate (Get-Date) -Formatted -ResultSize 5000 -SessionCommand ReturnLargeSet $Records = $Records | Where-Object {$_.RecordType -in $RecordType} | Sort-Object Identity -Unique
Searching based on user principal names finds audit records for actions performed by that user. If you want to find audit records for actions performed by a mailbox delegate, use a free text search for the object identifier of the mailbox owner’s account. The free text search finds references to the mailbox owner in the AuditData property and includes those records in the set returned. Here’s an example of using an account identifier in a free text search. It’s important that the identifier is cast as a string as otherwise the search will fail because it will attempt to use a GUID where the cmdlet expects a string:
[array]$Records = Search-UnifiedAuditLog -Freetext ((Get-ExoMailbox -Identity Tony.Redmond).ExternalDirectoryObjectId -as [string]) -StartDate (Get-Date).AddDays(-90) -EndDate (Get-Date) -Formatted -ResultSize 5000 -SessionCommand ReturnLargeSet $Records = $Records | Where-Object {$_.RecordType -in $RecordType} | Sort-Object Identity -Unique
The Bottom Line
You might not have been aware of the change to the old cmdlets. They still work (for now), but mailbox audit data generated since March 1, 2025, cannot be retrieved using the cmdlets. In any case, it’s a good idea to check scripts to find any instances where the old cmdlets are used. The bad news is that those scripts must be redeveloped. Good luck!
Infineon Buck Simscape Example – View_system(‘BuckSystem’) unrecognized function or variable ‘view system” error
I’ve tried running the "Infineon Buck Simscape Example" both online and locally and get the following error
View_system(‘BuckSystem’) unrecognized function or variable ‘view system"
I’m running R2023bI’ve tried running the "Infineon Buck Simscape Example" both online and locally and get the following error
View_system(‘BuckSystem’) unrecognized function or variable ‘view system"
I’m running R2023b I’ve tried running the "Infineon Buck Simscape Example" both online and locally and get the following error
View_system(‘BuckSystem’) unrecognized function or variable ‘view system"
I’m running R2023b infineon buck, view_system MATLAB Answers — New Questions
How do I use a Bus in conjunction with a matlab function block in Simulink?
I have a simulink file where i have a "Matlab Function Block" that needs to get a bus of parameters in input. My problem is that even after changing the variable type of the input to "Bus" and also changing the object name to the one i have given to the bus of parameters in question i still get the following error:
Expression ‘Bus1’ for type of data "Parameters" did not evaluate to a valid type.
Caused by: invalid setting in ‘MATLAB Function’ for parameter ‘Datatype’
Unrecognised function or variable ‘Bus1’. Variable ‘Bus1’ does not exist
Any idea of how i can solve he problem without using a selector before the function?
Thanks in advanceI have a simulink file where i have a "Matlab Function Block" that needs to get a bus of parameters in input. My problem is that even after changing the variable type of the input to "Bus" and also changing the object name to the one i have given to the bus of parameters in question i still get the following error:
Expression ‘Bus1’ for type of data "Parameters" did not evaluate to a valid type.
Caused by: invalid setting in ‘MATLAB Function’ for parameter ‘Datatype’
Unrecognised function or variable ‘Bus1’. Variable ‘Bus1’ does not exist
Any idea of how i can solve he problem without using a selector before the function?
Thanks in advance I have a simulink file where i have a "Matlab Function Block" that needs to get a bus of parameters in input. My problem is that even after changing the variable type of the input to "Bus" and also changing the object name to the one i have given to the bus of parameters in question i still get the following error:
Expression ‘Bus1’ for type of data "Parameters" did not evaluate to a valid type.
Caused by: invalid setting in ‘MATLAB Function’ for parameter ‘Datatype’
Unrecognised function or variable ‘Bus1’. Variable ‘Bus1’ does not exist
Any idea of how i can solve he problem without using a selector before the function?
Thanks in advance bus, matlab function MATLAB Answers — New Questions
I am trying to control a DC to DC boost converter using FSC MPC to generate a 20 kW PV power but the MPC controller is very poorly than PI controller.
I am trying to control a DC to DC boost converter using FSC MPC to generate a 20 kW PV power but the MPC controller generated a maximum of 1135 W PV power and a maximum of 7184 W DC load power instead of 20 kW power. The PV voltage has a maximum of 59 V against 847 V boosted voltage with 21 A maximum PV current against a maximum of 27 A inductor current. Below is the MPC script used in the Matlab function block:
function S = MPC_Boost(iL, V_PV, Vout, iL_ref, wf_min, wf_max, Dref)
% MPC controller for boost converter with iL_ref from MPPT logic
%% System Parameters
Ts = 10e-6;
RL = 0.02;
L = 0.0199;
C = 3.1222e-04;
R_load = 18;
%% Limits
iL_max = 20;
iL_min = 0.2;
Vout_max = 420;
Vout_min = 360;
P_PV_max = 20000;
Vout_ref = 400;
%% Persistent memory
persistent S_old wf;
if isempty(S_old)
S_old = Dref;
wf = wf_min;
end
%% Sanitize Inputs
iL = abs(iL);
Vout = abs(Vout);
V_PV = max(V_PV, 50);
%% Duty Cycle Candidates
states = [Dref – 0.05; Dref; Dref + 0.05];
states = min(max(states, 0.3), 0.9); % Clamp
%% Cost Evaluation
g = zeros(length(states),1);
g_min = inf;
n_best = 1;
X_k = [iL; Vout];
for n = 1:length(states)
D = states(n);
% Discrete model
A_d = [1 – (RL * Ts / L), -(1 – D) * (Ts / L);
(1 – D) * (Ts / C), 1 – (Ts / (R_load * C))];
B_d = [Ts / L; 0];
% Predict state
X_k1 = A_d * X_k + B_d * V_PV;
iboost_k1 = X_k1(1);
Vout_k1 = X_k1(2);
P_PV_pred = V_PV * iboost_k1;
% Constraint check
if iboost_k1 < iL_min || iboost_k1 > iL_max || …
Vout_k1 < Vout_min || Vout_k1 > Vout_max || …
P_PV_pred <= 0 || P_PV_pred > P_PV_max || …
isnan(iboost_k1) || isnan(Vout_k1)
g(n) = inf;
continue;
end
% Cost terms
g_iboost = (iL_ref – iboost_k1)^2;
g_vout = (Vout_ref – Vout_k1)^2;
g_sw = (D ~= S_old) * wf;
g_dref = (D – Dref)^2;
g_pv = (P_PV_pred < 100) * 1000;
% Total cost
g(n) = g_iboost + 0.1 * g_vout + g_sw + g_dref + g_pv;
if g(n) < g_min
g_min = g(n);
n_best = n;
end
end
%% Apply Selected Duty Cycle
S = states(n_best);
S = min(max(S, 0.3), 0.9); % Clamp again
% Adaptive penalty update
if S ~= S_old
wf = min(wf * 1.10, wf_max);
else
wf = max(wf * 0.90, wf_min);
end
S_old = S;
endI am trying to control a DC to DC boost converter using FSC MPC to generate a 20 kW PV power but the MPC controller generated a maximum of 1135 W PV power and a maximum of 7184 W DC load power instead of 20 kW power. The PV voltage has a maximum of 59 V against 847 V boosted voltage with 21 A maximum PV current against a maximum of 27 A inductor current. Below is the MPC script used in the Matlab function block:
function S = MPC_Boost(iL, V_PV, Vout, iL_ref, wf_min, wf_max, Dref)
% MPC controller for boost converter with iL_ref from MPPT logic
%% System Parameters
Ts = 10e-6;
RL = 0.02;
L = 0.0199;
C = 3.1222e-04;
R_load = 18;
%% Limits
iL_max = 20;
iL_min = 0.2;
Vout_max = 420;
Vout_min = 360;
P_PV_max = 20000;
Vout_ref = 400;
%% Persistent memory
persistent S_old wf;
if isempty(S_old)
S_old = Dref;
wf = wf_min;
end
%% Sanitize Inputs
iL = abs(iL);
Vout = abs(Vout);
V_PV = max(V_PV, 50);
%% Duty Cycle Candidates
states = [Dref – 0.05; Dref; Dref + 0.05];
states = min(max(states, 0.3), 0.9); % Clamp
%% Cost Evaluation
g = zeros(length(states),1);
g_min = inf;
n_best = 1;
X_k = [iL; Vout];
for n = 1:length(states)
D = states(n);
% Discrete model
A_d = [1 – (RL * Ts / L), -(1 – D) * (Ts / L);
(1 – D) * (Ts / C), 1 – (Ts / (R_load * C))];
B_d = [Ts / L; 0];
% Predict state
X_k1 = A_d * X_k + B_d * V_PV;
iboost_k1 = X_k1(1);
Vout_k1 = X_k1(2);
P_PV_pred = V_PV * iboost_k1;
% Constraint check
if iboost_k1 < iL_min || iboost_k1 > iL_max || …
Vout_k1 < Vout_min || Vout_k1 > Vout_max || …
P_PV_pred <= 0 || P_PV_pred > P_PV_max || …
isnan(iboost_k1) || isnan(Vout_k1)
g(n) = inf;
continue;
end
% Cost terms
g_iboost = (iL_ref – iboost_k1)^2;
g_vout = (Vout_ref – Vout_k1)^2;
g_sw = (D ~= S_old) * wf;
g_dref = (D – Dref)^2;
g_pv = (P_PV_pred < 100) * 1000;
% Total cost
g(n) = g_iboost + 0.1 * g_vout + g_sw + g_dref + g_pv;
if g(n) < g_min
g_min = g(n);
n_best = n;
end
end
%% Apply Selected Duty Cycle
S = states(n_best);
S = min(max(S, 0.3), 0.9); % Clamp again
% Adaptive penalty update
if S ~= S_old
wf = min(wf * 1.10, wf_max);
else
wf = max(wf * 0.90, wf_min);
end
S_old = S;
end I am trying to control a DC to DC boost converter using FSC MPC to generate a 20 kW PV power but the MPC controller generated a maximum of 1135 W PV power and a maximum of 7184 W DC load power instead of 20 kW power. The PV voltage has a maximum of 59 V against 847 V boosted voltage with 21 A maximum PV current against a maximum of 27 A inductor current. Below is the MPC script used in the Matlab function block:
function S = MPC_Boost(iL, V_PV, Vout, iL_ref, wf_min, wf_max, Dref)
% MPC controller for boost converter with iL_ref from MPPT logic
%% System Parameters
Ts = 10e-6;
RL = 0.02;
L = 0.0199;
C = 3.1222e-04;
R_load = 18;
%% Limits
iL_max = 20;
iL_min = 0.2;
Vout_max = 420;
Vout_min = 360;
P_PV_max = 20000;
Vout_ref = 400;
%% Persistent memory
persistent S_old wf;
if isempty(S_old)
S_old = Dref;
wf = wf_min;
end
%% Sanitize Inputs
iL = abs(iL);
Vout = abs(Vout);
V_PV = max(V_PV, 50);
%% Duty Cycle Candidates
states = [Dref – 0.05; Dref; Dref + 0.05];
states = min(max(states, 0.3), 0.9); % Clamp
%% Cost Evaluation
g = zeros(length(states),1);
g_min = inf;
n_best = 1;
X_k = [iL; Vout];
for n = 1:length(states)
D = states(n);
% Discrete model
A_d = [1 – (RL * Ts / L), -(1 – D) * (Ts / L);
(1 – D) * (Ts / C), 1 – (Ts / (R_load * C))];
B_d = [Ts / L; 0];
% Predict state
X_k1 = A_d * X_k + B_d * V_PV;
iboost_k1 = X_k1(1);
Vout_k1 = X_k1(2);
P_PV_pred = V_PV * iboost_k1;
% Constraint check
if iboost_k1 < iL_min || iboost_k1 > iL_max || …
Vout_k1 < Vout_min || Vout_k1 > Vout_max || …
P_PV_pred <= 0 || P_PV_pred > P_PV_max || …
isnan(iboost_k1) || isnan(Vout_k1)
g(n) = inf;
continue;
end
% Cost terms
g_iboost = (iL_ref – iboost_k1)^2;
g_vout = (Vout_ref – Vout_k1)^2;
g_sw = (D ~= S_old) * wf;
g_dref = (D – Dref)^2;
g_pv = (P_PV_pred < 100) * 1000;
% Total cost
g(n) = g_iboost + 0.1 * g_vout + g_sw + g_dref + g_pv;
if g(n) < g_min
g_min = g(n);
n_best = n;
end
end
%% Apply Selected Duty Cycle
S = states(n_best);
S = min(max(S, 0.3), 0.9); % Clamp again
% Adaptive penalty update
if S ~= S_old
wf = min(wf * 1.10, wf_max);
else
wf = max(wf * 0.90, wf_min);
end
S_old = S;
end mpc control of solar pv MATLAB Answers — New Questions
Thread implemented in MATLAB in a timer
Hello,
I have two processes (one for a camera that runs through a camera function and one for a robot that runs through a robot function), and I’d like to set up a thread to run them in parallel.
I’d like the robot process to run in the background if possible. I searched the internet and found parfeval but I don’t really understand how it works.
I don’t really understand how it works. Can you advise me on how to do this?Hello,
I have two processes (one for a camera that runs through a camera function and one for a robot that runs through a robot function), and I’d like to set up a thread to run them in parallel.
I’d like the robot process to run in the background if possible. I searched the internet and found parfeval but I don’t really understand how it works.
I don’t really understand how it works. Can you advise me on how to do this? Hello,
I have two processes (one for a camera that runs through a camera function and one for a robot that runs through a robot function), and I’d like to set up a thread to run them in parallel.
I’d like the robot process to run in the background if possible. I searched the internet and found parfeval but I don’t really understand how it works.
I don’t really understand how it works. Can you advise me on how to do this? thread, matlab MATLAB Answers — New Questions
How to Permanently Remove Mailbox Items with the Graph API
Permanent Deletion for Message and Other Types of Items from User Mailboxes
On April 1, 2025, Microsoft announced the availability of APIs to permanently delete mailbox items. This news might well have passed you by because the post appeared in the developer blog rather than anything a Microsoft 365 tenant administrator might see.
The APIs are intended to fill in some gaps in Graph API coverage for mailbox items compared to Exchange Web Services (EWS). It’s part of the campaign to remove EWS from Exchange Online by October 2026. An example of where permanent removal of mailbox items is needed is when migrating mailboxes from one tenant to another. After a successful move, the migration utility might clean up by removing items from the source mailbox.
In any case, APIs are now available to permanently delete mail message, mail folder, event, calendar, contact, and contact folder objects.
What Permanent Removal Means
In this context, permanent removal means that no client interface exists to allow the user to recover the message. For example, users can’t use Outlook’s Recover Deleted Items facility to retrieve the deleted items and administrators can’t use the Get-RecoverableItems cmdlet to do likewise (or appear in a report of recoverable items).
The reason why this is so is that when Outlook deletes items in the Deleted Items folder, the items move to the Deletions folder within Recoverable Items. When the API deletes an item, the item moves to the Purges folder. If the item is not subject to a hold, the Managed Folder Assistant will remove it the next item the mailbox is processed. If it is subject to a hold, the item remains in the Purges folder until the hold lapses.
Permanent Removal with the Microsoft Graph API
Two pieces of information are needed to permanently remove a message item using the Graph API: the object identifier for the account that owns the mailbox and the message identifier. Let’s assume that you have a variable containing details of a message:
$Message | Format-List Subject, CreatedDateTime, Id Subject : Thank You for Subscribing CreatedDateTime : 06/05/2022 06:47:28 Id : AAMkADAzNzBmMzU0LTI3NTItNDQzNy04NzhkLWNmMGU1MzEwYThkNABGAAAAAAB_7ILpFNx8TrktaK8VYWerBwDcIrNcmtpBSZUJ1fXZjZ5iAB_wAYDdAAA3tTkMTDKYRI6zB9VW59QNAAQnaACXAAA=
To delete the item, construct a URI pointing to the message and post the request to the messages endpoint. This example shows where the variables for the user identifier and message identifier are in the URI:
$Uri = ("https://graph.microsoft.com/v1.0/users/{0}/messages/{1}/permanentDelete" -f $UserId, $Message.Id) $Uri https://graph.microsoft.com/v1.0/users/eff4cd58-1bb8-4899-94de-795f656b4a18/messages/AAMkADAzNzBmMzU0LTI3NTItNDQzNy04NzhkLWNmMGU1MzEwYThkNABGAAAAAAB_7ILpFNx8TrktaK8VYWerBwDcIrNcmtpBSZUJ1fXZjZ5iAB_wAYDdAAA3tTkMTDKYRI6zB9VW59QNAAQnaACXAAA=/permanentDelete Invoke-MgGraphRequest -Uri $Uri -Method Post
The Graph API doesn’t ask for confirmation before proceeding to remove the item and it doesn’t provide a status to show that the deletion was successful. The only indication that something happened is found by using the Get-MailboxFolderStatistics cmdlet to see if the items in the Purges folder increase:
Get-MailboxFolderStatistics -FolderScope RecoverableItems -Identity Tony.Redmond | Format-Table Name, ItemsInFolder Name ItemsInFolder ---- ------------- Recoverable Items 0 Deletions 2135 DiscoveryHolds 2543 Purges 16 SubstrateHolds 12 Versions 79
Alternatively, use the MFCMAPI utility to examine the items in the Purges folder. Figure 1 shows that the “Thank you for subscribing” message is in the Purges folder.

Permanent Removal with the Microsoft Graph PowerShell SDK
The Remove-MgUserMessagePermanent cmdlet does the same job as the Graph API request:
Remove-MgUserMessagePermanent -UserId $UserId -MessageId $Message.Id
Once again, there’s no status or confirmation required for the deletion to proceed. The other Microsoft Graph PowerShell SDK cmdlets to permanently remove objects are:
- Remove-MgUserMailFolderPermanent: Remove mail folder
- Remove-MgUserCalendarPermanent: Remove calendar.
- Remove-MgUserEventPermanent: Remove calendar event.
- Remove-MgUserContactPermanent: Remove contact.
- Remove-MgUserContactFolderPermanent: Remove contact folder.
All the cmdlets work in the same way. Deletion is immediate and permanent.
Adding new automation capabilities by extending APIs is always welcome. I just need to find a suitable use case for the new cmdlets.
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.
Mainframes Are the New AI Infrastructure. Protect it with Secure AI
If your AI workloads run in containers, then securing those containers is the first and most important step in protecting your AI. And as enterprises begin to deploy containerized AI workloads on Red Hat OpenShift for mainframe environments, that priority becomes even more urgent.
If your AI workloads run in containers, then securing those containers is the first and most important step in protecting your AI. And as enterprises begin to deploy containerized AI workloads on Red Hat OpenShift for mainframe environments, that priority becomes even more urgent.
Read More
Experimental Design in Matlab
Can anyone help me with run a complete CCD or BBD experimental design in matlab? Actually I use RStudio for run my DoE but i would like to learn how to perform these in Matlab.
I found this page https://it.mathworks.com/help/stats/design-of-experiments-1.html that give me some information but this is not enough…
I would like to know also the script for give the experimental responses, extimate coefficient, perform the ANOVA and response surface and so on..
Thank you so much!Can anyone help me with run a complete CCD or BBD experimental design in matlab? Actually I use RStudio for run my DoE but i would like to learn how to perform these in Matlab.
I found this page https://it.mathworks.com/help/stats/design-of-experiments-1.html that give me some information but this is not enough…
I would like to know also the script for give the experimental responses, extimate coefficient, perform the ANOVA and response surface and so on..
Thank you so much! Can anyone help me with run a complete CCD or BBD experimental design in matlab? Actually I use RStudio for run my DoE but i would like to learn how to perform these in Matlab.
I found this page https://it.mathworks.com/help/stats/design-of-experiments-1.html that give me some information but this is not enough…
I would like to know also the script for give the experimental responses, extimate coefficient, perform the ANOVA and response surface and so on..
Thank you so much! doe, ccd, bbd MATLAB Answers — New Questions
Solving ODE just for one time step
I want to solve some ODE using matlab solver (ode45, ode15s, etc) just for one time step. The time step is decided internally by the solver. Is this possible to do?I want to solve some ODE using matlab solver (ode45, ode15s, etc) just for one time step. The time step is decided internally by the solver. Is this possible to do? I want to solve some ODE using matlab solver (ode45, ode15s, etc) just for one time step. The time step is decided internally by the solver. Is this possible to do? ode, solver MATLAB Answers — New Questions
How do I put more than one patternCustom plot into a figure when it seems like neither subplot or tiledlayout will work?
I am using multiple patternCustom plots that use CoordinateSystem="polar", Slice="theta" that I would like to show in the same figure in a 2×3 format. It seems that neither tiledlayout or subplots will work. I would think there has to be a straightforward way to do this, that someone can show me.I am using multiple patternCustom plots that use CoordinateSystem="polar", Slice="theta" that I would like to show in the same figure in a 2×3 format. It seems that neither tiledlayout or subplots will work. I would think there has to be a straightforward way to do this, that someone can show me. I am using multiple patternCustom plots that use CoordinateSystem="polar", Slice="theta" that I would like to show in the same figure in a 2×3 format. It seems that neither tiledlayout or subplots will work. I would think there has to be a straightforward way to do this, that someone can show me. patterncustom, tiledlayout, subplot, figure, multiple plots MATLAB Answers — New Questions
Intersection points of multiple straight line segments
This feels as though it should be easy, but other than creating loops which for large data sets run for ever I can’t see how to do this
I have mulitple line segments with end points in the form [x11 y11 x12 y12; x21 y21 x22 y22;…] [x13 y13 x14 y14; x23 y23 x24 y24;…]
I am trying to find intersection points between any pair of line segments in the two lists
I know how to find where any specific two intersect, using xy = [x1*y2-x2*y1,x3*y4-x4*y3]/[y2-y1,y4-y3;-(x2-x1),-(x4-x3)]; and looping through each list in turn
but can’t see an efficient way of testing all possible pairs
Any help gratefully receivedThis feels as though it should be easy, but other than creating loops which for large data sets run for ever I can’t see how to do this
I have mulitple line segments with end points in the form [x11 y11 x12 y12; x21 y21 x22 y22;…] [x13 y13 x14 y14; x23 y23 x24 y24;…]
I am trying to find intersection points between any pair of line segments in the two lists
I know how to find where any specific two intersect, using xy = [x1*y2-x2*y1,x3*y4-x4*y3]/[y2-y1,y4-y3;-(x2-x1),-(x4-x3)]; and looping through each list in turn
but can’t see an efficient way of testing all possible pairs
Any help gratefully received This feels as though it should be easy, but other than creating loops which for large data sets run for ever I can’t see how to do this
I have mulitple line segments with end points in the form [x11 y11 x12 y12; x21 y21 x22 y22;…] [x13 y13 x14 y14; x23 y23 x24 y24;…]
I am trying to find intersection points between any pair of line segments in the two lists
I know how to find where any specific two intersect, using xy = [x1*y2-x2*y1,x3*y4-x4*y3]/[y2-y1,y4-y3;-(x2-x1),-(x4-x3)]; and looping through each list in turn
but can’t see an efficient way of testing all possible pairs
Any help gratefully received intersects MATLAB Answers — New Questions
How Microsoft 365 Copilot Tenants Benefit from SharePoint Advanced Management
Ignite Announcement About SAM for Copilot Customers Misinterpreted by Many
At the Ignite 2024 conference, Microsoft announced that “Microsoft 365 Copilot will now include built-in content governance controls and insights provided by SharePoint Advanced Management.” At the time, and still broadly believed, the assumption was that Microsoft would provide customers with Microsoft 365 Copilot licenses with SharePoint Advanced Management (SAM) licenses. Maybe even a single SAM license would be sufficient to license SAM technology alongside Copilot. That’s not the case.
If you’ve been waiting for a SAM license to appear in your tenant, you’ll be disappointed and won’t see SAM listed in the set of tenant subscriptions. Don’t be swayed by the banner in the SharePoint Online admin center to announce that your SharePoint Advanced Management subscription is enabled (Figure 1). It’s not. Access to SAM features is granted through a check enabled in code for the presence of Copilot. The necessary update is now broadly available to customers.

SAM Features for Microsoft 365 Copilot Customers
The facts are laid out in the SAM documentation. Customers with eligible Copilot licenses can use some, but not all, SAM functionality without a SAM license. Here’s the list:
- Site Lifecycle Policy
- Inactive SharePoint sites policy
- Site Ownership Policy
- Data Access Governance (DAG) Insights
- “Everyone Except External Users” (EEEU) insights
- Sharing Links and Sensitivity Labels
- PowerShell: Permission state report for SharePoint and OneDrive Sites, and Files
- Sharing links report
- Site Access Review
- Restricted Content Discovery (RCD – enabled via PowerShell)
- Restricted Access Control (RAC) for SharePoint and OneDrive for Business.
- Recent Admin Actions and Change History
- Block Download Policy
- SharePoint and OneDrive sites
- Teams recordings
There’s some good stuff here, particularly Restricted Content Discovery (RCD), the Site Lifecycle Policy to manage inactive sites, and the Block download policy. Every tenant with Microsoft 365 Copilot should consider enabling RCD to block Copilot access to sites containing sensitive Office and PDF files and sites containing old and obsolete material (the digital rot or debris that clutters up so many tenants).
The problem with Copilot reusing sensitive material in its responses is obvious. The issue with Copilot reusing old, obsolete, and potentially misleading content in its responses is equally problematic, especially if human checks don’t catch errors in responses. Copilot doesn’t know when a Word document written ten years ago is outdated and inaccurate. All Copilot sees is words that can be processed and reused.
When SAM is Needed
All of which brings me to a point where a SAM license is required. In my case, I wanted to test the extend SharePoint protections with a default sensitivity label feature. The idea here is to make sure that unlabeled files receive protection when downloaded by applying a sensitivity label with equivalent rights to those enjoyed by site users. Defining a default sensitivity label for a document library already requires an Office 365 E5 license or equivalent. Why this slight extension wanders into the need to have SAM is another example of bizarre Microsoft licensing.
The documentation notes that Copilot can’t currently open files with sensitivity labels applied in this manner. This means that Copilot cannot extract the protected content to use in its responses because it doesn’t have the right to do so. However, Copilot can search the metadata of labeled files and show that metadata to those who perform searches. Restricted Content Discovery is the right way to block Copilot access to files.
Anyway, without a SAM license, I can’t test. Do I want to pay Microsoft for a license for the privilege of testing their software? I don’t think so.
Copilot in Word for iOS
In closing, I attempted to use a new feature in Word for iOS (and Android) to dictate some notes for this article for Copilot to reason over and produce a draft. The feature is covered in MC1060866 (23 April 2025) and deployment has begun, which is why I guess I could use it. The dictation part worked, even if some of my words were misunderstood (Figure 2). But any attempt to have Copilot do some magic failed utterly. I guess that AI can’t help me…

Support the work of the Office 365 for IT Pros team by subscribing to the Office 365 for IT Pros eBook. Your support pays for the time we need to track, analyze, and document the changing world of Microsoft 365 and Office 365.
I haven’t defined syms x but solve function gives me values depend on x
I am designing a PID controller for which I set the denominator of my closed-loop transfer function equal to the product of the dominant poles and the residue polynomial.
My goal is to get values that depend on Ki, but even though I don’t use the syms x command, my values depend on x and Ki.
clear all;
clc;
syms zeta positive
syms s;
syms Kp Ki Kd;
% Given values
ts = 4; % Settling time
Mp = 0.05; % Maximum overshoot
% Define the overshoot equation
eq1 = exp(-zeta*pi / sqrt(1 – zeta^2)) == Mp;
% Solve for zeta numerically (only real positive solution makes sense)
zeta = double(vpasolve(eq1, zeta, [0 1]));
% Now calculate omega_n using Ts = 4 / (zeta * omega_n)
w_n = 4 / (zeta * ts);
G= (s+1)/(s^3 +6*s^2 +10*s -15)
H= 10/(s+10)
F= (Kd*s^2 + Kp*s + Ki)/s
Tcl= (F*G)/(1 + F*G*H)
[num, den] = numden(simplifyFraction(Tcl));
num = expand(num)
den = expand(den)
num_s = coeffs(num, s, ‘All’)
den_s = coeffs(den, s, ‘All’)
Pd=s^2 +2*zeta*w_n*s+(w_n)^2
syms e0 e1 e2 positive;
Pr= (s+e0)*(s+e1)*(s+e2)
Pe=expand(Pd*Pr)
Pe_s= coeffs(Pe,s,"All")
eq2 = Pe_s == den_s
sol2 = solve(eq2, [Kp, Kd, e0, e1, e2], ‘Real’, true);
% den_s=subs(den_s,[Kd,Kp],[sol2.Kd,sol2.Kp])
% F = subs(F,[Kd,Kp],[sol2.Kd,sol2.Kp])I am designing a PID controller for which I set the denominator of my closed-loop transfer function equal to the product of the dominant poles and the residue polynomial.
My goal is to get values that depend on Ki, but even though I don’t use the syms x command, my values depend on x and Ki.
clear all;
clc;
syms zeta positive
syms s;
syms Kp Ki Kd;
% Given values
ts = 4; % Settling time
Mp = 0.05; % Maximum overshoot
% Define the overshoot equation
eq1 = exp(-zeta*pi / sqrt(1 – zeta^2)) == Mp;
% Solve for zeta numerically (only real positive solution makes sense)
zeta = double(vpasolve(eq1, zeta, [0 1]));
% Now calculate omega_n using Ts = 4 / (zeta * omega_n)
w_n = 4 / (zeta * ts);
G= (s+1)/(s^3 +6*s^2 +10*s -15)
H= 10/(s+10)
F= (Kd*s^2 + Kp*s + Ki)/s
Tcl= (F*G)/(1 + F*G*H)
[num, den] = numden(simplifyFraction(Tcl));
num = expand(num)
den = expand(den)
num_s = coeffs(num, s, ‘All’)
den_s = coeffs(den, s, ‘All’)
Pd=s^2 +2*zeta*w_n*s+(w_n)^2
syms e0 e1 e2 positive;
Pr= (s+e0)*(s+e1)*(s+e2)
Pe=expand(Pd*Pr)
Pe_s= coeffs(Pe,s,"All")
eq2 = Pe_s == den_s
sol2 = solve(eq2, [Kp, Kd, e0, e1, e2], ‘Real’, true);
% den_s=subs(den_s,[Kd,Kp],[sol2.Kd,sol2.Kp])
% F = subs(F,[Kd,Kp],[sol2.Kd,sol2.Kp]) I am designing a PID controller for which I set the denominator of my closed-loop transfer function equal to the product of the dominant poles and the residue polynomial.
My goal is to get values that depend on Ki, but even though I don’t use the syms x command, my values depend on x and Ki.
clear all;
clc;
syms zeta positive
syms s;
syms Kp Ki Kd;
% Given values
ts = 4; % Settling time
Mp = 0.05; % Maximum overshoot
% Define the overshoot equation
eq1 = exp(-zeta*pi / sqrt(1 – zeta^2)) == Mp;
% Solve for zeta numerically (only real positive solution makes sense)
zeta = double(vpasolve(eq1, zeta, [0 1]));
% Now calculate omega_n using Ts = 4 / (zeta * omega_n)
w_n = 4 / (zeta * ts);
G= (s+1)/(s^3 +6*s^2 +10*s -15)
H= 10/(s+10)
F= (Kd*s^2 + Kp*s + Ki)/s
Tcl= (F*G)/(1 + F*G*H)
[num, den] = numden(simplifyFraction(Tcl));
num = expand(num)
den = expand(den)
num_s = coeffs(num, s, ‘All’)
den_s = coeffs(den, s, ‘All’)
Pd=s^2 +2*zeta*w_n*s+(w_n)^2
syms e0 e1 e2 positive;
Pr= (s+e0)*(s+e1)*(s+e2)
Pe=expand(Pd*Pr)
Pe_s= coeffs(Pe,s,"All")
eq2 = Pe_s == den_s
sol2 = solve(eq2, [Kp, Kd, e0, e1, e2], ‘Real’, true);
% den_s=subs(den_s,[Kd,Kp],[sol2.Kd,sol2.Kp])
% F = subs(F,[Kd,Kp],[sol2.Kd,sol2.Kp]) solve MATLAB Answers — New Questions
Classification problem parsed as regression problem when Split Criterion is supplied to fitcensemble
Hi
I ran a hyperparameter optimization to find the best parameters for a two-class classification problem using _fitcensemble_. But when I try to use these I get a strange warning:
*Warning: You must pass ‘SplitCriterion’ as a character vector ‘mse’ for regression.*
What is wrong with my code? The warning comes when I use a boosting ensemble as ‘method’. When I remove the ‘SplitCriterion’ everything works fine, but I cannot understand why Matlab somewhere on the line thinks this is a regression problem when I use fit"c"ensemble.
Here is a toy example with arbitrarily chosen settings that you can run to reproduce the Warning/Error.
load carsmall
X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,Model_Year,Weight,MPG);
X.Cylinders(X.Cylinders < 8) = 0; % Create two classes in the Cylinders variable
t = templateTree( ‘MaxNumSplits’, 30,…
‘MinLeafSize’, 10,…
‘SplitCriterion’, ‘gdi’);
classificationEnsemble = fitcensemble(X,’Cylinders’,…
‘Method’, ‘LogitBoost’, …
‘NumLearningCycles’,12,…
‘Learners’,t,…
‘KFold’,7,…
‘LearnRate’,0.1);Hi
I ran a hyperparameter optimization to find the best parameters for a two-class classification problem using _fitcensemble_. But when I try to use these I get a strange warning:
*Warning: You must pass ‘SplitCriterion’ as a character vector ‘mse’ for regression.*
What is wrong with my code? The warning comes when I use a boosting ensemble as ‘method’. When I remove the ‘SplitCriterion’ everything works fine, but I cannot understand why Matlab somewhere on the line thinks this is a regression problem when I use fit"c"ensemble.
Here is a toy example with arbitrarily chosen settings that you can run to reproduce the Warning/Error.
load carsmall
X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,Model_Year,Weight,MPG);
X.Cylinders(X.Cylinders < 8) = 0; % Create two classes in the Cylinders variable
t = templateTree( ‘MaxNumSplits’, 30,…
‘MinLeafSize’, 10,…
‘SplitCriterion’, ‘gdi’);
classificationEnsemble = fitcensemble(X,’Cylinders’,…
‘Method’, ‘LogitBoost’, …
‘NumLearningCycles’,12,…
‘Learners’,t,…
‘KFold’,7,…
‘LearnRate’,0.1); Hi
I ran a hyperparameter optimization to find the best parameters for a two-class classification problem using _fitcensemble_. But when I try to use these I get a strange warning:
*Warning: You must pass ‘SplitCriterion’ as a character vector ‘mse’ for regression.*
What is wrong with my code? The warning comes when I use a boosting ensemble as ‘method’. When I remove the ‘SplitCriterion’ everything works fine, but I cannot understand why Matlab somewhere on the line thinks this is a regression problem when I use fit"c"ensemble.
Here is a toy example with arbitrarily chosen settings that you can run to reproduce the Warning/Error.
load carsmall
X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,Model_Year,Weight,MPG);
X.Cylinders(X.Cylinders < 8) = 0; % Create two classes in the Cylinders variable
t = templateTree( ‘MaxNumSplits’, 30,…
‘MinLeafSize’, 10,…
‘SplitCriterion’, ‘gdi’);
classificationEnsemble = fitcensemble(X,’Cylinders’,…
‘Method’, ‘LogitBoost’, …
‘NumLearningCycles’,12,…
‘Learners’,t,…
‘KFold’,7,…
‘LearnRate’,0.1); fitcensemble, split criterion, classification, regression, hyperparameter, optimization, boost, templatetree MATLAB Answers — New Questions
How do I make a 10×10 showing all numbers 1 to 100?
how do i create a nested loop tht will provide me with a 10×10 matrix with all the numbers 1 to 100 like this
1 2 … 10
11 … … …
… … … …
… … … 100how do i create a nested loop tht will provide me with a 10×10 matrix with all the numbers 1 to 100 like this
1 2 … 10
11 … … …
… … … …
… … … 100 how do i create a nested loop tht will provide me with a 10×10 matrix with all the numbers 1 to 100 like this
1 2 … 10
11 … … …
… … … …
… … … 100 matrix loop nested MATLAB Answers — New Questions
Is it possible to get the version number of a compiled program inside the program? I am using the Application Compiler.
For a project I am working on, I would like the program to output the current version being used in a char array. I have the following code:
if(isdeployed)
version = (Help here);
version_message = [‘Now running program.exe version: ‘ version];
else
version = ‘script’;
version_message = [‘Now running program.m version: ‘ version];
end
disp(version_message);
Is it possible to dynamically get the version number, or do I have to manually set it to ensure they are the same? I know it can be done with App Designer, but this executable does not use App Designer.For a project I am working on, I would like the program to output the current version being used in a char array. I have the following code:
if(isdeployed)
version = (Help here);
version_message = [‘Now running program.exe version: ‘ version];
else
version = ‘script’;
version_message = [‘Now running program.m version: ‘ version];
end
disp(version_message);
Is it possible to dynamically get the version number, or do I have to manually set it to ensure they are the same? I know it can be done with App Designer, but this executable does not use App Designer. For a project I am working on, I would like the program to output the current version being used in a char array. I have the following code:
if(isdeployed)
version = (Help here);
version_message = [‘Now running program.exe version: ‘ version];
else
version = ‘script’;
version_message = [‘Now running program.m version: ‘ version];
end
disp(version_message);
Is it possible to dynamically get the version number, or do I have to manually set it to ensure they are the same? I know it can be done with App Designer, but this executable does not use App Designer. compiler, version number, matlab MATLAB Answers — New Questions
Same script, faster execution when running in a spawned instance (“!matlab …”)?
Dear Community,
I am running Matlab 2024b under Windows 10 / 32GB RAM on a 6-core laptop Intel CPU (hyperthreading deactivated). For the sake of runtime optimisation I have done the following comparison:
case #1: a script running within the current Matlab session (single instance) and
case #2: the same script running in a spawned session (instance), using "!matlab -nosplash -desktop -r "load …" (etc.).
The runtime results are as follows:
script #1 finished in about an hour, total CPU load ~50% at boost clock (single Matlab instance)
script #2 finished in about HALF an hour (!), similar total CPU load ~50% at boost clock; main Matlab instance idle (~0%), spawned instance ~40%
I muss admit I do not understand the results: why does a spawned Matlab instance (i.e. two instances running in parallel: main/idle and active) complete the task in half of the time, compared to a single instance?
What might be the reason for this behavior?
Thanks a lot in advance!
MarekDear Community,
I am running Matlab 2024b under Windows 10 / 32GB RAM on a 6-core laptop Intel CPU (hyperthreading deactivated). For the sake of runtime optimisation I have done the following comparison:
case #1: a script running within the current Matlab session (single instance) and
case #2: the same script running in a spawned session (instance), using "!matlab -nosplash -desktop -r "load …" (etc.).
The runtime results are as follows:
script #1 finished in about an hour, total CPU load ~50% at boost clock (single Matlab instance)
script #2 finished in about HALF an hour (!), similar total CPU load ~50% at boost clock; main Matlab instance idle (~0%), spawned instance ~40%
I muss admit I do not understand the results: why does a spawned Matlab instance (i.e. two instances running in parallel: main/idle and active) complete the task in half of the time, compared to a single instance?
What might be the reason for this behavior?
Thanks a lot in advance!
Marek Dear Community,
I am running Matlab 2024b under Windows 10 / 32GB RAM on a 6-core laptop Intel CPU (hyperthreading deactivated). For the sake of runtime optimisation I have done the following comparison:
case #1: a script running within the current Matlab session (single instance) and
case #2: the same script running in a spawned session (instance), using "!matlab -nosplash -desktop -r "load …" (etc.).
The runtime results are as follows:
script #1 finished in about an hour, total CPU load ~50% at boost clock (single Matlab instance)
script #2 finished in about HALF an hour (!), similar total CPU load ~50% at boost clock; main Matlab instance idle (~0%), spawned instance ~40%
I muss admit I do not understand the results: why does a spawned Matlab instance (i.e. two instances running in parallel: main/idle and active) complete the task in half of the time, compared to a single instance?
What might be the reason for this behavior?
Thanks a lot in advance!
Marek multiple instance spawn MATLAB Answers — New Questions
Microsoft Extends DLP Policy for Copilot to Office Apps
Same DLP Policy for Copilot Used to Block BizChat
On May 1, Microsoft announced that the public preview of the DLP policy for Microsoft 365 Copilot is effective for the Office apps (MC1059677, 21 April 2025, Microsoft 365 roadmap item 423483). The new functionality is an extension of the DLP policy introduced in March 2025. At that time, the policy only covered Microsoft 365 Copilot Chat (BizChat). Its extension to cover the Office apps (desktop and web) is logical, even if the implementation is different. We’ll get to what those differences are shortly.
How the DLP Policy for Copilot Works
As a quick refresher, the DLP policy for Copilot works by checking if a file is assigned a specific sensitivity label. If true, the Copilot functionality built into the app is limited and the content of the file cannot be used in Copilot responses, such as creating a document summary.
Apps are responsible for checking if a DLP policy is active within the tenant and what sensitivity labels are associated with the policy, so the announcement marks the inclusion of the necessary code in the Office apps to check for the DLP policy. I tested with Microsoft 365 Enterprise Apps version 2504 (build 18730.20122).
Like any other DLP policy, the policy can have multiple rules. In this case, rules for the DLP policy for Copilot block access for a sensitivity label, so if you want to block access for multiple sensitivity labels, the DLP policy has a separate rule for each label. If you created the DLP policy for Copilot to use with BizChat, you don’t need to do anything to extend the policy to cover the Office apps.
Using the DLP Policy for Copilot in Word
As an example, I created a Word document and tested that all the Copilot functionality worked as expected. I saved the document and reopened it to force Copilot to generate the automatic summary.
I then applied one of the sensitivity labels covered by a rule in the DLP policy for Copilot and tried out some of the Copilot features. As you can see from Figure 1, the automatic summary was not removed (but the summary cannot be updated), and asking Copilot to explicitly summarize the document fails because “your organization’s policy doesn’t allow it.” However, it looks like Copilot can query the content of the document to answer questions in chat.

In their announcement, Microsoft says that “Copilot actions like summarizing or auto-generating content directly in the canvas are blocked.” They also say that chatting with Copilot is also blocked, but as you can see in Figure 1, Copilot answered a predefined question (“What is the purpose of DLP for M365 Copilot”) quite happily. On the other hand, if you go to the Message Copilot section and input the same question, Copilot refuses to answer. The block on chat worked in the web app but not always in the desktop version of Word (but this is preview software, so some bugs are expected).
Finally, Copilot cannot reference a file protected by one of the sensitivity labels covered by the DLP policy (an action that forces Copilot to extract the content of the referenced document).
Maybe Just Turn Copilot Off
I’ve used Copilot for nearly two years, and I was initially confused by the effect the DLP policy for Copilot has on the Office apps. To me, it would be simpler and more understandable to disable Copilot completely for documents within the scope of the DLP policy. I would remove the Copilot button from the menu bar and make sure that no UI elements that expose any Copilot feature, like the automatic summary appear. Right now, the UI is a confusing mishmash of things that work and stuff that doesn’t that needs to be cleaned up.
Learn how to exploit the data available to Microsoft 365 tenant administrators through the Office 365 for IT Pros eBook. We love figuring out how things work.
Wave simulation
Hello
I’m trying to simulate a single source wave in matlab
does anyone know how to do that? (code tips)
ThanksHello
I’m trying to simulate a single source wave in matlab
does anyone know how to do that? (code tips)
Thanks Hello
I’m trying to simulate a single source wave in matlab
does anyone know how to do that? (code tips)
Thanks wave, matlab, array, plotting, matlab gui, graph, simulation, code generation, 2d MATLAB Answers — New Questions
How to check Matlab code Plagiarism
How can we check MATLAB code plagiarism? Is there any software available?How can we check MATLAB code plagiarism? Is there any software available? How can we check MATLAB code plagiarism? Is there any software available? plagiarism, cheating, copying MATLAB Answers — New Questions