Tag Archives: matlab
Accessing a full PDF of tasks and answers of ONRAMP
Is there anyway I can have a full text of the answers to the tasks completed in the ONRAMP course? Just so I can print it and keep it with me and go through the things I have learnt without restarting a while module and going through the tasks again?Is there anyway I can have a full text of the answers to the tasks completed in the ONRAMP course? Just so I can print it and keep it with me and go through the things I have learnt without restarting a while module and going through the tasks again? Is there anyway I can have a full text of the answers to the tasks completed in the ONRAMP course? Just so I can print it and keep it with me and go through the things I have learnt without restarting a while module and going through the tasks again? answers, pdf, course, access, homework, download MATLAB Answers — New Questions
command line vs GUI, toolbox failed
I am running a script on R2024a via command line and i have got this error:
cmd: matlab -nodisplay -nosplash -nodesktop -r "run(‘my_script.m’); exit;"
error: niftiinfo requires Image Processing Toolbox.
Of course i have Image Processing Toolbox already in the toolbox folder. In fact, when i run same script from the GUI, everything is going well. The path is correctly set otherwise even the GUI has to fail.
Someone has an idea?
ThanksI am running a script on R2024a via command line and i have got this error:
cmd: matlab -nodisplay -nosplash -nodesktop -r "run(‘my_script.m’); exit;"
error: niftiinfo requires Image Processing Toolbox.
Of course i have Image Processing Toolbox already in the toolbox folder. In fact, when i run same script from the GUI, everything is going well. The path is correctly set otherwise even the GUI has to fail.
Someone has an idea?
Thanks I am running a script on R2024a via command line and i have got this error:
cmd: matlab -nodisplay -nosplash -nodesktop -r "run(‘my_script.m’); exit;"
error: niftiinfo requires Image Processing Toolbox.
Of course i have Image Processing Toolbox already in the toolbox folder. In fact, when i run same script from the GUI, everything is going well. The path is correctly set otherwise even the GUI has to fail.
Someone has an idea?
Thanks command line, toolbox MATLAB Answers — New Questions
no standalone apps output in console
I have function:
function m = magicsquare1(n)
%MAGICSQUARE generates a magic square matrix of the size
% specified by the input parameter n.
% Copyright 2003-2012 The MathWorks, Inc.
if ischar(n)
n=str2num(n);
end
m = magic(n);
>> magicsquare1(5)
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
The standalone application is created by
>> mcc -mv magicsquare1.m
(of course MCR is properly installed and configured)
Then the standalone application "magicsquare1" does not produce any output in command-line console!!! But it should, according to the help page of MATLAB compiler.
When I change the function like this:
function m = magicsquare2(n)
%MAGICSQUARE generates a magic square matrix of the size
% specified by the input parameter n.
% Copyright 2003-2012 The MathWorks, Inc.
if ischar(n)
n=str2num(n);
end
m = magic(n);
disp(m);
and recompile by
>>mcc -mv magicsquare2.m
I am able to get correct output.
>> !magicsquare2 5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
So my question is: what is wrong? Why I am not able to get output from standalone application magicsquare1?I have function:
function m = magicsquare1(n)
%MAGICSQUARE generates a magic square matrix of the size
% specified by the input parameter n.
% Copyright 2003-2012 The MathWorks, Inc.
if ischar(n)
n=str2num(n);
end
m = magic(n);
>> magicsquare1(5)
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
The standalone application is created by
>> mcc -mv magicsquare1.m
(of course MCR is properly installed and configured)
Then the standalone application "magicsquare1" does not produce any output in command-line console!!! But it should, according to the help page of MATLAB compiler.
When I change the function like this:
function m = magicsquare2(n)
%MAGICSQUARE generates a magic square matrix of the size
% specified by the input parameter n.
% Copyright 2003-2012 The MathWorks, Inc.
if ischar(n)
n=str2num(n);
end
m = magic(n);
disp(m);
and recompile by
>>mcc -mv magicsquare2.m
I am able to get correct output.
>> !magicsquare2 5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
So my question is: what is wrong? Why I am not able to get output from standalone application magicsquare1? I have function:
function m = magicsquare1(n)
%MAGICSQUARE generates a magic square matrix of the size
% specified by the input parameter n.
% Copyright 2003-2012 The MathWorks, Inc.
if ischar(n)
n=str2num(n);
end
m = magic(n);
>> magicsquare1(5)
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
The standalone application is created by
>> mcc -mv magicsquare1.m
(of course MCR is properly installed and configured)
Then the standalone application "magicsquare1" does not produce any output in command-line console!!! But it should, according to the help page of MATLAB compiler.
When I change the function like this:
function m = magicsquare2(n)
%MAGICSQUARE generates a magic square matrix of the size
% specified by the input parameter n.
% Copyright 2003-2012 The MathWorks, Inc.
if ischar(n)
n=str2num(n);
end
m = magic(n);
disp(m);
and recompile by
>>mcc -mv magicsquare2.m
I am able to get correct output.
>> !magicsquare2 5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
So my question is: what is wrong? Why I am not able to get output from standalone application magicsquare1? console apps MATLAB Answers — New Questions
How can I get a shapley summary plot?
I have checekd the MATLAB syntaxes about the shapley value plots, but the examples didn’t help me figure out how I can sketch a shapley summary plot similar to the attached image. Can you please help me out?
In python, you can use shap libraries to understand how much each input variable in the machine learning model contributes to the model prediction. But, I’m not able to have that flexibility in MATLAB.
Ref:https://towardsdatascience.com/explain-your-model-with-the-shap-values-bc36aac4de3dI have checekd the MATLAB syntaxes about the shapley value plots, but the examples didn’t help me figure out how I can sketch a shapley summary plot similar to the attached image. Can you please help me out?
In python, you can use shap libraries to understand how much each input variable in the machine learning model contributes to the model prediction. But, I’m not able to have that flexibility in MATLAB.
Ref:https://towardsdatascience.com/explain-your-model-with-the-shap-values-bc36aac4de3d I have checekd the MATLAB syntaxes about the shapley value plots, but the examples didn’t help me figure out how I can sketch a shapley summary plot similar to the attached image. Can you please help me out?
In python, you can use shap libraries to understand how much each input variable in the machine learning model contributes to the model prediction. But, I’m not able to have that flexibility in MATLAB.
Ref:https://towardsdatascience.com/explain-your-model-with-the-shap-values-bc36aac4de3d machine learning, shapley values MATLAB Answers — New Questions
modify v1 so that any value less than 4 is replaced with the value 0. Please help me making code.
modify v1 so that any value less than 4 is replaced with the value 0. please help me writing code.modify v1 so that any value less than 4 is replaced with the value 0. please help me writing code. modify v1 so that any value less than 4 is replaced with the value 0. please help me writing code. logical indexing MATLAB Answers — New Questions
Matlab Online Cannot “Open” Simulink File
Trying to open a Simulink file on Matlab Online causes a browser error, and the screen will be stuck with a loading circle, as shown in the picture above. The browser error is invisible to the user unless browser’s console is open. I hope the error in the picture will help the Matlab’s team to diagnose the problem. There are also a number of fetching errors to some US-east server that are not shown in the picture.
The issue can be replicated across Edge, Chrome, and Firefox.
It is currently impossible to load a simulink file from the computer unless the engineers figure out what the problem is. Is there a way for instructors to upload an online template and assign to students, which the students can retrieve and then modify?Trying to open a Simulink file on Matlab Online causes a browser error, and the screen will be stuck with a loading circle, as shown in the picture above. The browser error is invisible to the user unless browser’s console is open. I hope the error in the picture will help the Matlab’s team to diagnose the problem. There are also a number of fetching errors to some US-east server that are not shown in the picture.
The issue can be replicated across Edge, Chrome, and Firefox.
It is currently impossible to load a simulink file from the computer unless the engineers figure out what the problem is. Is there a way for instructors to upload an online template and assign to students, which the students can retrieve and then modify? Trying to open a Simulink file on Matlab Online causes a browser error, and the screen will be stuck with a loading circle, as shown in the picture above. The browser error is invisible to the user unless browser’s console is open. I hope the error in the picture will help the Matlab’s team to diagnose the problem. There are also a number of fetching errors to some US-east server that are not shown in the picture.
The issue can be replicated across Edge, Chrome, and Firefox.
It is currently impossible to load a simulink file from the computer unless the engineers figure out what the problem is. Is there a way for instructors to upload an online template and assign to students, which the students can retrieve and then modify? matlab online, simulink online MATLAB Answers — New Questions
Disp function with matlab coder
I’m experimenting with a simple hello world function to see how the coder works.
disp(‘Hello world’)
The mex version works, but when I make a standalone executable there is no output. In fact, the generated code for the function itself is completely empty ({}), like the disp() was purposely skipped over. Is this the expected behavior, or is there some setting I can change?
EDIT: I just tried fprintf(1,’Hello world’), and the converted code contains "cfprintf()". So still, purposely suppressing output? BTW, this is on Linux/2016b.I’m experimenting with a simple hello world function to see how the coder works.
disp(‘Hello world’)
The mex version works, but when I make a standalone executable there is no output. In fact, the generated code for the function itself is completely empty ({}), like the disp() was purposely skipped over. Is this the expected behavior, or is there some setting I can change?
EDIT: I just tried fprintf(1,’Hello world’), and the converted code contains "cfprintf()". So still, purposely suppressing output? BTW, this is on Linux/2016b. I’m experimenting with a simple hello world function to see how the coder works.
disp(‘Hello world’)
The mex version works, but when I make a standalone executable there is no output. In fact, the generated code for the function itself is completely empty ({}), like the disp() was purposely skipped over. Is this the expected behavior, or is there some setting I can change?
EDIT: I just tried fprintf(1,’Hello world’), and the converted code contains "cfprintf()". So still, purposely suppressing output? BTW, this is on Linux/2016b. matlab coder MATLAB Answers — New Questions
How to convert *.pth file to *.onnx?
Hi,
I used Pointpillars for 3D object detection on my own dataset (just using *.bin files and their *.txt labels) using Pytorch (Cuda). The format of the trained model is *.pth. I would like to convert the *.pth file to *.onnx format. I think I should define a model (Pointpillars) and a dummy tensor/input in this regard. I am not sure how to define them. Is there any MATLAB example/library in this regard?
I appreciate any help in advance.
Thank you,
AbbasHi,
I used Pointpillars for 3D object detection on my own dataset (just using *.bin files and their *.txt labels) using Pytorch (Cuda). The format of the trained model is *.pth. I would like to convert the *.pth file to *.onnx format. I think I should define a model (Pointpillars) and a dummy tensor/input in this regard. I am not sure how to define them. Is there any MATLAB example/library in this regard?
I appreciate any help in advance.
Thank you,
Abbas Hi,
I used Pointpillars for 3D object detection on my own dataset (just using *.bin files and their *.txt labels) using Pytorch (Cuda). The format of the trained model is *.pth. I would like to convert the *.pth file to *.onnx format. I think I should define a model (Pointpillars) and a dummy tensor/input in this regard. I am not sure how to define them. Is there any MATLAB example/library in this regard?
I appreciate any help in advance.
Thank you,
Abbas pth, onnx, pointpillars MATLAB Answers — New Questions
How to set parameters in an FMU from Matlab Simulink ?
We have an FMU developed using MSVC 2022 for Windows x64. The FMU imports in Simulink nicely and I am able to see the I/O ports as intended. I am also able to access the inputs set from the environment using assigning a constant / signal generator to the input ports.
I would now like to also set the parameters from the workspace. I have tried using several of the callback functions at the model (Simulink) level as well as the block level. However, I am still not able to see the supplied values affect the parameter values inside the FMU. I am testing this by logging the output in various functions. I only want to set the parameters once at the start of simulation and they are defined like so in the modelDescription.xml file:
<Float64 name="LP" valueReference="1" causality="parameter" variability="fixed" initial="exact" description="POS_THICKNESS" declaredType="Length" start=".1320e-3" />
While the default value is already set, we would like the end user to be able to configure it once for every run.
Any guidance with how to debug this would be appreciated.We have an FMU developed using MSVC 2022 for Windows x64. The FMU imports in Simulink nicely and I am able to see the I/O ports as intended. I am also able to access the inputs set from the environment using assigning a constant / signal generator to the input ports.
I would now like to also set the parameters from the workspace. I have tried using several of the callback functions at the model (Simulink) level as well as the block level. However, I am still not able to see the supplied values affect the parameter values inside the FMU. I am testing this by logging the output in various functions. I only want to set the parameters once at the start of simulation and they are defined like so in the modelDescription.xml file:
<Float64 name="LP" valueReference="1" causality="parameter" variability="fixed" initial="exact" description="POS_THICKNESS" declaredType="Length" start=".1320e-3" />
While the default value is already set, we would like the end user to be able to configure it once for every run.
Any guidance with how to debug this would be appreciated. We have an FMU developed using MSVC 2022 for Windows x64. The FMU imports in Simulink nicely and I am able to see the I/O ports as intended. I am also able to access the inputs set from the environment using assigning a constant / signal generator to the input ports.
I would now like to also set the parameters from the workspace. I have tried using several of the callback functions at the model (Simulink) level as well as the block level. However, I am still not able to see the supplied values affect the parameter values inside the FMU. I am testing this by logging the output in various functions. I only want to set the parameters once at the start of simulation and they are defined like so in the modelDescription.xml file:
<Float64 name="LP" valueReference="1" causality="parameter" variability="fixed" initial="exact" description="POS_THICKNESS" declaredType="Length" start=".1320e-3" />
While the default value is already set, we would like the end user to be able to configure it once for every run.
Any guidance with how to debug this would be appreciated. fmu, co-simulation, simulink MATLAB Answers — New Questions
how to calculate a derivative
can some one guide me how to calculate a derivative and integration in matlab . can you please give a little example.can some one guide me how to calculate a derivative and integration in matlab . can you please give a little example. can some one guide me how to calculate a derivative and integration in matlab . can you please give a little example. derivative and integration MATLAB Answers — New Questions
how to create a matrix with variables in it?
for eg., to create following matrix and work on it,
A=[x1 x1*x2 ; x1^2 x2^2]for eg., to create following matrix and work on it,
A=[x1 x1*x2 ; x1^2 x2^2] for eg., to create following matrix and work on it,
A=[x1 x1*x2 ; x1^2 x2^2] variable matrix MATLAB Answers — New Questions
How to draw free-hand sketches using imfreehand ?
I have to take as input hand drawn sketches … I have tried using imfreehand() but it completes the figures itself.
I also tried the solution provided by Doug Schwarz in
<http://www.mathworks.in/matlabcentral/newsreader/view_thread/30168#75552>
where he coded the following :
function sketch(cmd)
if nargin == 0
cmd = ‘init’;
end
switch cmd
case ‘init’
fig = figure(‘DoubleBuffer’,’on’,’back’,’off’);
info.ax = axes(‘XLim’,[0 1],’YLim’,[0 1]);
info.drawing = [];
info.x = [];
info.y = [];
set(fig,’UserData’,info,…
‘WindowButtonDownFcn’,[mfilename,’ down’])
case ‘down’
myname = mfilename;
fig = gcbf;
info = get(fig,’UserData’);
curpos = get(info.ax,’CurrentPoint’);
info.x = curpos(1,1);
info.y = curpos(1,2);
info.drawing = line(info.x,info.y,’Color’,’k’);
set(fig,’UserData’,info,…
‘WindowButtonMotionFcn’,[myname,’ move’],…
‘WindowButtonUpFcn’,[myname,’ up’])
case ‘move’
fig = gcbf;
info = get(fig,’UserData’);
curpos = get(info.ax,’CurrentPoint’);
info.x = [info.x;curpos(1,1)];
info.y = [info.y;curpos(1,2)];
set(info.drawing,’XData’,info.x,’YData’,info.y)
set(fig,’UserData’,info)
case ‘up’
fig = gcbf;
set(fig,’WindowButtonMotionFcn’,”,…
‘WindowButtonUpFcn’,”)
end
But I am not able to save the sketch being drawn or access it ..
Please help …I have to take as input hand drawn sketches … I have tried using imfreehand() but it completes the figures itself.
I also tried the solution provided by Doug Schwarz in
<http://www.mathworks.in/matlabcentral/newsreader/view_thread/30168#75552>
where he coded the following :
function sketch(cmd)
if nargin == 0
cmd = ‘init’;
end
switch cmd
case ‘init’
fig = figure(‘DoubleBuffer’,’on’,’back’,’off’);
info.ax = axes(‘XLim’,[0 1],’YLim’,[0 1]);
info.drawing = [];
info.x = [];
info.y = [];
set(fig,’UserData’,info,…
‘WindowButtonDownFcn’,[mfilename,’ down’])
case ‘down’
myname = mfilename;
fig = gcbf;
info = get(fig,’UserData’);
curpos = get(info.ax,’CurrentPoint’);
info.x = curpos(1,1);
info.y = curpos(1,2);
info.drawing = line(info.x,info.y,’Color’,’k’);
set(fig,’UserData’,info,…
‘WindowButtonMotionFcn’,[myname,’ move’],…
‘WindowButtonUpFcn’,[myname,’ up’])
case ‘move’
fig = gcbf;
info = get(fig,’UserData’);
curpos = get(info.ax,’CurrentPoint’);
info.x = [info.x;curpos(1,1)];
info.y = [info.y;curpos(1,2)];
set(info.drawing,’XData’,info.x,’YData’,info.y)
set(fig,’UserData’,info)
case ‘up’
fig = gcbf;
set(fig,’WindowButtonMotionFcn’,”,…
‘WindowButtonUpFcn’,”)
end
But I am not able to save the sketch being drawn or access it ..
Please help … I have to take as input hand drawn sketches … I have tried using imfreehand() but it completes the figures itself.
I also tried the solution provided by Doug Schwarz in
<http://www.mathworks.in/matlabcentral/newsreader/view_thread/30168#75552>
where he coded the following :
function sketch(cmd)
if nargin == 0
cmd = ‘init’;
end
switch cmd
case ‘init’
fig = figure(‘DoubleBuffer’,’on’,’back’,’off’);
info.ax = axes(‘XLim’,[0 1],’YLim’,[0 1]);
info.drawing = [];
info.x = [];
info.y = [];
set(fig,’UserData’,info,…
‘WindowButtonDownFcn’,[mfilename,’ down’])
case ‘down’
myname = mfilename;
fig = gcbf;
info = get(fig,’UserData’);
curpos = get(info.ax,’CurrentPoint’);
info.x = curpos(1,1);
info.y = curpos(1,2);
info.drawing = line(info.x,info.y,’Color’,’k’);
set(fig,’UserData’,info,…
‘WindowButtonMotionFcn’,[myname,’ move’],…
‘WindowButtonUpFcn’,[myname,’ up’])
case ‘move’
fig = gcbf;
info = get(fig,’UserData’);
curpos = get(info.ax,’CurrentPoint’);
info.x = [info.x;curpos(1,1)];
info.y = [info.y;curpos(1,2)];
set(info.drawing,’XData’,info.x,’YData’,info.y)
set(fig,’UserData’,info)
case ‘up’
fig = gcbf;
set(fig,’WindowButtonMotionFcn’,”,…
‘WindowButtonUpFcn’,”)
end
But I am not able to save the sketch being drawn or access it ..
Please help … freehand sketch MATLAB Answers — New Questions
Automated bad SEGMENT detection in EEGLAB
Hello everyone,
I am new to EEG pre-processing. I wanted to know if there is any way to detect bad segments in the EEG data automatically in EEGLAB? I found resources for automated detection of bad channels and arifact detection and rejection using ICLabel. However, i do not find any for bad segment detection and rejection. I have a lot of data and manually detecting it will be very time consuming. I heard about AMICA. But it seems to do ICA decomposition and I am satified with runica. If I am not wrong, AMICA doesnt detect bad segments.
Looking forward to your insights.Hello everyone,
I am new to EEG pre-processing. I wanted to know if there is any way to detect bad segments in the EEG data automatically in EEGLAB? I found resources for automated detection of bad channels and arifact detection and rejection using ICLabel. However, i do not find any for bad segment detection and rejection. I have a lot of data and manually detecting it will be very time consuming. I heard about AMICA. But it seems to do ICA decomposition and I am satified with runica. If I am not wrong, AMICA doesnt detect bad segments.
Looking forward to your insights. Hello everyone,
I am new to EEG pre-processing. I wanted to know if there is any way to detect bad segments in the EEG data automatically in EEGLAB? I found resources for automated detection of bad channels and arifact detection and rejection using ICLabel. However, i do not find any for bad segment detection and rejection. I have a lot of data and manually detecting it will be very time consuming. I heard about AMICA. But it seems to do ICA decomposition and I am satified with runica. If I am not wrong, AMICA doesnt detect bad segments.
Looking forward to your insights. amica, preprocessing, bad segment, eeglab MATLAB Answers — New Questions
To take the partial derivative of a function using matlab
Here is a particular code. Can anyone please help me in taking the analytical (partial) derivative of the function ‘F’ along X (i.e., w.r.t. X) along Y (i.e., w.r.t. Y) and along the diagonal (i.e., w.r.t. X plus w.r.t. Y) using matlab command.
[X, Y]=meshgrid(-1:2/511:+1, -1:2/511:+1);
F=sqrt(3).*(2.*(X.^2+Y.^2)-1);
Thanking You!Here is a particular code. Can anyone please help me in taking the analytical (partial) derivative of the function ‘F’ along X (i.e., w.r.t. X) along Y (i.e., w.r.t. Y) and along the diagonal (i.e., w.r.t. X plus w.r.t. Y) using matlab command.
[X, Y]=meshgrid(-1:2/511:+1, -1:2/511:+1);
F=sqrt(3).*(2.*(X.^2+Y.^2)-1);
Thanking You! Here is a particular code. Can anyone please help me in taking the analytical (partial) derivative of the function ‘F’ along X (i.e., w.r.t. X) along Y (i.e., w.r.t. Y) and along the diagonal (i.e., w.r.t. X plus w.r.t. Y) using matlab command.
[X, Y]=meshgrid(-1:2/511:+1, -1:2/511:+1);
F=sqrt(3).*(2.*(X.^2+Y.^2)-1);
Thanking You! differential equations MATLAB Answers — New Questions
Different dilution effect on the kinetics of a time course
Hi to everyone!
To simplify the explanation and the problem, I simulated the kinetics of an irreversible first-order reaction, A -> B. I implemented it in two independent compartments, R and P. I simulated the effect of a dilution in R by doubling at t= 0,1 the R volume. I programmed in P that, at t = 0.1, the instantaneous concentration of A and B would be reduced by half. I am sending an attach with the implementation of these simulations in the Simbiology interface.
When the simulations of the two compartments are plotted, it can be seen that the responses are not equal. That is, from t = 0.1 s, the reaction follow an exponential function in R with half of the initial amplitude and half of the initial value of k1. That is, the relaxation time is doubled. Meanwhile, in P, from t = 0.1, the reaction follows exponential kinetics with half the amplitude value but maintaining the initial value of k = 10. Without a doubt, the correct simulation is the latter (compartment P) where only the effect is observed in the amplitude and not in the relaxation time. Could you tell me what the error is that makes these kinetics that should be equal not be?
Thank you in advance!
Luis B.Hi to everyone!
To simplify the explanation and the problem, I simulated the kinetics of an irreversible first-order reaction, A -> B. I implemented it in two independent compartments, R and P. I simulated the effect of a dilution in R by doubling at t= 0,1 the R volume. I programmed in P that, at t = 0.1, the instantaneous concentration of A and B would be reduced by half. I am sending an attach with the implementation of these simulations in the Simbiology interface.
When the simulations of the two compartments are plotted, it can be seen that the responses are not equal. That is, from t = 0.1 s, the reaction follow an exponential function in R with half of the initial amplitude and half of the initial value of k1. That is, the relaxation time is doubled. Meanwhile, in P, from t = 0.1, the reaction follows exponential kinetics with half the amplitude value but maintaining the initial value of k = 10. Without a doubt, the correct simulation is the latter (compartment P) where only the effect is observed in the amplitude and not in the relaxation time. Could you tell me what the error is that makes these kinetics that should be equal not be?
Thank you in advance!
Luis B. Hi to everyone!
To simplify the explanation and the problem, I simulated the kinetics of an irreversible first-order reaction, A -> B. I implemented it in two independent compartments, R and P. I simulated the effect of a dilution in R by doubling at t= 0,1 the R volume. I programmed in P that, at t = 0.1, the instantaneous concentration of A and B would be reduced by half. I am sending an attach with the implementation of these simulations in the Simbiology interface.
When the simulations of the two compartments are plotted, it can be seen that the responses are not equal. That is, from t = 0.1 s, the reaction follow an exponential function in R with half of the initial amplitude and half of the initial value of k1. That is, the relaxation time is doubled. Meanwhile, in P, from t = 0.1, the reaction follows exponential kinetics with half the amplitude value but maintaining the initial value of k = 10. Without a doubt, the correct simulation is the latter (compartment P) where only the effect is observed in the amplitude and not in the relaxation time. Could you tell me what the error is that makes these kinetics that should be equal not be?
Thank you in advance!
Luis B. simbiolog MATLAB Answers — New Questions
Computation time significantly differs for 2D, 3D array indexing when solving the same problem. Best approach to address performance?
I wrote a simple code that calculates the covariance of images along different directions and lag spacings and returns a 2D map of covariance values varying by lags(h1,h2). The original program I wrote accepts only 2D inputs:
function [Correlogram] = ExhaustiveCovarianceFunction(X,lags)
[ny,nx,~]=size(X);
Covariance=NaN([2*lags+1 2*lags+1]);
Correlogram=NaN([2*lags+1 2*lags+1]);
for hy=-lags:lags
for hx=-lags:lags
sumprod=0;
sum1=0;
sum2=0;
countpairs=0;
for j=1:ny
for i=1:nx
if hy+j<=0 || hy+j>ny || hx+i<=0 || hx+i>nx
countpairs=countpairs;
continue
else
sumprod=X(j,i)*X(j+hy,i+hx) + sumprod;
sum1=X(j,i) + sum1;
sum2=X(j+hy,i+hx) + sum2;
countpairs=countpairs+1;
end
end
end
sumprod=sumprod/(countpairs);
sum1=sum1/(countpairs);
sum2=sum2/(countpairs);
Covariance(hy+lags+1,hx+lags+1)=sumprod – sum1*sum2;
%Standardize covariance values to correlogram
mean1=sum1;
mean2=sum2;
countpairs=0;
sumvar1=0;
sumvar2=0;
for j=1:ny
for i=1:nx
if hy+j<=0 || hy+j>ny || hx+i<=0 || hx+i>nx
continue
else
sumvar1=(X(j,i)-mean1)^2 + sumvar1;
sumvar2=(X(j+hy,i+hx)-mean2)^2 + sumvar2;
countpairs=countpairs+1;
end
end
end
sumvar1=sumvar1/countpairs;
sumvar2=sumvar2/countpairs;
Correlogram(hy+lags+1,hx+lags+1)=Covariance(hy+lags+1,hx+lags+1)/sqrt(sumvar1*sumvar2);
end
end
end
I wanted to extend this code to allow for up to 3D image inputs, but also allow 2D or 1D inputs. Some other changes for optimization were made (dynamically updating bounds, removing if/else statement):
function [Correlogram] = ExhaustiveCovarianceFunction3D(X,lags)
[ny,nx,nz]=size(X);
%lags is now a vector
Covariance=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
Correlogram=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
for hz=-lags(3):lags(3)
for hy=-lags(1):lags(1)
for hx=-lags(2):lags(2)
hvector = [hy hx hz];
if hvector(1)<0
ymin=abs(hvector(1))+1;
ymax=ny;
else
ymin=1;
ymax=ny-hvector(1);
end
if hvector(2)<0
xmin=abs(hvector(2))+1;
xmax=nx;
else
xmin=1;
xmax=nx-hvector(2);
end
if hvector(3)<0
zmin=abs(hvector(3))+1;
zmax=nz;
else
zmin=1;
zmax=nz-hvector(3);
end
sumprod=0;
sum1=0;
sum2=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumprod=X(j,i,k)*X(j+hy,i+hx,k+hz) + sumprod;
sum1=X(j,i,k) + sum1;
sum2=X(j+hy,i+hx,k+hz) + sum2;
end
end
end
countpairs = numel(ymin:ymax)*numel(xmin:xmax)*numel(zmin:zmax);
sumprod=sumprod/(countpairs);
sum1=sum1/(countpairs);
sum2=sum2/(countpairs);
Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=sumprod – sum1*sum2;
%Standardize covariance values to correlogram
mean1=sum1;
mean2=sum2;
sumvar1=0;
sumvar2=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumvar1=(X(j,i,k)-mean1)^2 + sumvar1;
sumvar2=(X(j+hy,i+hx,k+hz)-mean2)^2 + sumvar2;
end
end
end
sumvar1=sumvar1/countpairs;
sumvar2=sumvar2/countpairs;
Correlogram(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)/sqrt(sumvar1*sumvar2);
end
end
end
end
I first compared these codes for a 2D input image (nz=1) and noticed that my new function runs much slower than the original function:
ExhaustiveCovarianceFunction(testslice,25): Elapsed time is 0.057659 seconds.
ExhaustiveCovarianceFunction3D(testslice,[25,25,0]): Elapsed time is 19.251866 seconds.
After some testing, this led me to realize that indexing a 3D array is much slower than a 2D array in MATLAB, and that this has something to do with how memory is accessed for higher-dimensional arrays. I found out that, if I added a third dimension to the original ExhaustiveCovarianceFunction with index 1 that never changed (eg, X(j,i,1), with no other changes, the code slowed down significantly:
2D array index X(j,i): Elapsed time is 0.059815 seconds.
3D array index X(j,i,1): Elapsed time is 18.849217 seconds.
The idea that we cannot work with higher-dimensional arrays in MATLAB if we want to have optimal performance led me to an approach where, in my new function, I convert the 2D and 3D arrays to a 1D array and map the nD array indices to 1D:
function index1D = convert3Dto1D_index(j, i, k, ny, nx)
index1D = j + (i – 1) * ny + (k – 1) * ny * nx;
end
function [Correlogram] = ExhaustiveCovarianceFunction3D(Xinput,lags)
X = flatten3D(Xinput);
[ny,nx,nz]=size(Xinput);
%lags is now a vector
Covariance=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
Correlogram=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
for hz=-lags(3):lags(3)
for hy=-lags(1):lags(1)
for hx=-lags(2):lags(2)
hvector = [hy hx hz];
if hvector(1)<0
ymin=abs(hvector(1))+1;
ymax=ny;
else
ymin=1;
ymax=ny-hvector(1);
end
if hvector(2)<0
xmin=abs(hvector(2))+1;
xmax=nx;
else
xmin=1;
xmax=nx-hvector(2);
end
if hvector(3)<0
zmin=abs(hvector(3))+1;
zmax=nz;
else
zmin=1;
zmax=nz-hvector(3);
end
sumprod=0;
sum1=0;
sum2=0;
countpairs=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumprod=X(convert3Dto1D_index(j, i, k, ny, nx))*X(convert3Dto1D_index(j+hy, i+hx, k+hz, ny, nx)) + sumprod;
sum1=X(convert3Dto1D_index(j, i, k, ny, nx)) + sum1;
sum2=X(convert3Dto1D_index(j+hy, i+hx, k+hz, ny, nx)) + sum2;
countpairs=countpairs+1;
end
end
end
countpairs = numel(ymin:ymax)*numel(xmin:xmax)*numel(zmin:zmax);
sumprod=sumprod/(countpairs);
sum1=sum1/(countpairs);
sum2=sum2/(countpairs);
Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=sumprod – sum1*sum2;
%Standardize covariance values to correlogram
mean1=sum1;
mean2=sum2;
sumvar1=0;
sumvar2=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumvar1=(X(convert3Dto1D_index(j, i, k, ny, nx))-mean1)^2 + sumvar1;
sumvar2=(X(convert3Dto1D_index(j+hy, i+hx, k+hz, ny, nx))-mean2)^2 + sumvar2;
end
end
end
sumvar1=sumvar1/countpairs;
sumvar2=sumvar2/countpairs;
Correlogram(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)/sqrt(sumvar1*sumvar2);
end
end
end
end
This approach has better performance, but is still slower than the original 2D code:
2D: Elapsed time is 0.163243 seconds.
3D, 3D index: Elapsed time is 18.336108 seconds.
3D, 1D index: Elapsed time is 0.431890 seconds.
The optimized code with 1D array indexing is still about 3x slower. Perhaps calling convert3Dto1D_index(j, i, k, ny, nx) every time the image index is called is leading to this expense.These computational concerns are important for larger images (eg, 256x256x128) and for higher-order statistics that will be developed.
Is there a smarter approach to addressing this problem? I cannot figure out how to speed up this 3D code any more. Ideally, I seek to make the 3D/general code to have comparable speeds to the 2D "hard-coded" problem when a 2D image is input. If this is not possible, separate subroutines for 2D and 3D images is likely my best bet.I wrote a simple code that calculates the covariance of images along different directions and lag spacings and returns a 2D map of covariance values varying by lags(h1,h2). The original program I wrote accepts only 2D inputs:
function [Correlogram] = ExhaustiveCovarianceFunction(X,lags)
[ny,nx,~]=size(X);
Covariance=NaN([2*lags+1 2*lags+1]);
Correlogram=NaN([2*lags+1 2*lags+1]);
for hy=-lags:lags
for hx=-lags:lags
sumprod=0;
sum1=0;
sum2=0;
countpairs=0;
for j=1:ny
for i=1:nx
if hy+j<=0 || hy+j>ny || hx+i<=0 || hx+i>nx
countpairs=countpairs;
continue
else
sumprod=X(j,i)*X(j+hy,i+hx) + sumprod;
sum1=X(j,i) + sum1;
sum2=X(j+hy,i+hx) + sum2;
countpairs=countpairs+1;
end
end
end
sumprod=sumprod/(countpairs);
sum1=sum1/(countpairs);
sum2=sum2/(countpairs);
Covariance(hy+lags+1,hx+lags+1)=sumprod – sum1*sum2;
%Standardize covariance values to correlogram
mean1=sum1;
mean2=sum2;
countpairs=0;
sumvar1=0;
sumvar2=0;
for j=1:ny
for i=1:nx
if hy+j<=0 || hy+j>ny || hx+i<=0 || hx+i>nx
continue
else
sumvar1=(X(j,i)-mean1)^2 + sumvar1;
sumvar2=(X(j+hy,i+hx)-mean2)^2 + sumvar2;
countpairs=countpairs+1;
end
end
end
sumvar1=sumvar1/countpairs;
sumvar2=sumvar2/countpairs;
Correlogram(hy+lags+1,hx+lags+1)=Covariance(hy+lags+1,hx+lags+1)/sqrt(sumvar1*sumvar2);
end
end
end
I wanted to extend this code to allow for up to 3D image inputs, but also allow 2D or 1D inputs. Some other changes for optimization were made (dynamically updating bounds, removing if/else statement):
function [Correlogram] = ExhaustiveCovarianceFunction3D(X,lags)
[ny,nx,nz]=size(X);
%lags is now a vector
Covariance=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
Correlogram=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
for hz=-lags(3):lags(3)
for hy=-lags(1):lags(1)
for hx=-lags(2):lags(2)
hvector = [hy hx hz];
if hvector(1)<0
ymin=abs(hvector(1))+1;
ymax=ny;
else
ymin=1;
ymax=ny-hvector(1);
end
if hvector(2)<0
xmin=abs(hvector(2))+1;
xmax=nx;
else
xmin=1;
xmax=nx-hvector(2);
end
if hvector(3)<0
zmin=abs(hvector(3))+1;
zmax=nz;
else
zmin=1;
zmax=nz-hvector(3);
end
sumprod=0;
sum1=0;
sum2=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumprod=X(j,i,k)*X(j+hy,i+hx,k+hz) + sumprod;
sum1=X(j,i,k) + sum1;
sum2=X(j+hy,i+hx,k+hz) + sum2;
end
end
end
countpairs = numel(ymin:ymax)*numel(xmin:xmax)*numel(zmin:zmax);
sumprod=sumprod/(countpairs);
sum1=sum1/(countpairs);
sum2=sum2/(countpairs);
Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=sumprod – sum1*sum2;
%Standardize covariance values to correlogram
mean1=sum1;
mean2=sum2;
sumvar1=0;
sumvar2=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumvar1=(X(j,i,k)-mean1)^2 + sumvar1;
sumvar2=(X(j+hy,i+hx,k+hz)-mean2)^2 + sumvar2;
end
end
end
sumvar1=sumvar1/countpairs;
sumvar2=sumvar2/countpairs;
Correlogram(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)/sqrt(sumvar1*sumvar2);
end
end
end
end
I first compared these codes for a 2D input image (nz=1) and noticed that my new function runs much slower than the original function:
ExhaustiveCovarianceFunction(testslice,25): Elapsed time is 0.057659 seconds.
ExhaustiveCovarianceFunction3D(testslice,[25,25,0]): Elapsed time is 19.251866 seconds.
After some testing, this led me to realize that indexing a 3D array is much slower than a 2D array in MATLAB, and that this has something to do with how memory is accessed for higher-dimensional arrays. I found out that, if I added a third dimension to the original ExhaustiveCovarianceFunction with index 1 that never changed (eg, X(j,i,1), with no other changes, the code slowed down significantly:
2D array index X(j,i): Elapsed time is 0.059815 seconds.
3D array index X(j,i,1): Elapsed time is 18.849217 seconds.
The idea that we cannot work with higher-dimensional arrays in MATLAB if we want to have optimal performance led me to an approach where, in my new function, I convert the 2D and 3D arrays to a 1D array and map the nD array indices to 1D:
function index1D = convert3Dto1D_index(j, i, k, ny, nx)
index1D = j + (i – 1) * ny + (k – 1) * ny * nx;
end
function [Correlogram] = ExhaustiveCovarianceFunction3D(Xinput,lags)
X = flatten3D(Xinput);
[ny,nx,nz]=size(Xinput);
%lags is now a vector
Covariance=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
Correlogram=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
for hz=-lags(3):lags(3)
for hy=-lags(1):lags(1)
for hx=-lags(2):lags(2)
hvector = [hy hx hz];
if hvector(1)<0
ymin=abs(hvector(1))+1;
ymax=ny;
else
ymin=1;
ymax=ny-hvector(1);
end
if hvector(2)<0
xmin=abs(hvector(2))+1;
xmax=nx;
else
xmin=1;
xmax=nx-hvector(2);
end
if hvector(3)<0
zmin=abs(hvector(3))+1;
zmax=nz;
else
zmin=1;
zmax=nz-hvector(3);
end
sumprod=0;
sum1=0;
sum2=0;
countpairs=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumprod=X(convert3Dto1D_index(j, i, k, ny, nx))*X(convert3Dto1D_index(j+hy, i+hx, k+hz, ny, nx)) + sumprod;
sum1=X(convert3Dto1D_index(j, i, k, ny, nx)) + sum1;
sum2=X(convert3Dto1D_index(j+hy, i+hx, k+hz, ny, nx)) + sum2;
countpairs=countpairs+1;
end
end
end
countpairs = numel(ymin:ymax)*numel(xmin:xmax)*numel(zmin:zmax);
sumprod=sumprod/(countpairs);
sum1=sum1/(countpairs);
sum2=sum2/(countpairs);
Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=sumprod – sum1*sum2;
%Standardize covariance values to correlogram
mean1=sum1;
mean2=sum2;
sumvar1=0;
sumvar2=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumvar1=(X(convert3Dto1D_index(j, i, k, ny, nx))-mean1)^2 + sumvar1;
sumvar2=(X(convert3Dto1D_index(j+hy, i+hx, k+hz, ny, nx))-mean2)^2 + sumvar2;
end
end
end
sumvar1=sumvar1/countpairs;
sumvar2=sumvar2/countpairs;
Correlogram(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)/sqrt(sumvar1*sumvar2);
end
end
end
end
This approach has better performance, but is still slower than the original 2D code:
2D: Elapsed time is 0.163243 seconds.
3D, 3D index: Elapsed time is 18.336108 seconds.
3D, 1D index: Elapsed time is 0.431890 seconds.
The optimized code with 1D array indexing is still about 3x slower. Perhaps calling convert3Dto1D_index(j, i, k, ny, nx) every time the image index is called is leading to this expense.These computational concerns are important for larger images (eg, 256x256x128) and for higher-order statistics that will be developed.
Is there a smarter approach to addressing this problem? I cannot figure out how to speed up this 3D code any more. Ideally, I seek to make the 3D/general code to have comparable speeds to the 2D "hard-coded" problem when a 2D image is input. If this is not possible, separate subroutines for 2D and 3D images is likely my best bet. I wrote a simple code that calculates the covariance of images along different directions and lag spacings and returns a 2D map of covariance values varying by lags(h1,h2). The original program I wrote accepts only 2D inputs:
function [Correlogram] = ExhaustiveCovarianceFunction(X,lags)
[ny,nx,~]=size(X);
Covariance=NaN([2*lags+1 2*lags+1]);
Correlogram=NaN([2*lags+1 2*lags+1]);
for hy=-lags:lags
for hx=-lags:lags
sumprod=0;
sum1=0;
sum2=0;
countpairs=0;
for j=1:ny
for i=1:nx
if hy+j<=0 || hy+j>ny || hx+i<=0 || hx+i>nx
countpairs=countpairs;
continue
else
sumprod=X(j,i)*X(j+hy,i+hx) + sumprod;
sum1=X(j,i) + sum1;
sum2=X(j+hy,i+hx) + sum2;
countpairs=countpairs+1;
end
end
end
sumprod=sumprod/(countpairs);
sum1=sum1/(countpairs);
sum2=sum2/(countpairs);
Covariance(hy+lags+1,hx+lags+1)=sumprod – sum1*sum2;
%Standardize covariance values to correlogram
mean1=sum1;
mean2=sum2;
countpairs=0;
sumvar1=0;
sumvar2=0;
for j=1:ny
for i=1:nx
if hy+j<=0 || hy+j>ny || hx+i<=0 || hx+i>nx
continue
else
sumvar1=(X(j,i)-mean1)^2 + sumvar1;
sumvar2=(X(j+hy,i+hx)-mean2)^2 + sumvar2;
countpairs=countpairs+1;
end
end
end
sumvar1=sumvar1/countpairs;
sumvar2=sumvar2/countpairs;
Correlogram(hy+lags+1,hx+lags+1)=Covariance(hy+lags+1,hx+lags+1)/sqrt(sumvar1*sumvar2);
end
end
end
I wanted to extend this code to allow for up to 3D image inputs, but also allow 2D or 1D inputs. Some other changes for optimization were made (dynamically updating bounds, removing if/else statement):
function [Correlogram] = ExhaustiveCovarianceFunction3D(X,lags)
[ny,nx,nz]=size(X);
%lags is now a vector
Covariance=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
Correlogram=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
for hz=-lags(3):lags(3)
for hy=-lags(1):lags(1)
for hx=-lags(2):lags(2)
hvector = [hy hx hz];
if hvector(1)<0
ymin=abs(hvector(1))+1;
ymax=ny;
else
ymin=1;
ymax=ny-hvector(1);
end
if hvector(2)<0
xmin=abs(hvector(2))+1;
xmax=nx;
else
xmin=1;
xmax=nx-hvector(2);
end
if hvector(3)<0
zmin=abs(hvector(3))+1;
zmax=nz;
else
zmin=1;
zmax=nz-hvector(3);
end
sumprod=0;
sum1=0;
sum2=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumprod=X(j,i,k)*X(j+hy,i+hx,k+hz) + sumprod;
sum1=X(j,i,k) + sum1;
sum2=X(j+hy,i+hx,k+hz) + sum2;
end
end
end
countpairs = numel(ymin:ymax)*numel(xmin:xmax)*numel(zmin:zmax);
sumprod=sumprod/(countpairs);
sum1=sum1/(countpairs);
sum2=sum2/(countpairs);
Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=sumprod – sum1*sum2;
%Standardize covariance values to correlogram
mean1=sum1;
mean2=sum2;
sumvar1=0;
sumvar2=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumvar1=(X(j,i,k)-mean1)^2 + sumvar1;
sumvar2=(X(j+hy,i+hx,k+hz)-mean2)^2 + sumvar2;
end
end
end
sumvar1=sumvar1/countpairs;
sumvar2=sumvar2/countpairs;
Correlogram(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)/sqrt(sumvar1*sumvar2);
end
end
end
end
I first compared these codes for a 2D input image (nz=1) and noticed that my new function runs much slower than the original function:
ExhaustiveCovarianceFunction(testslice,25): Elapsed time is 0.057659 seconds.
ExhaustiveCovarianceFunction3D(testslice,[25,25,0]): Elapsed time is 19.251866 seconds.
After some testing, this led me to realize that indexing a 3D array is much slower than a 2D array in MATLAB, and that this has something to do with how memory is accessed for higher-dimensional arrays. I found out that, if I added a third dimension to the original ExhaustiveCovarianceFunction with index 1 that never changed (eg, X(j,i,1), with no other changes, the code slowed down significantly:
2D array index X(j,i): Elapsed time is 0.059815 seconds.
3D array index X(j,i,1): Elapsed time is 18.849217 seconds.
The idea that we cannot work with higher-dimensional arrays in MATLAB if we want to have optimal performance led me to an approach where, in my new function, I convert the 2D and 3D arrays to a 1D array and map the nD array indices to 1D:
function index1D = convert3Dto1D_index(j, i, k, ny, nx)
index1D = j + (i – 1) * ny + (k – 1) * ny * nx;
end
function [Correlogram] = ExhaustiveCovarianceFunction3D(Xinput,lags)
X = flatten3D(Xinput);
[ny,nx,nz]=size(Xinput);
%lags is now a vector
Covariance=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
Correlogram=NaN([2*lags(1)+1, 2*lags(2)+1, 2*lags(3)+1]);
for hz=-lags(3):lags(3)
for hy=-lags(1):lags(1)
for hx=-lags(2):lags(2)
hvector = [hy hx hz];
if hvector(1)<0
ymin=abs(hvector(1))+1;
ymax=ny;
else
ymin=1;
ymax=ny-hvector(1);
end
if hvector(2)<0
xmin=abs(hvector(2))+1;
xmax=nx;
else
xmin=1;
xmax=nx-hvector(2);
end
if hvector(3)<0
zmin=abs(hvector(3))+1;
zmax=nz;
else
zmin=1;
zmax=nz-hvector(3);
end
sumprod=0;
sum1=0;
sum2=0;
countpairs=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumprod=X(convert3Dto1D_index(j, i, k, ny, nx))*X(convert3Dto1D_index(j+hy, i+hx, k+hz, ny, nx)) + sumprod;
sum1=X(convert3Dto1D_index(j, i, k, ny, nx)) + sum1;
sum2=X(convert3Dto1D_index(j+hy, i+hx, k+hz, ny, nx)) + sum2;
countpairs=countpairs+1;
end
end
end
countpairs = numel(ymin:ymax)*numel(xmin:xmax)*numel(zmin:zmax);
sumprod=sumprod/(countpairs);
sum1=sum1/(countpairs);
sum2=sum2/(countpairs);
Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=sumprod – sum1*sum2;
%Standardize covariance values to correlogram
mean1=sum1;
mean2=sum2;
sumvar1=0;
sumvar2=0;
for k=zmin:zmax
for j=ymin:ymax
for i=xmin:xmax
sumvar1=(X(convert3Dto1D_index(j, i, k, ny, nx))-mean1)^2 + sumvar1;
sumvar2=(X(convert3Dto1D_index(j+hy, i+hx, k+hz, ny, nx))-mean2)^2 + sumvar2;
end
end
end
sumvar1=sumvar1/countpairs;
sumvar2=sumvar2/countpairs;
Correlogram(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)=Covariance(hy+lags(1)+1,hx+lags(2)+1, hz+lags(3)+1)/sqrt(sumvar1*sumvar2);
end
end
end
end
This approach has better performance, but is still slower than the original 2D code:
2D: Elapsed time is 0.163243 seconds.
3D, 3D index: Elapsed time is 18.336108 seconds.
3D, 1D index: Elapsed time is 0.431890 seconds.
The optimized code with 1D array indexing is still about 3x slower. Perhaps calling convert3Dto1D_index(j, i, k, ny, nx) every time the image index is called is leading to this expense.These computational concerns are important for larger images (eg, 256x256x128) and for higher-order statistics that will be developed.
Is there a smarter approach to addressing this problem? I cannot figure out how to speed up this 3D code any more. Ideally, I seek to make the 3D/general code to have comparable speeds to the 2D "hard-coded" problem when a 2D image is input. If this is not possible, separate subroutines for 2D and 3D images is likely my best bet. computation time, performance, time complexity, bigo, arrays, 2d, 3d, algorithm optimization MATLAB Answers — New Questions
SD from k-fold validation classification learner
I am dealing with a reviewer that ask for the standard deviation obtained in the k-fold validation LDA algorithm obtained from the classification learner app.
How can I do it?I am dealing with a reviewer that ask for the standard deviation obtained in the k-fold validation LDA algorithm obtained from the classification learner app.
How can I do it? I am dealing with a reviewer that ask for the standard deviation obtained in the k-fold validation LDA algorithm obtained from the classification learner app.
How can I do it? machine learning, app classification, k-fold, classification MATLAB Answers — New Questions
How do I reset MATLAB to its launched state?
Is it possible to "reset" MATLAB? Sometimes I want to "restore" MATLAB to the way it is when it is launched (not the way it was when it is installed). Closing all the figures, resetting the path and clearing variables is relatively easy, but not as easy as:
close all; clear all; path(pathdef); clc;
You need extra flags since the "all" flag is not really all (e.g., a figure might be hidden or mfiles files might be locked).
Resetting non-persistent "default" values is harder. For example, if at some point the "DefaultFigurePosition" is modified:
set(0, ‘DefaultFigurePosition’, [100, 100, 100, 100])
that change needs to be identified and reversed.
The list of things to get a full reset seems long to me. There are also issues about do I want to restore MATLAB to the way it was when it started or the way it will be the next time it starts. At this point I would be happy with either (or a mix).Is it possible to "reset" MATLAB? Sometimes I want to "restore" MATLAB to the way it is when it is launched (not the way it was when it is installed). Closing all the figures, resetting the path and clearing variables is relatively easy, but not as easy as:
close all; clear all; path(pathdef); clc;
You need extra flags since the "all" flag is not really all (e.g., a figure might be hidden or mfiles files might be locked).
Resetting non-persistent "default" values is harder. For example, if at some point the "DefaultFigurePosition" is modified:
set(0, ‘DefaultFigurePosition’, [100, 100, 100, 100])
that change needs to be identified and reversed.
The list of things to get a full reset seems long to me. There are also issues about do I want to restore MATLAB to the way it was when it started or the way it will be the next time it starts. At this point I would be happy with either (or a mix). Is it possible to "reset" MATLAB? Sometimes I want to "restore" MATLAB to the way it is when it is launched (not the way it was when it is installed). Closing all the figures, resetting the path and clearing variables is relatively easy, but not as easy as:
close all; clear all; path(pathdef); clc;
You need extra flags since the "all" flag is not really all (e.g., a figure might be hidden or mfiles files might be locked).
Resetting non-persistent "default" values is harder. For example, if at some point the "DefaultFigurePosition" is modified:
set(0, ‘DefaultFigurePosition’, [100, 100, 100, 100])
that change needs to be identified and reversed.
The list of things to get a full reset seems long to me. There are also issues about do I want to restore MATLAB to the way it was when it started or the way it will be the next time it starts. At this point I would be happy with either (or a mix). startup, function MATLAB Answers — New Questions
Invalid text character. Check for unsupported symbol, invisible character, or pasting of non-ASCII characters.
I really don’t know what is the reason for this error. PLease help!
theta_dd(i)= (kP*r(i) +kD*r_dot(i) -(m*g*l+kP)*sin(theta(i)) -kD*theta_dot(i))/M;I really don’t know what is the reason for this error. PLease help!
theta_dd(i)= (kP*r(i) +kD*r_dot(i) -(m*g*l+kP)*sin(theta(i)) -kD*theta_dot(i))/M; I really don’t know what is the reason for this error. PLease help!
theta_dd(i)= (kP*r(i) +kD*r_dot(i) -(m*g*l+kP)*sin(theta(i)) -kD*theta_dot(i))/M; invalid text character. check for unsupported symbol, invisible character, or pasting of non-ascii characters. MATLAB Answers — New Questions
Simulink Real time explorer
Why i dont get the same simulink blocs and interface when i run slrtExplorer in matlab R2020b as my Friend despite that we have the same version of matlabWhy i dont get the same simulink blocs and interface when i run slrtExplorer in matlab R2020b as my Friend despite that we have the same version of matlab Why i dont get the same simulink blocs and interface when i run slrtExplorer in matlab R2020b as my Friend despite that we have the same version of matlab transferred MATLAB Answers — New Questions