Here are my codes, I keep getting wrong feedback which drive me crazy! Here's the problem: Basicly the problem is to solve a nonlinear equation by using the fzero command. The function is Φ(r)=[Φ0*e^-r/delta]/(4*pi*D*r) And solve r when Φ(r)/Φ0=10% Every parameters are in the command
My problem is: Index exceeds matrix dimensions.
Error in YZHW61 (line 47) fprintf(' %6.3f %2u %6.2f %+6.2E \n',...
%%YZHW61
%Find the distance away from the point source of laser
%
%Written 2/11/2012 by YZ
%Last updated 2/11/2012 by YZ
%
%First list parameters
%μs’=μs(1-g)=10cm-1
%μt’=μa+μs’=10.1cm-1
%D=(1/3)*μt’=3.37cm-1
%δ=sqrt(D/μa)=5.8
%So the final equation becomes Φ(r)=(Φ0*e^(-r/5.8))/(4*pi*3.37*r)
%Simplify the equation and we get:
%Φ=(e^(-r/5.8))/13.48*pi*r where Φ(Phi)=Φ(r)/Φ0 that represents the
%percentage of the new light intensity compared to the original
%light intensity
date
clear all
%First plot Diffusion Equation for r between 0.5 and 100
for i=1:1:200; %loop counters musht be be nonzero,positive integers
r=i/2; %this will give us 0.5cm distance
press(i)=r;
g=0.9;
mius=100;
miua=0.1;
mius1=mius*(1-g);
miut1=miua+mius1;
D=(1/3)*miut1;
delta=sqrt(D/miua);
P(i)=exp(-r/delta)/(4*pi*D*r)*100;
end
hold on
plot(press,P);axis equal; grid
%
% Get user input for the light fluence rate(percentage)
%We need to pass this information to the function by using the global
%variable
global Phi
Phi=0.1;
%
%Choose initial guess
distance=1;
[r,error,exitflag,output]=fzero(@Diffusion,distance);
%
%What's the solution, how many iterations, what's the error?
fprintf=('distance (Iterations fluence rate error) \n');
fprintf(' %6.3f %2u %6.2f %+6.2E \n',...
r, output.funcCount, Phi, error)
plot(r,0.1,'o')
And here is my function:
function Pest=Diffusion(distance)
%Diffusion equation for distance r
%
%First written by YZ on 2/11/2012
%Last updated by YZ on 2/11/2012
%
global Phi
g=0.9;
mius=100;
miua=0.1;
mius1=mius*(1-g);
miut1=miua+mius1;
D=(1/3)*miut1;
delta=sqrt(D/miua);
Pest=exp(-distance/delta)/(4*pi*D*distance)*100-Phi;
end
Really appreicate anyone who can help me!

2 Comments

Walter Roberson
Walter Roberson on 12 Feb 2012
What problem are you encountering? There is nothing in your source that an on-looker would clearly understand to be "feedback", and you have not mentioned any error message.
Yu
Yu on 12 Feb 2012
I'm so sorry, please see the edited verision.

Sign in to comment.

 Accepted Answer

Image Analyst
Image Analyst on 12 Feb 2012
Several errors in your code. The big one is this line:
fprintf=('distance (Iterations fluence rate error) \n');
You are not allowed to have an equal sign after fprintf(). I think what you did was to essentially overwrite fprintf with a character string. Then in the next line you tried to access some element of the string beyond the end of it.
Secondly, you are overwriting error(). DON'T DO THAT! It's a built in function. Use "errorStructure" as the name instead of "error".
[r,errorStructure,exitflag,output]=fzero(@Diffusion,distance);

9 Comments

Yu
Yu on 12 Feb 2012
Thank you for your answer, however, I changed r from 0.005 to 1 and changed the initial guess to 0.005 due to my understand and graph to the function; but then I encountered a new problem: too many output arguments.It that because I choos the wrong initial guess? Because I changed to different values and still get the same mistake.
Image Analyst
Image Analyst on 12 Feb 2012
I don't care at all about those. Did you change what I said to change? Did you remove the equal sign and rename error to errorStructure?
Yu
Yu on 12 Feb 2012
I did; actually the changes are made after I did what you want me to change.
Image Analyst
Image Analyst on 12 Feb 2012
I don't see how r was ever .005. I see that it was r=i/2. Where does it now equal 1? Also, what line said that some function had too many output arguments? It helps if you paste the error.
Yu
Yu on 12 Feb 2012
Error using error
Too many output arguments.
Error in YZHW61 (line 47)
fprintf(' %6.3f %2u %6.2f %+6.2E \n',...
This is my error.
And I set r range from 0.005 to 1; because i have to be nonzero and positive figures so I let r=i/200 to get the range of r.
for i=1:1:200; %loop counters musht be be nonzero,positive integers
r=i/200; %this will give us 0.005 distance
Image Analyst
Image Analyst on 12 Feb 2012
Doesn't make sense. You're not using "error" anymore, remember? I told you to change it to "errorStructure" and you said you did.
Yu
Yu on 12 Feb 2012
distance=0.005;
[r,errorStructure,exitflag,output]=fzero(@Diffusion,distance);
This is what I did according to your suggestion.
Yu
Yu on 12 Feb 2012
Got it, thank you so much !
Image Analyst
Image Analyst on 12 Feb 2012
I guess you also eventually remembered to change it in the fprintf() also.

Sign in to comment.

More Answers (0)

Categories

Find more on Programming in Help Center and File Exchange

Products

Tags

No tags entered yet.

Asked:

Yu
on 12 Feb 2012

Edited:

on 9 Oct 2013

Community Treasure Hunt

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

Start Hunting!