How do I plot multiple function forms on the same graph using vectors?

1 view (last 30 days)
I am creating a program to solve for roots of functions using Newton's Method. I keep getting the error "Error using * Inner matrix dimensions must agree.
Error in NewtonRoot2 (line 5) y = x + exp(-b*(x*x));"
if true
% code
end
clear
clc
x = -2 : 0.02 : 2;
b = [1, 5, 10, 25, 50];
y = x + exp(-b*(x*x));
plot(x,y,x,zeros(size(x)));
axis([-2, 2, -5, 5])
title('Plot of f(x) = x + exp(-b.*x.^2)')
xlabel('X')
ylabel('Y')
f = 'x + exp(-b.*x.^2)';
fprime = '1 - 2*b*x*exp(-b.*x.^2)';
maxiterations = 20;
iters = x;
for k=1 : maxiterations,
xnew = x - eval(f) ./ eval(fprime);
iters = [iters; xnew];
test = abs(xnew - x) ./ (abs(xnew)+eps);
if max(test) < 10*eps, break, end;
x = xnew;
end
format long
iters
format
if true
% code
end
Any suggestions would be very useful. For a more clear explanation of what I am trying to accomplish: I have the function f. This function has variables x and b as components. I want to make five different graphs on the same plot using different values for b, as shown in the vector 1,5,10,25,50. Once those graphs have been plotted with different b values, I will find roots of each one to compare the effect on the root by changes in b. Hopefully this is clear enough. I can provide more information as needed.

Accepted Answer

Thorsten
Thorsten on 18 Jan 2013
Edited: Thorsten on 18 Jan 2013
To plot the function you can use the following code. Note that a * between vectors denotes matrix multiplication; use .* for point-wise multiplication.
hold on
for i = 1:numel(b)
plot(x, x + exp(-b(i)*(x.*x)));
end
hold off
  1 Comment
Paul
Paul on 18 Jan 2013
Edited: Paul on 18 Jan 2013
Thank you so much for your response, that worked great for showing all of the graphs at once with the hold function. Just a few problems to work out now.
1. I added code to create a horizontal axis line 2. I am now getting a new error related to matricies that are apparently sizing themselves inappropriately. MatLab is returning this error:
Error using .* Matrix dimensions must agree.
Error in NewtonRoot2 (line 24) xnew = x - eval(f) ./ eval(fprime);
My code now looks like this: if true
clear
clc
x = -2 : 0.02 : 2;
b = [1, 5, 10, 25, 50];
%y = x + exp(-b*(x*x));
%plot(x,y,x,zeros(size(x)));
plot([-2 2], [0 0], 'k-');
hold on
for i = 1:numel(b)
plot(x, x + exp(-b(i)*(x.*x)));
end
hold off
axis([-2, 2, -5, 5])
title('Plot of f(x) = x + exp(-b.*x.^2)')
xlabel('X')
ylabel('Y')
f = 'x + exp(-b.*x.^2)';
fprime = '1 - 2*b*x*exp(-b.*x.^2)';
maxiterations = 20;
iters = b;
for k=1 : maxiterations,
xnew = x - eval(f) ./ eval(fprime);
iters = [iters; xnew];
test = abs(xnew - x) ./ (abs(xnew)+eps);
if max(test) < 10*eps, break, end;
x = xnew;
end
format long
iters
format
end
if true
% code
end

Sign in to comment.

More Answers (0)

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!