Variable for loop step size

17 views (last 30 days)
Travis
Travis on 28 Jul 2014
Answered: Travis on 31 Jul 2014
Hi All, I am searching for a way to constantly change the step size during the for loop execution. Here is the code I'm working with.
lambda = 405; % Wavelength of laser light (nm)
dx = zeros(1000,1); % Preallocation of matrix storage
for d1=0:1000;
dx(d1+1) = 4*cos((pi*d1)/lambda)^2; % Save interation in dl, intensity interference equation
end
plot(dx)
Ideally, I would like the step size to be related to a function like f(x)=x^2. (This is only an example, the real function would be a sphere) Where if x=1 then f(1)=1. But if x=2 then f(2)=4. So the step size is going like: 1,4,9,12... I don't know if a for loop would be the right function to use. Any help is appreciated.

Answers (3)

Image Analyst
Image Analyst on 28 Jul 2014
What are you calling the "step"? Don't you want every element to be assigned?
If you want non-uniform spacing along the "x" axis then I think maybe what you want is to create two matrices, one for x and one for y. Then assign to x the non-linear f(x) value, and to y the value for dx. Then plot
lambda = 405; % Wavelength of laser light (nm)
x = zeros(1000,1); % Preallocation of matrix storage
dx = zeros(1000,1); % Preallocation of matrix storage
for k = 0:1000;
x(k+1) = k^2;
dx(k+1) = 4*cos((pi*x(k+1))/lambda)^2;
end
plot(x, dx, 'b-')
grid on;
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
  6 Comments
Image Analyst
Image Analyst on 29 Jul 2014
Maybe just create two 2-D arrays and subtract them, rather than use ezsurf. Just loop over x(column) and y (row) to create the images with the proper equation.
Travis
Travis on 30 Jul 2014
Yes, I believe that using matrices is the best. I will post here when I figure it out. Thank you for all your help Image Analyst.

Sign in to comment.


Travis
Travis on 31 Jul 2014
I believe I have figured out the superposition between a spherical and plane wavefront simulation. Here is my code:
clear all
Imaging of superposition spherical and plane wavefronts
Images taken with Andor Neo Camera using Thyman-Green interferometer
lambda = 405*10^-9; % Wavelength (m) of laser light
R = 30; % Radius of curvature (m) of stressed sample
Pw = 6.5*10^-6; % Pixel width (m)
Px = 2560; % Number of pixles in x direction
C = 1280; % 1/2 of Px. Compensating for (0,0) pixel to be in center of CCD
for n=0:Px;
m = n - C; % Compensating for (0,0) pixel to be in center of CCD
x = m*Pw; % Compensating for pixel width
Z(n+1) = (sqrt(R^2 + x^2) - 30); % Equation for circle with radius R
I(n+1) = cos((pi*Z(n+1))/lambda).^2; % Intensity interference equation
end
plot(I) % Plot I vs n
Now I just need to simulate this in 3D. Using nested for loops possibly? Then graph with a contour plot. I was thinking about using the "surf" command. Any suggestion? Thanks for any assistance.

Travis
Travis on 31 Jul 2014
Problem resolved. For future people, here is a way to model the superposition of a spherical and plane wave in three dimensions. Here is the code:
%%Thinflim Stress Modeling
% This program models the superposition of a spherical and plane
% waves in three dimensions. Images are taken with Andor Neo camera using a Thymann-Green
% interferometer and compared to this model.
% Adnor Neo camera has Active pixels = 2560 x 2160, pixel size = 6.5 um, and
% sensor size = 16.6 x 14.0 mm
clear all
close all
R = 30; % Radius of curvature (m) of stressed sample
xoffset = 0; % Number of meters moved in y direction
yoffset = 0; % Number of meters moved in x direction
sphoff = -100; % Distance center of sphere is from origin in the origin
lambda = 405*10^-9; % Wavelength (m) of laser light
NPx = 2560; % Number of pixels in y direction
NPy = 2160; % Number of pixels in x direction
xComp = 1280; % 1/2 of Px. Compensating for (0,0) pixel to be in center of CCD in y direction
yComp = 1080; % 1/2 of Px. Compensating for (0,0) pixel to be in center of CCD in x direction
PW = 6.5*10^-6; % Pixel Width (m)
for n=0:NPx;
m = n - xComp; % Compensating for (0,0) pixel to be in center of CCD in y direction
y = m*PW + xoffset; % Compensating for pixel width and offset
for k=0:NPy;
h = k - yComp; % Compensating for (0,0) pixel to be in center of CCD in x direction
x = h*PW + yoffset; % Compensating for pixel width and offset
Z(k+1,n+1) = (sqrt(R^2 + x^2 + y^2) + sphoff); % Equation for circle with radius R
I(k+1,n+1) = cos((pi*Z(k+1,n+1))/lambda).^2; % Intensity interference equation
end
end
imagesc(I) % Plot I
axis equal % Equalize axis
Thank you Image Analyst for your help and support. This code works like I would expect. By no means is it perfect or as efficient as possible. I welcome any suggestions to make it run faster and more efficiently. Thanks Matlab community!

Categories

Find more on Line Plots in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!