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

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.

 Réponse acceptée

Thorsten
Thorsten le 18 Jan 2013
Modifié(e) : Thorsten le 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 commentaire

Paul
Paul le 18 Jan 2013
Modifié(e) : Paul le 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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur 2-D and 3-D Plots dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by