如何在matlab中绘制关系?

时间:2014-11-19 02:06:26

标签: matlab plot matlab-figure figure

我想在不使用y^2=x^2(x+3)或使用代数查找函数的每个分支的情况下在MATLAB中绘制ezplot之类的关系。

有谁知道我怎么做到这一点?我通常会创建一个linspace,然后在linspace上创建一个函数。例如

x=linspace(-pi,pi,1001);
f=sin(x);
plot(x,f)

我可以为我提供的关系做类似的事情吗?

3 个答案:

答案 0 :(得分:4)

你可以做的是使用solve并允许MATLAB的符号解算器以y的形式象征性地求解x的表达式。完成此操作后,您可以使用subsx的值替换为solve中找到的表达式,并将所有这些值一起绘制。请记住,您需要使用subs投射double的结果,因为您需要替换的数字结果。不这样做仍然会以MATLAB的符号格式留下答案,当你想在图表上绘制最终点时,它是不兼容的。

此外,您需要做的是给定的方程式,例如您在上面发布的方法,您可能需要遍历每个解决方案,将x的值替换为每个,然后将它们添加到绘图中。

如下所示。在这里,您还可以根据需要控制域名:

syms x y;
eqn = solve('y^2 == x^2*(x+3)', 'y'); %// Solve for y, as an expression of x
xval = linspace(-1, 1, 1000);

%// Spawn a blank figure and remember stuff as we throw it in
figure;
hold on;

%// For as many solutions as we have...
for idx = 1 : numel(eqn)
    %// Substitute our values of x into each solution
    yval = double(subs(eqn(idx), xval));

    %// Plot the points
    plot(xval, yval);
end

%// Add a grid
grid;

特别注意我如何使用solve。我指定了y,因为我想解决y,这会给我一个x的表达式。 x是我们的自变量,所以这很重要。然后我指定一个从{1}到-1的x点网格 - 实际上恰好是1000个点。我产生一个空白数字,然后对于我们所拥有的等式的尽可能多的解,我们确定每个解决方案的输出y值,我们给出了我之前做出的x值。然后我将这些点绘制在这些点的图表上。请注意,我使用hold on为每个plot调用添加了更多的点数。如果我没有这样做,那么这个数字会刷新,只记得最近对plot的调用。您希望将所有点都放在此处从所有解决方案生成。为了一些整洁,我扔了一个网格。

这就是我得到的:

enter image description here

答案 1 :(得分:4)

好的,我正准备写下我的答案,我刚看到@rayryeng提出了类似的想法(好工作Ray!)但是就在这里。这个想法也是使用solve来获取y的表达式,然后将符号函数转换为匿名函数然后绘制它。该代码适用于您从解决方案中获得的任何数量的解决方案:

clear
clc
close all

syms x y 

FunXY = y^2 == x^2*(x+3);

%//Use solve to solve for y.
Y = solve(FunXY,y);

%// Create anonymous functions, stored in a cell array.

NumSol = numel(Y); %// Number of solutions.

G = cell(1,NumSol);

for k = 1:NumSol
G{k} = matlabFunction(Y(k))
end

%// Plot the functions...
figure

hold on
for PlotCounter = 1:NumSol
fplot(G{PlotCounter},[-pi,pi])
end

hold off

结果如下:

enter image description here

答案 2 :(得分:2)

n = 1000;
[x y] = meshgrid(linspace(-3,3,n),linspace(-3,3,n));
z = nan(n,n);
z = (y .^ 2 <= x .^2 .* (x + 3) + .1);
z = z & (y .^ 2 >= x .^2 .* (x + 3) - .1);
contour(x,y,z)

enter image description here

这可能不是你想要的,但我很酷!

enter image description here