Variable for loop step size
Mostrar comentarios más antiguos
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.
Respuestas (3)
Image Analyst
el 28 de Jul. de 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 comentarios
Travis
el 28 de Jul. de 2014
Image Analyst
el 29 de Jul. de 2014
That makes sense, but since the cosine formula is cos(2*pi*x/period) and you want period to become smaller, then why don't you leave x alone and make lambda a function of k?
Image Analyst
el 29 de Jul. de 2014
Travis, haven't heard from you so I guess you're having some difficulty. Here, try this code and see if it does what you want:
lambda = 405; % Wavelength of laser light (nm)
x = zeros(1000,1); % Preallocation of matrix storage
y = zeros(1000,1); % Preallocation of matrix storage
% Create chirp-like signal
for k = 0:1000;
period = lambda / (k/500);
x(k+1) = k;
y(k+1) = 4 * cos(2 * pi * x(k+1) / period)^2;
end
plot(x, y, 'b-', 'LineWidth', 2)
grid on;
title('Chirp', 'FontSize', 18);
xlabel('X', 'FontSize', 18);
ylabel('Y', 'FontSize', 18);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);

Image Analyst
el 29 de Jul. de 2014
Travis's "Answer" moved here:
Hi Image, Sorry for the delay. I did think about changing the period in that way. And that gives me an image that is similar to the one I want. However, in the graph the physics is not quite correct. With a wavelength = 405 nm. I would expect the first interference fringe to be at 202.5 nm, then 607.5 nm,... (every half wavelength). So my first code was correct in terms of the interference equation. However, because the spherical wave in not linear the fringes should get tighter and tighter, like Newton's rings interference. In other words, (if the z-axis is the direction of light propagation)for each unit moved away for the origin in the x or y-axis it will cause a non-linear movement in the z-axis. From my understanding, that is what causes the fringes to get tighter together.
I think the best course of action is to subtract the difference between a plane and spherical wave using this code for the waves
hold on
ezsurf('sqrt(30^2 + x^2 + y^2) - 30', [-1280 1280], [-1080 1080]);
ezsurf('0', [-1280 1280], [-1080 1080]);
axis([-1280 1280 -1080 1080 0 1700])
..Create a matrix with the z-axis difference within all points in the plot (that all the pixels in my CCD). Then use those values to evaluate the "dl" interference equation. And plot the result. Is something like that possible?
I am a novice at Matlab, but I believe I understand the physics and optics of the interference. Thank you for your help so far. I'm up for any more suggestions.
Image Analyst
el 29 de Jul. de 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
el 30 de Jul. de 2014
Travis
el 31 de Jul. de 2014
Travis
el 31 de Jul. de 2014
Categorías
Más información sobre Image Processing Toolbox en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!