2014-12-08 6 views
0

я иметь эту функцию, сделать определенные уравнения:точка метки на графике MATLAB

function [ ] = draw() 

x=linspace(-2,2,400); 
for i=1:400 
y(i)=cos(x(i)^2)-5*x(i)*sin(x(i)/2); 
end 

plot(x,y) 
title('2-D line plot for the equation') 
xlabel('x') 
ylabel('y') 

end 

сейчас, я хочу написать еще одну функцию, которая будет использовать draw и маркировать корень выключения функции. Предполагая, что я знаю x, y корня, который хочу отметить.

как я могу это сделать? как только я назову draw, график будет построен без моих корней.

+0

Вы хотите отметить его текстом в нужном месте? Если это так, вы можете использовать текстовую аннотацию непосредственно внутри своей функции рисования. О, и обратите внимание, что вы можете заменить свою петлю на эту векторизованную форму: y = cos (x.^2) -5. * X. * Sin (x./2); –

+0

Отметьте [этот блог] (http://blogs.mathworks.com/loren/2007/02/08/string-annotations-for-plots/) сообщение для некоторых хороших примеров для размещения текстовых маркеров на графиках – Scott

+0

Вам действительно нужно для вызова другой функции или вы можете просто поместить весь код в розыгрыш? –

ответ

1

Согласно вашему комментарию, вы можете добавить несколько строк в свою существующую функцию для достижения желаемого. Обратите внимание, что, если вы заранее знаете расположение корней, вы можете пропустить эту часть кода. Это прокомментировано, так что это должно быть довольно легко следовать. Скажите, пожалуйста, если я с трассы или есть что-то неясно:

clear 
clc 
close all 

x=linspace(-2,2,400); 

%// for i=1:400 
%// y(i)=cos(x(i)^2)-5*x(i)*sin(x(i)/2); 
%// end 

%// Vectorized function 
y= cos(x.^2)-5.*x.*sin(x./2); 

%// If you already have the roots skip this part 

%// ================================================ 
%// Create function handles to find roots. 
fun = @(x) cos(x^2)-5*x*sin(x/2); 

x0_1 = -1; %// Initial guesses for finding roots 
x0_2 = 1; 
a1 = fzero(fun,x0_1); 
a2 = fzero(fun,x0_2); 

%// ================================================ 

%// At this point you have the x-values of both roots (a1 and a2) as well 
%// as their y-values, corresponding to fun(a1) and fun(a2), respectively). 

%// Plot the function 
plot(x,y) 

hold on 

%// Use scatter to mark the actual points on the curve. Highly 
%// customizable. 
hS1 = scatter(a1,fun(a1),300,'+','MarkerEdgeColor',[0 .5 .5],'MarkerFaceColor',[0 .7 .7]); 
hS2 = scatter(a2,fun(a2),300,'+','MarkerEdgeColor',[0 .5 .5],'MarkerFaceColor',[0 .7 .7]); 

%// Generate text strings. There are other ways as well, like using 
%num2string[...]. 
TextString1 = sprintf('Root 1 is at (%0.1f,%0.1f)', a1,fun(a1)); 
TextString2 = sprintf('Root 2 is at (%0.1f,%0.1f)', a2,fun(a2)); 


%// Place text with those 2 lines at the location you want. 
text(a1-1,fun(a1)+1,TextString1) 
text(a2+.25,fun(a2)+1,TextString2) 

title('2-D line plot for the equation') 
xlabel('x') 
ylabel('y') 

, который выдает что-то вроде этого:

enter image description here

это то, что вы имели в виду?

+0

@saharz, так ли этот ответ помог вам решить вашу проблему? –

Смежные вопросы