Category: News
How to plot and calculate 95% confidence interval
Hello,
I have two vectors of the actual values and predicted values and I want to calculate and plot 95% confidenence interval just like the image I have attached. Colud you please help me?
thanks a lot.Hello,
I have two vectors of the actual values and predicted values and I want to calculate and plot 95% confidenence interval just like the image I have attached. Colud you please help me?
thanks a lot. Hello,
I have two vectors of the actual values and predicted values and I want to calculate and plot 95% confidenence interval just like the image I have attached. Colud you please help me?
thanks a lot. matlab, plot, machine learning MATLAB Answers — New Questions
Increasing the line width of box plot whiskers
I have written some code to produce 2 boxplots side by side using tiledlayout. I would like to increase the line weight of the boxes and the whiskers and have written the code to do so as follows:
figure()
t = tiledlayout(1,2,’tilespacing’,’none’);
nexttile
boxplot(T_toPlot,’BoxStyle’,’outline’,’Color’, ‘b’, ‘Symbol’,’xk’, ‘OutlierSize’,8,’Labels’, labels);
bx1 = findobj(‘Tag’,’boxplot’);
set(bx1.Children,’LineWidth’,2)
h = findobj(gca,’Tag’,’Box’);
for j=1:length(h)
patch(get(h(j),’XData’),get(h(j),’YData’),get(h(j),’Color’),’FaceAlpha’,.5);
end
clear h j
nexttile
boxplot(S_toPlot,’BoxStyle’,’outline’,’Color’, ‘b’, ‘Symbol’,’xk’, ‘OutlierSize’,8,’Labels’, labels);
bx2 = findobj(‘Tag’,’boxplot’);
set(bx2.Children,’LineWidth’,2)
h = findobj(gca,’Tag’,’Box’);
for j=1:length(h)
patch(get(h(j),’XData’),get(h(j),’YData’),get(h(j),’Color’),’FaceAlpha’,.5);
end
clear h j
The first time I run this code, the first tile runs successfully and I get the following error message for the second tile:
Error using matlab.graphics.primitive.Line/set
Invalid parameter/value pair arguments.
Error in Filename (line XXX)
set(bx2.Children,’LineWidth’,2)
If I then do nothing, just hit enter again to re-run the cell, it then fails with the same error, but now for the first tile – and does not reach the second tile. Even if I clear the workspace and re-run the data processing from scratch, subsequent re-runs will fail for the first tile unless I restart the program. How can I increase the line weight of the boxplots (particularly the whiskers) without running into this problem? Thanks!I have written some code to produce 2 boxplots side by side using tiledlayout. I would like to increase the line weight of the boxes and the whiskers and have written the code to do so as follows:
figure()
t = tiledlayout(1,2,’tilespacing’,’none’);
nexttile
boxplot(T_toPlot,’BoxStyle’,’outline’,’Color’, ‘b’, ‘Symbol’,’xk’, ‘OutlierSize’,8,’Labels’, labels);
bx1 = findobj(‘Tag’,’boxplot’);
set(bx1.Children,’LineWidth’,2)
h = findobj(gca,’Tag’,’Box’);
for j=1:length(h)
patch(get(h(j),’XData’),get(h(j),’YData’),get(h(j),’Color’),’FaceAlpha’,.5);
end
clear h j
nexttile
boxplot(S_toPlot,’BoxStyle’,’outline’,’Color’, ‘b’, ‘Symbol’,’xk’, ‘OutlierSize’,8,’Labels’, labels);
bx2 = findobj(‘Tag’,’boxplot’);
set(bx2.Children,’LineWidth’,2)
h = findobj(gca,’Tag’,’Box’);
for j=1:length(h)
patch(get(h(j),’XData’),get(h(j),’YData’),get(h(j),’Color’),’FaceAlpha’,.5);
end
clear h j
The first time I run this code, the first tile runs successfully and I get the following error message for the second tile:
Error using matlab.graphics.primitive.Line/set
Invalid parameter/value pair arguments.
Error in Filename (line XXX)
set(bx2.Children,’LineWidth’,2)
If I then do nothing, just hit enter again to re-run the cell, it then fails with the same error, but now for the first tile – and does not reach the second tile. Even if I clear the workspace and re-run the data processing from scratch, subsequent re-runs will fail for the first tile unless I restart the program. How can I increase the line weight of the boxplots (particularly the whiskers) without running into this problem? Thanks! I have written some code to produce 2 boxplots side by side using tiledlayout. I would like to increase the line weight of the boxes and the whiskers and have written the code to do so as follows:
figure()
t = tiledlayout(1,2,’tilespacing’,’none’);
nexttile
boxplot(T_toPlot,’BoxStyle’,’outline’,’Color’, ‘b’, ‘Symbol’,’xk’, ‘OutlierSize’,8,’Labels’, labels);
bx1 = findobj(‘Tag’,’boxplot’);
set(bx1.Children,’LineWidth’,2)
h = findobj(gca,’Tag’,’Box’);
for j=1:length(h)
patch(get(h(j),’XData’),get(h(j),’YData’),get(h(j),’Color’),’FaceAlpha’,.5);
end
clear h j
nexttile
boxplot(S_toPlot,’BoxStyle’,’outline’,’Color’, ‘b’, ‘Symbol’,’xk’, ‘OutlierSize’,8,’Labels’, labels);
bx2 = findobj(‘Tag’,’boxplot’);
set(bx2.Children,’LineWidth’,2)
h = findobj(gca,’Tag’,’Box’);
for j=1:length(h)
patch(get(h(j),’XData’),get(h(j),’YData’),get(h(j),’Color’),’FaceAlpha’,.5);
end
clear h j
The first time I run this code, the first tile runs successfully and I get the following error message for the second tile:
Error using matlab.graphics.primitive.Line/set
Invalid parameter/value pair arguments.
Error in Filename (line XXX)
set(bx2.Children,’LineWidth’,2)
If I then do nothing, just hit enter again to re-run the cell, it then fails with the same error, but now for the first tile – and does not reach the second tile. Even if I clear the workspace and re-run the data processing from scratch, subsequent re-runs will fail for the first tile unless I restart the program. How can I increase the line weight of the boxplots (particularly the whiskers) without running into this problem? Thanks! boxplot, matlab MATLAB Answers — New Questions
what is power spectrum value mean (‘pspectrum’)
I used the following code.
This is a code that perform STFT on time series pressure data.
[p, f, t] = pspectrum(Pascal, sample_rate, ‘TimeResolution’, 1, ‘spectrogram’);
The MATLAB hompage explanation says the output(‘p’) represents the power spectrum value.
I want to ask what is a power spectrum value’s physical meaning, How is it related to my input, ‘Pascal’ ?
Thank you.I used the following code.
This is a code that perform STFT on time series pressure data.
[p, f, t] = pspectrum(Pascal, sample_rate, ‘TimeResolution’, 1, ‘spectrogram’);
The MATLAB hompage explanation says the output(‘p’) represents the power spectrum value.
I want to ask what is a power spectrum value’s physical meaning, How is it related to my input, ‘Pascal’ ?
Thank you. I used the following code.
This is a code that perform STFT on time series pressure data.
[p, f, t] = pspectrum(Pascal, sample_rate, ‘TimeResolution’, 1, ‘spectrogram’);
The MATLAB hompage explanation says the output(‘p’) represents the power spectrum value.
I want to ask what is a power spectrum value’s physical meaning, How is it related to my input, ‘Pascal’ ?
Thank you. fft, stft, noise, signal MATLAB Answers — New Questions
Error using assignin in a nested m function
Error using assignin
Attempt to add "q" to a static workspace.
Error in syms (line 283)
assignin(‘caller’, x, xsym);
Error in mywork/myfunction (line 66)
syms a(t) q
This error occurs when running mywork.m but not myfunction alone.Error using assignin
Attempt to add "q" to a static workspace.
Error in syms (line 283)
assignin(‘caller’, x, xsym);
Error in mywork/myfunction (line 66)
syms a(t) q
This error occurs when running mywork.m but not myfunction alone. Error using assignin
Attempt to add "q" to a static workspace.
Error in syms (line 283)
assignin(‘caller’, x, xsym);
Error in mywork/myfunction (line 66)
syms a(t) q
This error occurs when running mywork.m but not myfunction alone. syms MATLAB Answers — New Questions
Copilot’s Temporary Chat
Temporary Chat is Copilot’s Response to Similar Features in Other AI Chat Apps
I guess I must have missed the memo about the introduction of temporary chat sessions for Microsoft 365 Copilot (BizChat), but the facility to conduct a chat with Copilot has apparently existed for a couple of months (Figure 1). Temporary chats can be conducted using work or web resource. However, a temporary chat doesn’t seem to be able to use GPT-5 (at least not yet). Perhaps this will be possible when GPT-5 becomes the default by the end of November (MC1176368, last updated 30 October 2025).

A temporary chat is one that doesn’t contribute to the memories maintained by Copilot maintains for normal chats. Similar features are available for ChatGPT, Perplexity, and Gemini, all of which were added in late summer 2025. According to Microsoft’s Copilot Chat roadmap, temporary chat is in the “being currently being built” category, but that’s likely just outdated documentation.

All of the other tools like citation sources work as expected. The only thing that’s missing is the chat thread that usually stores prompts and responses created during a session. A chat thread (listed under “Conversations”) can be loaded into Copilot chat to continue a conversation. Because the chat thread is discarded once a temporary chat ceases, there’s no way to restart the conversation. If you want to save the results of a temporary chat, use Copilot pages (and optionally edit the results in Word).
According to Copilot, a temporary chat is ideal for brainstorming new ideas, generating draft proposals, or asking confidential questions without having the results captured in a chat thread. Remember that information generated for chat responses can resurface in future Copilot responses saved as a memory or in Copilot pages, so if you want the results of interaction with Copilot to disappear once the session is over, a temporary chat is a good way to achieve the goal.
Interaction Records for Temporary Chats
Although temporary chats disappear from user view and won’t be recycled by Copilot, audit events for the interactions in a temporary chat are still captured in the Microsoft 365 audit log and can be reviewed by administrators using audit log searches, accessing the compliance copies stored in the hidden TeamsMessagesData folder in user mailboxes, or by using the Graph AiInteractionHistory API to retrieve a user’s chat history. In other words, if someone uses temporary chats for a purpose that wouldn’t be approved by the organization, their activity might be detected through an administrative scan of interaction records.
For example, here’s the record for the prompt shown in Figure 2 as captured by the AiInteractionHistory API (the user who submitted the prompt is known because their account identifier is needed to submit the API request):
id : 1762780547334
sessionId : 19:VYCrQOrG6IkiZRiJA3uckyFPbKwxjnYSkzS6CkRCyqE1@thread.v2
requestId : 2c8c0203-15d1-4779-8bc8-2ff277f9e18f
appClass : IPM.SkypeTeams.Message.Copilot.PrivateChat
interactionType : userPrompt
conversationType : appchat
etag : 1762780547334
createdDateTime : 10/11/2025 13:15:47
locale : en-us
contexts : {}
from : @{@odata.type=#microsoft.graph.chatMessageFromIdentitySet; application=; device=; user=}
body : @{contentType=text; content=What's happening with Copilot Temporary Chat?}
attachments : {}
links : {}
mentions : {}
The Nature of Recycled Thoughts
I’m not sure when I will ever use a temporary chat, but I’m sure that some will find a use for this feature (apart from kicking the tires, that is). I understand that leaving no trace behind after a chat might be good in some situations. Who wants Copilot to recycle information discussed in a chat? Oh wait, isn’t recycling information what Generative AI’s all about?
Keep up to date with developments like what’s happening with Microsoft 365 Copilot by subscribing to the Office 365 for IT Pros eBook. Our monthly updates make sure that our subscribers understand the most important changes happening across Office 365.
pcolor plot: how to scale the smoothing differently in x and y directions
I have data of say this type (this is a simplified example):
A = [0 0 0 0 0 0
0 0 2 0 0 0
0 0 9 0 0 0
0 0 1 1 0 0
0 0 0 8 0 0
0 0 0 1 0 0
0 0 0 0 0 0];
If I do:
figure; pcolor(A); shading interp
then I get two distinct "peaks":
Now the thing is that I know from the property of the data (two-dimensional gas chromatography) that it is actually the same peak, it is normal that in each column the peak is moving by some pixels downward (in my simplified example here it is moving by two pixels, in the actual data it is even more). I would like to tell pcolor that distance in the x and y direction does not count the same (a sort of weighting maybe?), so that pcolor instead understands that these are one and the same "peak" and plot that as a single "peak". (This must also be directional: if the peak "goes down" in the next column (by approximately the right extent), then it should be considered the same peak. Essentially, instead of considering x and y distances, I want somehow to consider the distance at an angle)… Is there an option to do that easily?I have data of say this type (this is a simplified example):
A = [0 0 0 0 0 0
0 0 2 0 0 0
0 0 9 0 0 0
0 0 1 1 0 0
0 0 0 8 0 0
0 0 0 1 0 0
0 0 0 0 0 0];
If I do:
figure; pcolor(A); shading interp
then I get two distinct "peaks":
Now the thing is that I know from the property of the data (two-dimensional gas chromatography) that it is actually the same peak, it is normal that in each column the peak is moving by some pixels downward (in my simplified example here it is moving by two pixels, in the actual data it is even more). I would like to tell pcolor that distance in the x and y direction does not count the same (a sort of weighting maybe?), so that pcolor instead understands that these are one and the same "peak" and plot that as a single "peak". (This must also be directional: if the peak "goes down" in the next column (by approximately the right extent), then it should be considered the same peak. Essentially, instead of considering x and y distances, I want somehow to consider the distance at an angle)… Is there an option to do that easily? I have data of say this type (this is a simplified example):
A = [0 0 0 0 0 0
0 0 2 0 0 0
0 0 9 0 0 0
0 0 1 1 0 0
0 0 0 8 0 0
0 0 0 1 0 0
0 0 0 0 0 0];
If I do:
figure; pcolor(A); shading interp
then I get two distinct "peaks":
Now the thing is that I know from the property of the data (two-dimensional gas chromatography) that it is actually the same peak, it is normal that in each column the peak is moving by some pixels downward (in my simplified example here it is moving by two pixels, in the actual data it is even more). I would like to tell pcolor that distance in the x and y direction does not count the same (a sort of weighting maybe?), so that pcolor instead understands that these are one and the same "peak" and plot that as a single "peak". (This must also be directional: if the peak "goes down" in the next column (by approximately the right extent), then it should be considered the same peak. Essentially, instead of considering x and y distances, I want somehow to consider the distance at an angle)… Is there an option to do that easily? pcolor x-y distortion MATLAB Answers — New Questions
How to couple Simscape Thermal Liquid/Thermal models with an Electrical Subsystem in Simulink?
Hi, I am building a closed-loop heating system powered electically in Simulink with Simscape using:
Yellow blocks: Thermal Liquid (pipes, tank, valves)
Orange blocks: Thermal domain (to model heat losses, etc.)
Electrical subsystem: done in Simulink ( black blocks)
I am making the main "components" of the heating system: E-boiler, Heat Pump, Water Tank and heating demand, made of the different types of components mentioned above. The water gets heated at the heat pump and e-boiler, gets stored in the water tank and then goes to the heating demand.
I’m stuck on how to connect the electrical part to the thermal/thermal-liquid part. For example, the e-boiler in the thermal-liquid loop is being electrical powered then it heats the water that then flows though the whole heating system. Is this possible?
I was also considering for a while to remake the electrical part with Simscape electrical, thinking it would be easier to connect. Is that the case?
I tried looking for components that can do this directly, but couldn’t find any.
My experience with MATLAB/Simulink is mostly from school projects, so I’m sure I’m missing a lot of things.
Any tips or advice would be very helpful. Thank you!Hi, I am building a closed-loop heating system powered electically in Simulink with Simscape using:
Yellow blocks: Thermal Liquid (pipes, tank, valves)
Orange blocks: Thermal domain (to model heat losses, etc.)
Electrical subsystem: done in Simulink ( black blocks)
I am making the main "components" of the heating system: E-boiler, Heat Pump, Water Tank and heating demand, made of the different types of components mentioned above. The water gets heated at the heat pump and e-boiler, gets stored in the water tank and then goes to the heating demand.
I’m stuck on how to connect the electrical part to the thermal/thermal-liquid part. For example, the e-boiler in the thermal-liquid loop is being electrical powered then it heats the water that then flows though the whole heating system. Is this possible?
I was also considering for a while to remake the electrical part with Simscape electrical, thinking it would be easier to connect. Is that the case?
I tried looking for components that can do this directly, but couldn’t find any.
My experience with MATLAB/Simulink is mostly from school projects, so I’m sure I’m missing a lot of things.
Any tips or advice would be very helpful. Thank you! Hi, I am building a closed-loop heating system powered electically in Simulink with Simscape using:
Yellow blocks: Thermal Liquid (pipes, tank, valves)
Orange blocks: Thermal domain (to model heat losses, etc.)
Electrical subsystem: done in Simulink ( black blocks)
I am making the main "components" of the heating system: E-boiler, Heat Pump, Water Tank and heating demand, made of the different types of components mentioned above. The water gets heated at the heat pump and e-boiler, gets stored in the water tank and then goes to the heating demand.
I’m stuck on how to connect the electrical part to the thermal/thermal-liquid part. For example, the e-boiler in the thermal-liquid loop is being electrical powered then it heats the water that then flows though the whole heating system. Is this possible?
I was also considering for a while to remake the electrical part with Simscape electrical, thinking it would be easier to connect. Is that the case?
I tried looking for components that can do this directly, but couldn’t find any.
My experience with MATLAB/Simulink is mostly from school projects, so I’m sure I’m missing a lot of things.
Any tips or advice would be very helpful. Thank you! simscape, thermal-liquid MATLAB Answers — New Questions
Receiver Position Not Updated in Radar Example?
I am working through this example on passively sensing radar:
https://www.mathworks.com/help/phased/ug/signal-parameter-estimations-in-a-radar-warning-receiver.html
But I’m confused about how the txPulseTrain is received by the collector. It appears that they are injested by the collector at a single angle, rather than at changing angles over time:
[~, tgtAng] = rangeangle(radarPos,rwrPos);
yr = collector(txPulseTrain,tgtAng);
This may be an okay approximation, but it seems like a more accurate approach is to model the receiver at each timestep, in the loop within helperRWR.simulateTransmission.
Also, in the above code, the rwrPos variable above is equal to its original value when the pulses were emitted, not when they were collected, which seems like an oversight?
Please let me know if I’m missing something with both of these issues. Thank you for putting together the example!I am working through this example on passively sensing radar:
https://www.mathworks.com/help/phased/ug/signal-parameter-estimations-in-a-radar-warning-receiver.html
But I’m confused about how the txPulseTrain is received by the collector. It appears that they are injested by the collector at a single angle, rather than at changing angles over time:
[~, tgtAng] = rangeangle(radarPos,rwrPos);
yr = collector(txPulseTrain,tgtAng);
This may be an okay approximation, but it seems like a more accurate approach is to model the receiver at each timestep, in the loop within helperRWR.simulateTransmission.
Also, in the above code, the rwrPos variable above is equal to its original value when the pulses were emitted, not when they were collected, which seems like an oversight?
Please let me know if I’m missing something with both of these issues. Thank you for putting together the example! I am working through this example on passively sensing radar:
https://www.mathworks.com/help/phased/ug/signal-parameter-estimations-in-a-radar-warning-receiver.html
But I’m confused about how the txPulseTrain is received by the collector. It appears that they are injested by the collector at a single angle, rather than at changing angles over time:
[~, tgtAng] = rangeangle(radarPos,rwrPos);
yr = collector(txPulseTrain,tgtAng);
This may be an okay approximation, but it seems like a more accurate approach is to model the receiver at each timestep, in the loop within helperRWR.simulateTransmission.
Also, in the above code, the rwrPos variable above is equal to its original value when the pulses were emitted, not when they were collected, which seems like an oversight?
Please let me know if I’m missing something with both of these issues. Thank you for putting together the example! pulse MATLAB Answers — New Questions
Create Figure Without Displaying it
Hi,
I’d like to create a figure and save it in the background without displaying it.
I’ve heard of setting the "visibility" setting to "off", but the figure window still pops up.
I’d rather just have the figure be created and saved in its specified folder without having to see it.
Any way to do this?
Thanks,
JFHi,
I’d like to create a figure and save it in the background without displaying it.
I’ve heard of setting the "visibility" setting to "off", but the figure window still pops up.
I’d rather just have the figure be created and saved in its specified folder without having to see it.
Any way to do this?
Thanks,
JF Hi,
I’d like to create a figure and save it in the background without displaying it.
I’ve heard of setting the "visibility" setting to "off", but the figure window still pops up.
I’d rather just have the figure be created and saved in its specified folder without having to see it.
Any way to do this?
Thanks,
JF figure, visible, visibility, background, image, create MATLAB Answers — New Questions
Infinite scale: The architecture behind the Azure AI superfactory
Today, we are unveiling the next Fairwater site of Azure AI datacenters in Atlanta, Georgia. This purpose-built datacenter is connected to our first Fairwater site in Wisconsin, prior generations of AI supercomputers and the broader Azure global datacenter footprint to create the world’s first planet-scale AI superfactory. By packing computing power more densely than ever before, each Fairwater site is built to efficiently meet unprecedented demand for AI compute, push the frontiers of model intelligence and empower every person and organization on the planet to achieve more.
To meet this demand, we have reinvented how we design AI datacenters and the systems we run inside of them. Fairwater is a departure from the traditional cloud datacenter model and uses a single flat network that can integrate hundreds of thousands of the latest NVIDIA GB200 and GB300 GPUs into a massive supercomputer. These innovations are a product of decades of experience designing datacenters and networks, as well as learnings from supporting some of the largest AI training jobs on the planet.
While the Fairwater datacenter design is well suited for training the next generation of frontier models, it is also built with fungibility in mind. Training has evolved from a single monolithic job into a range of workloads with different requirements (such as pre-training, fine-tuning, reinforcement learning and synthetic data generation). Microsoft has deployed a dedicated AI WAN backbone to integrate each Fairwater site into a broader elastic system that enables dynamic allocation of diverse AI workloads and maximizes GPU utilization of the combined system.
Below, we walk through some of the exciting technical innovations that support Fairwater, from the way we build datacenters to the networking within and across the sites.
Maximum density of compute
Modern AI infrastructure is increasingly constrained by the laws of physics. The speed of light is now a key bottleneck in our ability to tightly integrate accelerators, compute and storage with performant latency. Fairwater is designed to maximize the density of compute to minimize latency within and across racks and maximize system performance.
One of the key levers for driving density is improving cooling at scale. AI servers in the Fairwater datacenters are connected to a facility-wide cooling system designed for longevity, with a closed-loop approach that reuses the liquid continuously after the initial fill with no evaporation. The water used in the initial fill is equivalent to what 20 homes consume in a year and is only replaced if water chemistry indicates it is needed (it is designed for 6-plus years), making it extremely efficient and sustainable.
Liquid-based cooling also provides much higher heat transfer, enabling us to maximize rack and row-level power (~140kW per rack, 1,360 kW per row) to pack compute as densely as possible inside the datacenter. State-of-the-art cooling also helps us maximize utilization of this dense compute in steady-state operations, enabling large training jobs to run performantly at high scale. After cycling through a system of cold plate paths across the GPU fleet, heat is dissipated by one of the largest chiller plants on the planet.

Another way we are driving compute density is with a two-story datacenter building design. Many AI workloads are very sensitive to latency, which means cable run lengths can meaningfully impact cluster performance. Every GPU in Fairwater is connected to every other GPU, so the two-story datacenter building approach allows for placement of racks in three dimensions to minimize cable lengths, which in turn improves latency, bandwidth, reliability and cost.

High-availability, low-cost power
We are pushing the envelope in serving this compute with cost-efficient, reliable power. The Atlanta site was selected with resilient utility power in mind and is capable of achieving 4×9 availability at 3×9 cost. By securing highly available grid power, we can also forgo traditional resiliency approaches for the GPU fleet (such as on-site generation, UPS systems and dual-corded distribution), driving cost savings for customers and faster time-to-market for Microsoft.
We have also worked with our industry partners to codevelop power-management solutions to mitigate power oscillations created by large scale jobs, a growing challenge in maintaining grid stability as AI demand scales. This includes a software-driven solution that introduces supplementary workloads during periods of reduced activity, a hardware-driven solution where the GPUs enforce their own power thresholds and an on-site energy storage solution to further mask power fluctuations without utilizing excess power.
Cutting-edge accelerators and networking systems
Fairwater’s world-class datacenter design is powered by purpose-built servers, cutting-edge AI accelerators and novel networking systems. Each Fairwater datacenter runs a single, coherent cluster of interconnected NVIDIA Blackwell GPUs, with an advanced network architecture that can scale reliably beyond traditional Clos network limits with current-gen switches (hundreds of thousands of GPUs on a single flat network). This required innovation across scale-up networking, scale-out networking and networking protocol.
In terms of scale-up, each rack of AI accelerators houses up to 72 NVIDIA Blackwell GPUs, connected via NVLink for ultra-low-latency communication within the rack. Blackwell accelerators provide the highest compute density available today, with support for low-precision number formats like FP4 to increase total FLOPS and enable efficient memory use. Each rack provides 1.8 TB of GPU-to-GPU bandwidth, with over 14 TB of pooled memory available to each GPU.

These racks then use scale-out networking to create pods and clusters that enable all GPUs to function as a single supercomputer with minimal hop counts. We achieve this with a two-tier, ethernet-based backend network that supports massive cluster sizes with 800 Gbps GPU-to-GPU connectivity. Relying on a broad ethernet ecosystem and SONiC (Software for Open Network in the Cloud – which is our own operating system for our network switches) also helps us avoid vendor lock-in and manage cost, as we can use commodity hardware instead of proprietary solutions.
Improvements across packet trimming, packet spray and high-frequency telemetry are core components of our optimized AI network. We are also working to enable deeper control and optimization of network routes. Together, these technologies deliver advanced congestion control, rapid detection and retransmission and agile load balancing, ensuring ultra-reliable, low-latency performance for modern AI workloads.
Planet scale
Even with these innovations, compute demands for large training jobs (now measured in trillions of parameters) are quickly outpacing the power and space constraints of a single facility. To serve these needs, we have built a dedicated AI WAN optical network to extend Fairwater’s scale-up and scale-out networks. Leveraging our scale and decades of hyperscale expertise, we delivered over 120,000 new fiber miles across the US last year — expanding AI network reach and reliability nationwide.
With this high-performance, high-resiliency backbone, we can directly connect different generations of supercomputers into an AI superfactory that exceeds the capabilities of a single site across geographically diverse locations. This empowers AI developers to tap our broader network of Azure AI datacenters, segmenting traffic based on their needs across scale-up and scale-out networks within a site, as well as across sites via the continent spanning AI WAN.
This is a meaningful departure from the past, where all traffic had to ride the scale-out network regardless of the requirements of the workload. Not only does it provide customers with fit-for-purpose networking at a more granular level, it also helps create fungibility to maximize the flexibility and utilization of our infrastructure.
Putting it all together
The new Fairwater site in Atlanta represents the next leap in the Azure AI infrastructure and reflects our experience running the largest AI training jobs on the planet. It combines breakthrough innovations in compute density, sustainability and networking systems to efficiently serve the massive demand for computational power we are seeing. It also integrates deeply with other AI datacenters and the broader Azure platform to form the world’s first AI superfactory. Together, these innovations provide a flexible, fit-for-purpose infrastructure that can serve the full spectrum of modern AI workloads and empower every person and organization on the planet to achieve more. For our customers, this means easier integration of AI into every workflow and the ability to create innovative AI solutions that were previously unattainable.
Find out more about how Microsoft Azure can help you integrate AI to streamline and strengthen development lifecycles here.
Scott Guthrie is responsible for hyperscale cloud computing solutions and services including Azure, Microsoft’s cloud computing platform, generative AI solutions, data platforms and information and cybersecurity. These platforms and services help organizations worldwide solve urgent challenges and drive long-term transformation.
The post Infinite scale: The architecture behind the Azure AI superfactory appeared first on The Official Microsoft Blog.
Today, we are unveiling the next Fairwater site of Azure AI datacenters in Atlanta, Georgia. This purpose-built datacenter is connected to our first Fairwater site in Wisconsin, prior generations of AI supercomputers and the broader Azure global datacenter footprint to create the world’s first planet-scale AI superfactory. By packing computing power more densely than ever…
The post Infinite scale: The architecture behind the Azure AI superfactory appeared first on The Official Microsoft Blog.
Read More
The Simulation is link is not working
I am trying to run this simulation
https://uk.mathworks.com/help/sps/ug/24-hour-simulation-of-a-vehicle-to-grid-v2g-system.html
But it is giving me ythe following errors:
openExample(‘simscapeelectricalsps/VehicletoGridSystemExample’)
Error using websave (line 107)
The server returned the status 404 with message "Not Found" in response to the request to URL
https://www.mathworks.com/help/releases/R2025b/exampledata/simscapeelectricalsps/examples.xml.
Error in
matlab.internal.examples.copyFromWeb (line 28)
result = websave(target, url, options);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in
matlab.internal.examples.findExamplesXml (line 32)
found = matlab.internal.examples.copyFromWeb(component, ”, ‘examples.xml’, examplesXml, false);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in
findExample (line 14)
examplesXml = matlab.internal.examples.findExamplesXml(component,arg);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in
openExample (line 42)
metadata = findExample(exampleId);
Any leads?I am trying to run this simulation
https://uk.mathworks.com/help/sps/ug/24-hour-simulation-of-a-vehicle-to-grid-v2g-system.html
But it is giving me ythe following errors:
openExample(‘simscapeelectricalsps/VehicletoGridSystemExample’)
Error using websave (line 107)
The server returned the status 404 with message "Not Found" in response to the request to URL
https://www.mathworks.com/help/releases/R2025b/exampledata/simscapeelectricalsps/examples.xml.
Error in
matlab.internal.examples.copyFromWeb (line 28)
result = websave(target, url, options);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in
matlab.internal.examples.findExamplesXml (line 32)
found = matlab.internal.examples.copyFromWeb(component, ”, ‘examples.xml’, examplesXml, false);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in
findExample (line 14)
examplesXml = matlab.internal.examples.findExamplesXml(component,arg);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in
openExample (line 42)
metadata = findExample(exampleId);
Any leads? I am trying to run this simulation
https://uk.mathworks.com/help/sps/ug/24-hour-simulation-of-a-vehicle-to-grid-v2g-system.html
But it is giving me ythe following errors:
openExample(‘simscapeelectricalsps/VehicletoGridSystemExample’)
Error using websave (line 107)
The server returned the status 404 with message "Not Found" in response to the request to URL
https://www.mathworks.com/help/releases/R2025b/exampledata/simscapeelectricalsps/examples.xml.
Error in
matlab.internal.examples.copyFromWeb (line 28)
result = websave(target, url, options);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in
matlab.internal.examples.findExamplesXml (line 32)
found = matlab.internal.examples.copyFromWeb(component, ”, ‘examples.xml’, examplesXml, false);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in
findExample (line 14)
examplesXml = matlab.internal.examples.findExamplesXml(component,arg);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in
openExample (line 42)
metadata = findExample(exampleId);
Any leads? v2g MATLAB Answers — New Questions
I keep getting the same error when using readtable or readmatrix: Dimensions of arrays being concatenated are not consistent.
A = readtable(‘data_file.csv’)
A = readmatrix(‘data_file.csv’)
When I tell you I have tried everything. Uninstalled and reinstalled Matlab twice. Cleared my cache of all matlab knowledge. I cannot read in data from a csv or text file using readtable and readmatrix for the life of me. Somebody please help. I have tried doing the same exact things on other’s computers and it works perfectly. I am convinced my readtable and readmatrix functions are broken.A = readtable(‘data_file.csv’)
A = readmatrix(‘data_file.csv’)
When I tell you I have tried everything. Uninstalled and reinstalled Matlab twice. Cleared my cache of all matlab knowledge. I cannot read in data from a csv or text file using readtable and readmatrix for the life of me. Somebody please help. I have tried doing the same exact things on other’s computers and it works perfectly. I am convinced my readtable and readmatrix functions are broken. A = readtable(‘data_file.csv’)
A = readmatrix(‘data_file.csv’)
When I tell you I have tried everything. Uninstalled and reinstalled Matlab twice. Cleared my cache of all matlab knowledge. I cannot read in data from a csv or text file using readtable and readmatrix for the life of me. Somebody please help. I have tried doing the same exact things on other’s computers and it works perfectly. I am convinced my readtable and readmatrix functions are broken. readtable, readmatrix MATLAB Answers — New Questions
Script doesn’t show
I was working on an assignment on MATLAB and wrote a function script in the editor and saved it as .m file. The next day I open the file and the script was gone. This is the second time it has happened. How do I recover the script?I was working on an assignment on MATLAB and wrote a function script in the editor and saved it as .m file. The next day I open the file and the script was gone. This is the second time it has happened. How do I recover the script? I was working on an assignment on MATLAB and wrote a function script in the editor and saved it as .m file. The next day I open the file and the script was gone. This is the second time it has happened. How do I recover the script? script, editor, deleted MATLAB Answers — New Questions
How can I syncronize two PWM on STM32 using the Embedded Coder Support Package
I need to generate two PWM signals with variable Duty cycle controlled by reading from two ADC, and that is simple. The problem is that I need to introduce a fixed phase difference between the two signals. I tryed using triggered subsystems, but it does not seem to work. The two PWM are on two different timers, should I use two different channels of the same timer ? Should I use a third timer in a master slave configuration ?I need to generate two PWM signals with variable Duty cycle controlled by reading from two ADC, and that is simple. The problem is that I need to introduce a fixed phase difference between the two signals. I tryed using triggered subsystems, but it does not seem to work. The two PWM are on two different timers, should I use two different channels of the same timer ? Should I use a third timer in a master slave configuration ? I need to generate two PWM signals with variable Duty cycle controlled by reading from two ADC, and that is simple. The problem is that I need to introduce a fixed phase difference between the two signals. I tryed using triggered subsystems, but it does not seem to work. The two PWM are on two different timers, should I use two different channels of the same timer ? Should I use a third timer in a master slave configuration ? stm32, pwm, synchronization MATLAB Answers — New Questions
In R2025a, how to add Additional Fonts?
Before R2025a, we can install the font in the jrelibfonts folder where Java® software is installed on your system, for example, C:Program FilesMATLABR2024asysjavajrewin64jrelibfonts. Then, use the font in MATLAB by selecting it in the MATLAB > Fonts settings.
But in R2025a, how to add Additional Fonts. Because it seems that the aforementioned method has become ineffective.Before R2025a, we can install the font in the jrelibfonts folder where Java® software is installed on your system, for example, C:Program FilesMATLABR2024asysjavajrewin64jrelibfonts. Then, use the font in MATLAB by selecting it in the MATLAB > Fonts settings.
But in R2025a, how to add Additional Fonts. Because it seems that the aforementioned method has become ineffective. Before R2025a, we can install the font in the jrelibfonts folder where Java® software is installed on your system, for example, C:Program FilesMATLABR2024asysjavajrewin64jrelibfonts. Then, use the font in MATLAB by selecting it in the MATLAB > Fonts settings.
But in R2025a, how to add Additional Fonts. Because it seems that the aforementioned method has become ineffective. font, code MATLAB Answers — New Questions
Microsoft Makes Another Change to Teams Channel Email Storage Location
Different SharePoint Folder Used to Hold Email Sent to Teams Channels
Being able to send email to a Teams channel is a very convenient way of starting a new channel conversation based on information received in email. I also use the feature to archive messages sent to Exchange Online distribution lists by creating a mail contact object for the channel and including the mail contact in the list membership. This method also works with Microsoft 365 groups by using an Entra ID guest account instead of a mail contact.
Messages received by the Teams channel show up as individual conversations and are also stored in a SharePoint Online folder. In 2021, Microsoft changed the storage location in SharePoint for these messages without warning. The logic for the change was reasonable. Instead of using a single folder to hold all the messages received by a channel, Teams created a new folder every month to store the messages for that month, so you ended up with folders like EmailMessages_11_2025 under the base folder created for the channel.
Unannounced Changes Can Cause Problems
The change in folder structure was technically good and avoided the potential performance problems that can occur when SharePoint Online must deal with tens of thousands of items in a folder, such as exceeding the list view threshold. However, making changes without publishing details to customers is not a good thing to do. For instance, when the folder structure change happened in 2021, some customers complained that it interfered with triggers they had built into Power Automate flows.
The Latest Change to Folders Used for Email Sent to Teams Channels
Well, the same thing happened again. At least, a change to the folder structure rolled out to tenants between January and February this year. I guess I wasn’t checking SharePoint folders as carefully as I should have. I also completely missed Microsoft 365 message center notification MC981626 (published January 16, 2025) where Microsoft published the news with the title “New file path in Microsoft SharePoint for email attachments.” The text of the notice says: “As part of our ongoing security improvements, we are updating the storage path for attachments sent from any email client using the Send an email to a channel in Microsoft Teams feature in Teams.”
The text in MC981626 is a little misleading in that it could be read as only applying to email attachments. However, the change applies to all messages sent to Teams channels and moved the creation of new folders to hold the copies of email sent to channels from:
Documents – Channel Name
To:
Documents -> Apps -> Microsoft Teams Mailhook -> Channel Name
Older folders used to hold email sent to Teams channels prior to the change remain in their old location. I’m not sure how the new structure improves security unless everything is better when files are stored in an obscure location several levels deep.
Figure 1 shows a typical set of folders created since the change went into effect in January 2025.

Although Microsoft issued a message center notification, not everyone is an avid reader of what appears in that section of the Microsoft 365 admin center and the change took some by surprise. Here are two examples involving files not appearing in Teams after being scanned and someone wondering why a workflow failed because files didn’t turn up in the expected location.
Important to Stay in Touch
All of this proves that tenant administrators need to pay more attention to the news that appears in the message center. I know everyone will say that they do, but I’ve heard from Microsoft sources that their telemetry says that a large percentage of tenants don’t read message center notifications.
My advice is to use the Planner integration with the message center to track and assign tasks relating to upcoming changes. We do this to track updates for the Office 365 for IT Pros eBook. I just missed out on the task generated for MC981626 that was assigned to me (my only excuse is that too many tasks end up being assigned to me).
So much change, all the time. It’s a challenge to stay abreast of all the updates Microsoft makes across the Microsoft 365 ecosystem. Subscribe to the Office 365 for IT Pros eBook to receive insights updated monthly into what happens within Microsoft 365, why it happens, and what new features and capabilities mean for your tenant.
Add folder and subfolder to project path
Hi everyone,
I’m trying to use the addPath function to add multiple folders to a MATLAB project’s path. According to the documentation, the folders input argument should be:
"Path of the folders to add to the project path, specified as string array or as a cell array of character vectors. The folders must be within the root folder."
Here’s a minimal example of what I tried:
tmp = ["Hello", "HelloWorld"];
addPath(proj, tmp);
but I got this error:
Error using matlab.internal.project.japi.Project/addPath
Expected file to be of size 1×1, but it is of size 2×1.
Error in matlab.project.Project/addPath
Even though tmp is a string array, MATLAB seems to expect only a single path.
For context:
The folders already exist within the project
I’ve added them (and their subfolders/files) using addFolderIncludingChildFiles, but that function doesn’t add the folders to the project path
I’m using MATLAB R2024b
I’m trying to use addPath with multiple folders at once because adding each folder path in a for loop is very time-consuming when dealing with many subdirectories.
Has anyone managed to add multiple folders at once using addPath, or is it necessary to call it one folder at a time?
Any suggestions or workarounds would be greatly appreciated!
Thanks in advance!Hi everyone,
I’m trying to use the addPath function to add multiple folders to a MATLAB project’s path. According to the documentation, the folders input argument should be:
"Path of the folders to add to the project path, specified as string array or as a cell array of character vectors. The folders must be within the root folder."
Here’s a minimal example of what I tried:
tmp = ["Hello", "HelloWorld"];
addPath(proj, tmp);
but I got this error:
Error using matlab.internal.project.japi.Project/addPath
Expected file to be of size 1×1, but it is of size 2×1.
Error in matlab.project.Project/addPath
Even though tmp is a string array, MATLAB seems to expect only a single path.
For context:
The folders already exist within the project
I’ve added them (and their subfolders/files) using addFolderIncludingChildFiles, but that function doesn’t add the folders to the project path
I’m using MATLAB R2024b
I’m trying to use addPath with multiple folders at once because adding each folder path in a for loop is very time-consuming when dealing with many subdirectories.
Has anyone managed to add multiple folders at once using addPath, or is it necessary to call it one folder at a time?
Any suggestions or workarounds would be greatly appreciated!
Thanks in advance! Hi everyone,
I’m trying to use the addPath function to add multiple folders to a MATLAB project’s path. According to the documentation, the folders input argument should be:
"Path of the folders to add to the project path, specified as string array or as a cell array of character vectors. The folders must be within the root folder."
Here’s a minimal example of what I tried:
tmp = ["Hello", "HelloWorld"];
addPath(proj, tmp);
but I got this error:
Error using matlab.internal.project.japi.Project/addPath
Expected file to be of size 1×1, but it is of size 2×1.
Error in matlab.project.Project/addPath
Even though tmp is a string array, MATLAB seems to expect only a single path.
For context:
The folders already exist within the project
I’ve added them (and their subfolders/files) using addFolderIncludingChildFiles, but that function doesn’t add the folders to the project path
I’m using MATLAB R2024b
I’m trying to use addPath with multiple folders at once because adding each folder path in a for loop is very time-consuming when dealing with many subdirectories.
Has anyone managed to add multiple folders at once using addPath, or is it necessary to call it one folder at a time?
Any suggestions or workarounds would be greatly appreciated!
Thanks in advance! matlab, iteration, vectorization, optimization MATLAB Answers — New Questions
Indexing in a matrix vs vector
Why can we write A(1,2) for a nx2 matrix, with n>1, and we cannot write i=1; x(i,2) for a vector x = [x1 x2]?
It only accepts x(i+1), but I need to iterate the index i over the rows and not the columns, for any nx2 matrix with n>=1.
Thank you in advance.Why can we write A(1,2) for a nx2 matrix, with n>1, and we cannot write i=1; x(i,2) for a vector x = [x1 x2]?
It only accepts x(i+1), but I need to iterate the index i over the rows and not the columns, for any nx2 matrix with n>=1.
Thank you in advance. Why can we write A(1,2) for a nx2 matrix, with n>1, and we cannot write i=1; x(i,2) for a vector x = [x1 x2]?
It only accepts x(i+1), but I need to iterate the index i over the rows and not the columns, for any nx2 matrix with n>=1.
Thank you in advance. indexing, vector, matrix MATLAB Answers — New Questions
mairplot throws uimenu error
Dear all,
I have been following the rnaseq demo (https://www.mathworks.com/help/bioinfo/ug/identifying-differentially-expressed-genes-from-rna-seq-data.html) to build out a livescript to analyze some differential gene expression data. However, I’m having issues with generating an interactive MA plot using mairplot.
I used a larger version of the attached input data file (data_head.txt) to populate a table (data). I then issued mairplot as follows:
mairplot(data.meanTreated,data.meanUntreated,’Labels’,data.sgRNA_ID,’Type’,’MA’);
However, I get the following error:
Error using uimenu
First argument must be a valid parent, such as a Figure or Panel object.
Error in mairplot>resetFigureTools (line 345)
uimenu(hw,’Label’,’Export to Workspace…’,’Position’,1, ‘Callback’, @exportDiffResults);
Error in mairplot (line 168)
resetFigureTools(hFig);
I did convert the data.sgRNA_ID table variable from a cell array to strings using
data.sgRNA_ID = string(data.sgRNA_ID)
, but got the same error.
I was able to run the example code (rnaseqdemo.m; attached), including the interactive MA plot.
I was also able to successfully create an MA plot with the following command:
mairplot(data.meanTreated,data.meanUntreated,’Type’,’MA’,’Plotonly’,true);
Thank you for your help! Let me know if you need more info to help me troubleshoot this.
Best,
KartikDear all,
I have been following the rnaseq demo (https://www.mathworks.com/help/bioinfo/ug/identifying-differentially-expressed-genes-from-rna-seq-data.html) to build out a livescript to analyze some differential gene expression data. However, I’m having issues with generating an interactive MA plot using mairplot.
I used a larger version of the attached input data file (data_head.txt) to populate a table (data). I then issued mairplot as follows:
mairplot(data.meanTreated,data.meanUntreated,’Labels’,data.sgRNA_ID,’Type’,’MA’);
However, I get the following error:
Error using uimenu
First argument must be a valid parent, such as a Figure or Panel object.
Error in mairplot>resetFigureTools (line 345)
uimenu(hw,’Label’,’Export to Workspace…’,’Position’,1, ‘Callback’, @exportDiffResults);
Error in mairplot (line 168)
resetFigureTools(hFig);
I did convert the data.sgRNA_ID table variable from a cell array to strings using
data.sgRNA_ID = string(data.sgRNA_ID)
, but got the same error.
I was able to run the example code (rnaseqdemo.m; attached), including the interactive MA plot.
I was also able to successfully create an MA plot with the following command:
mairplot(data.meanTreated,data.meanUntreated,’Type’,’MA’,’Plotonly’,true);
Thank you for your help! Let me know if you need more info to help me troubleshoot this.
Best,
Kartik Dear all,
I have been following the rnaseq demo (https://www.mathworks.com/help/bioinfo/ug/identifying-differentially-expressed-genes-from-rna-seq-data.html) to build out a livescript to analyze some differential gene expression data. However, I’m having issues with generating an interactive MA plot using mairplot.
I used a larger version of the attached input data file (data_head.txt) to populate a table (data). I then issued mairplot as follows:
mairplot(data.meanTreated,data.meanUntreated,’Labels’,data.sgRNA_ID,’Type’,’MA’);
However, I get the following error:
Error using uimenu
First argument must be a valid parent, such as a Figure or Panel object.
Error in mairplot>resetFigureTools (line 345)
uimenu(hw,’Label’,’Export to Workspace…’,’Position’,1, ‘Callback’, @exportDiffResults);
Error in mairplot (line 168)
resetFigureTools(hFig);
I did convert the data.sgRNA_ID table variable from a cell array to strings using
data.sgRNA_ID = string(data.sgRNA_ID)
, but got the same error.
I was able to run the example code (rnaseqdemo.m; attached), including the interactive MA plot.
I was also able to successfully create an MA plot with the following command:
mairplot(data.meanTreated,data.meanUntreated,’Type’,’MA’,’Plotonly’,true);
Thank you for your help! Let me know if you need more info to help me troubleshoot this.
Best,
Kartik bioinformatics toolbox, mairplot MATLAB Answers — New Questions
Auditing Claude Usage with the Copilot Researcher Agent
Website Quality Drives LLM Quality
I’ve had good luck using the Copilot Researcher agent with Graph-based content. Using Researcher with web content is a different matter, but we shouldn’t be surprised that this is the case.
The ability of any LLM taught using content fetched from web sites is that the internet is full of lies, incomplete thoughts, and false information. Seeking page views in an attempt to prove relevance lies at the heart of the problem. People rush to publish without doing the necessary due diligence, testing, or analysis, with the result that the content that appears is often useless. However, the processes used to populate LLMs don’t realize that the information it finds is poor quality and treats the data in the same way as any other text that it finds. Even a high domain authority rating, a much-beloved tool within the SEO community, is no indicator of quality.
Some of my MVP colleagues fall into this trap by recycling Microsoft content as soon as an announcement appears. Their articles contain no insight, no added value, and is a poor duplication of what Microsoft generates. Commentators like Vasil Michev, Martin Heusser, and Jan Bakker set the standard for solid technical analysis and reporting that anyone seeking to cover Microsoft 365 technology should aspire to. Regretfully, too few do.
Auditing Anthrophic Claude Use by Copilot
Being able to use the Anthrophic models with Copilot is a fairly recent capability and I wanted to see if using Researcher with the Claude LLM produced better results. I also wanted to check what information Purview audit captures when Copilot uses Claude instead of ChatGPT-5 (from early November 2025, the default for Copilot – see MC1176368 for details). After all, when he spoke to the market analysts about Microsoft’s FY26 Q1 results, Satya Nadella said that Purview has audited “16 billion Copilot interactions,” so surely interaction with Claude would be captured.
Tenants must enable third-party access for Anthrophic before Claude can be used with Researcher. The settings in configured in the Copilot section of the Microsoft 365 admin center (Figure 1).

Once the tenant is configured, users with Microsoft 365 Copilot licenses can use Claude with Researcher (Figure 2). Using Claude is exactly the same as using ChatGPT with Researcher: submit the best possible prompt, refine the prompt if queried by the agent, and let the agent go ahead and do its stuff.

Checking for Researcher Agent Audit Records
To create a baseline and help me know what to look for, I prompted the Researcher agent with several questions using the default ChatGPT5 LLM. I could then search for the audit records captured by Purview and check the details of the audit data payload. The payload is where Researcher reports the resources it used during its research.
As with all Purview audit records, some manipulation is necessary to extract usable data. Here’s the code that I used.
[array]$Records = Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-90) -EndDate (Get-Date) -Formatted -Operations "CopilotInteraction" -ResultSize 5000 -SessionCommand ReturnLargeSet
If ($Records) {
$Records = $records | Sort-Object Identity -Unique
Write-Host ("{0} audit records found" -f $Records.Count)
$Records = $Records | Sort-Object { $_.CreationDate -as [datetime]} -Descending
} Else {
Write-Host "No audit records found - now scanning for Researcher Copilot agent records"
Break
}
$ResearcherReport = [System.Collections.Generic.List[Object]]::new()
ForEach ($Rec in $Records) {
$AuditData = $Rec.AuditData | ConvertFrom-Json
If ($AuditData.AgentName -ne "Researcher") {
Continue
}
[array]$CopilotResources = $AuditData.CopilotEventData.AccessedResources
If ($CopilotResources) {
$Resources = [System.Collections.Generic.List[Object]]::new()
ForEach ($Resource in $CopilotResources) {
If ($Resource.Action) {
If ($Resource.SiteURL) {
$ResourceName = $Resource.SiteURL
$ResourceId = $null
} Else {
$ResourceName = $Resource.Name
$ResourceId = $Resource.Id.Split("&")[0]
}
$ResourcesAccessed = [PSCustomObject][Ordered]@{
Action = $Resource.Action
Name = $ResourceName
Id = $ResourceId
}
$Resources.Add($ResourcesAccessed)
}
}
$ReportLine = [PSCustomObject][Ordered]@{
TimeStamp = Get-Date ($AuditData.CreationTime) -format 'dd-MMM-yyyy HH:mm'
User = $AuditData.UserId
Action = $AuditData.Operation
Resources = $Resources.Name -join "; "
}
$ResearcherReport.Add($ReportLine)
} Else {
If ($null -ne $AuditData.CopilotEventData.Messages) {
$ReportLine = [PSCustomObject][Ordered]@{
TimeStamp = Get-Date ($AuditData.CreationTime) -format 'dd-MMM-yyyy HH:mm'
User = $AuditData.UserId
Action = $AuditData.Operation
Resources = If ($AuditData.CopilotEventData.Messages.count -le 3) {$AuditData.CopilotEventData.Messages.Count } Else {$AuditData.CopilotEventData.Messages.count.toString() + " (likely use of Claude LLM)"}
}
$ResearcherReport.Add($ReportLine)
}
}
}
Figure 3 shows the data generated by the code. Although audit records report the name of the Copilot agent used in an interaction, no note is captured about the LLM used for processing the prompt. However, observation of many uses of Claude indicates that the number of messages reported is higher than for ChatGPT5 (used for the tests). That’s why some of the interactions reported are tagged as “likely use of Claude LLM.”

I couldn’t find any other way that might indicate the use of Claude over ChatGPT. Originally, I thought that when Researcher used Claude, the audit records didn’t capture the sources (external and internal files) scanned by the agent as it constructed its response, but then the audit record for a Claude run (third record from top) reported sources.
Imperfect Intuition
These results are imperfect and are largely formed through intuition, not by extracting immutable data from audit records. It would be so much easier if Microsoft included the LLM used for agent processing along with the agent name in audit records for Copilot interactions. Maybe that will come with time. We can but hope.
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. Only humans contribute to our work!









