一张图中的多个图

2024-02-21

我有以下代码,我想将相空间图组合成一个图形。

我已经对这些函数进行了编码,但我不知道如何让 MATLAB 将它们放入一张图中。正如你所看到的,这是变量r, a, b, and d这会改变。我如何将它们结合起来?

我还想使用以下方法绘制这些相空间图的矢量场quiver http://www.mathworks.se/help/techdoc/ref/quiver.html命令,但它就是不起作用。

%function lotkavolterra
% Plots time series and phase space diagrams.
clear all; close all;
t0 = 0;
tf = 20;
N0 = 20;
P0 = 5;

% Original plot
r = 2;
a = 1;
b = 0.2;
d = 1.5;

% Time series plots
lv = @(t,x)(lv_eq(t,x,r,a,b,d));
[t,NP] = ode45(lv,[t0,tf],[N0 P0]);
N = NP(:,1); P = NP(:,2);
figure
plot(t,N,t,P,' --');
axis([0 20 0 50])
xlabel('Time')
ylabel('predator-prey')
title(['r=',num2str(r),', a=',num2str(a),', b=',num2str(b),', d=',num2str(d)]);
saveas(gcf,'predator-prey.png')
legend('prey','predator')

% Phase space plot

figure
quiver(N,P);
axis([0 50 0 10])
%axis tight


% Change variables
r = 2;
a = 1.5;
b = 0.1;
d = 1.5;

%time series plots
lv = @(t,x)(lv_eq(t,x,r,a,b,d));
[t,NP] = ode45(lv,[t0,tf],[N0 P0]);
N = NP(:,1); P = NP(:,2);
figure
plot(t,N,t,P,' --');
axis([0 20 0 50])
xlabel('Time')
ylabel('predator-prey')
title(['r=',num2str(r),', a=',num2str(a),', b=',num2str(b),', d=',num2str(d)]);
saveas(gcf,'predator-prey.png')
legend('prey','predator')


% Phase space plot
figure
plot(N,P);
axis([0 50 0 10])

% Change variables
r = 2;
a = 1;
b = 0.2;
d = 0.5;

% Time series plots
lv = @(t,x)(lv_eq(t,x,r,a,b,d));
[t,NP] = ode45(lv,[t0,tf],[N0 P0]);
N = NP(:,1); P = NP(:,2);
figure
plot(t,N,t,P,' --');
axis([0 20 0 50])
xlabel('Time')
ylabel('predator-prey')
title(['r=',num2str(r),', a=',num2str(a),', b=',num2str(b),', d=',num2str(d)]);
saveas(gcf,'predator-prey.png')
legend('prey','predator')


% Phase space plot
figure
plot(N,P);
axis([0 50 0 10])

% Change variables
r = 0.5;
a = 1;
b = 0.2;
d = 1.5;

% Time series plots
lv = @(t,x)(lv_eq(t,x,r,a,b,d));
[t,NP] = ode45(lv,[t0,tf],[N0 P0]);
N = NP(:,1); P = NP(:,2);
figure
plot(t,N,t,P,' --');
axis([0 20 0 50])
xlabel('Time')
ylabel('predator-prey')
title(['r=',num2str(r),', a=',num2str(a),', b=',num2str(b),', d=',num2str(d)]);
saveas(gcf,'predator-prey.png')
legend('prey','predator')

% Phase space plot
figure
plot(N,P);
axis([0 50 0 10])

% FUNCTION being called from external .m file

%function dx = lv_eq(t,x,r,a,b,d)
%N = x(1);
%P = x(2);
%dN = r*N-a*P*N;
%dP = b*a*P*N-d*P;
%dx =  [dN;dP];

嗯,有几种方法可以在同一个图中显示多个数据系列。

我将使用一个小示例数据集以及相应的颜色:

%% Data
t  = 0:100;
f1 = 0.3;
f2 = 0.07;
u1 = sin(f1*t);   cu1 = 'r'; %red
u2 = cos(f2*t);   cu2 = 'b'; %blue
v1 = 5*u1.^2;     cv1 = 'm'; %magenta
v2 = 5*u2.^2;     cv2 = 'c'; %cyan

首先,当您希望所有东西都在同一轴上时,您将需要hold https://nl.mathworks.com/help/techdoc/ref/hold.html功能:

%% Method 1 (hold on)
figure;
plot(t, u1, 'Color', cu1, 'DisplayName', 'u1'); hold on;
plot(t, u2, 'Color', cu2, 'DisplayName', 'u2'); 
plot(t, v1, 'Color', cv1, 'DisplayName', 'v1'); 
plot(t, v2, 'Color', cv2, 'DisplayName', 'v2'); hold off;
xlabel('Time t [s]');
ylabel('u [some unit] and v [some unit^2]');
legend('show');

您会发现这在许多情况下是正确的,但是,当两个量的动态范围相差很大时(例如,u值小于 1,而v值要大得多)。

其次,当你的数据很多或者数量不同时,也可以使用subplot https://nl.mathworks.com/help/techdoc/ref/subplot.html有不同的轴。我也用过这个功能linkaxes https://nl.mathworks.com/help/techdoc/ref/linkaxes.html链接 x 方向上的轴。当您在 MATLAB 中放大其中一个时,另一个将显示相同的 x 范围,这样可以更轻松地检查更大的数据集。

%% Method 2 (subplots)
figure;
h(1) = subplot(2,1,1); % upper plot
plot(t, u1, 'Color', cu1, 'DisplayName', 'u1'); hold on;
plot(t, u2, 'Color', cu2, 'DisplayName', 'u2'); hold off;

xlabel('Time t [s]');
ylabel('u [some unit]');
legend(gca,'show');

h(2) = subplot(2,1,2); % lower plot
plot(t, v1, 'Color', cv1, 'DisplayName', 'v1'); hold on;
plot(t, v2, 'Color', cv2, 'DisplayName', 'v2'); hold off;

xlabel('Time t [s]');
ylabel('v [some unit^2]');
legend('show');

linkaxes(h,'x'); % link the axes in x direction (just for convenience)

子图确实浪费了一些空间,但它们允许将一些数据保留在一起,而不会过度填充图。

最后,作为一个更复杂的方法的示例,使用以下方法在同一个图形上绘制不同的数量:plotyy https://nl.mathworks.com/help/techdoc/ref/plotyy.html函数(或者更好的是:yyaxis https://nl.mathworks.com/help/matlab/ref/yyaxis.html自 R2016a 起运行)

%% Method 3 (plotyy)
figure;
[ax, h1, h2] = plotyy(t,u1,t,v1);
set(h1, 'Color', cu1, 'DisplayName', 'u1');
set(h2, 'Color', cv1, 'DisplayName', 'v1');
hold(ax(1),'on');
hold(ax(2),'on');
plot(ax(1), t, u2, 'Color', cu2, 'DisplayName', 'u2');
plot(ax(2), t, v2, 'Color', cv2, 'DisplayName', 'v2');

xlabel('Time t [s]');
ylabel(ax(1),'u [some unit]');
ylabel(ax(2),'v [some unit^2]');

legend('show'); 

这看起来确实很拥挤,但当信号的动态范围差异很大时,它会派上用场。

当然,没有什么可以阻止您结合使用这些技术:hold on和...一起plotyy and subplot.

edit:

For quiver https://nl.mathworks.com/help/techdoc/ref/quiver.html,我很少使用该命令,但无论如何,你很幸运,我不久前编写了一些代码以方便绘制矢量场图。您可以使用与上面解释的相同的技术。我的代码远非严格,但这里是:

function [u,v] = plotode(func,x,t,style)
% [u,v] = PLOTODE(func,x,t,[style])
%    plots the slope lines ODE defined in func(x,t)
%    for the vectors x and t
%   An optional plot style can be given (default is '.b')

if nargin < 4
    style = '.b';
end;
% http://ncampbellmth212s09.wordpress.com/2009/02/09/first-block/
[t,x] = meshgrid(t,x);

v  = func(x,t);
u  = ones(size(v));
dw = sqrt(v.^2 + u.^2);

quiver(t,x,u./dw,v./dw,0.5,style);
xlabel('t'); ylabel('x');

当调用时:

logistic = @(x,t)(x.* ( 1-x )); % xdot = f(x,t)
t0 = linspace(0,10,20);
x0 = linspace(0,2,11);

plotode(@logistic,x0,t0,'r'); 

this yields: Quiver plot

如果您需要更多指导,我发现我的来源中的那个链接 http://ncampbellmth212s09.wordpress.com/2009/02/09/first-block/非常有用(尽管格式错误)。

另外,你可能想看看 MATLAB 帮助,它真的很棒。只需输入help quiver or doc quiver进入 MATLAB 或使用我上面提供的链接(这些链接应提供与doc).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一张图中的多个图 的相关文章

  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • 如何将数据传递给 MATLAB oncleanup 函数?

    我有一个编译好的 matlab 程序 可以自动调整机器参数 在调整周期结束时 我需要恢复一些原始设置 有时会发生意外错误 有时用户会发现调整算法未正常工作 因此应终止 使用 control C 如果发生可预测的错误 我可以使用 try ca
  • 将 kinect RGB 和深度值转换为 XYZ 坐标

    我正在寻找一种简单的方法将 kinect RGB 和深度值转换为 XYZ 坐标 使用 MATLAB 我的目标是一个输入为以下内容的函数 每个点的 RGB 和深度值Kinect相机 并输出 每个点的 x y 和 z 值 RGB 深度 RGB
  • MATLAB 除法...29/128 应该返回 0 吗?

    我真的不认为这是一个精度问题 答案应该是0 226左右 这是确切的代码 val I i j bucketSize pos val bucketSize I只是我从中获取值的矩阵 以下是 MATLAB 的输出 val 29 bucketSiz
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • 轴标注问题

    通过运行我编写的以下 matlab 函数 可以互换图中的 x 轴和 y 轴 谁能告诉我问题出在哪里或者帮我解决它吗 预先感谢您的任何帮助 function axislabeling n x 1 1 n y 1 1 n z zeros n n
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 在矩阵中找到叉的最快方法

    定义 A i j 1 是十字的中点 如果元素A i 1 j 1A i 1 j 1A i j 1 1A i j 1 1 这些元素和中点一起形成矩阵 A 中的十字 其中 A 至少是一个 3 3 矩阵 并且i j 0 假设上图是 8 8 矩阵 A
  • 拟合具有扭曲时基的正弦波

    我想知道在 Matlab 中拟合具有扭曲时基的正弦波的最佳方法 时间失真由 n 阶多项式 n 10 给出 其形式为t distort P t 例如 考虑失真t distort 8 12t 6t 2 t 3 这只是幂级数展开 t 2 3 这将
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image

随机推荐

  • 用 Haskell 解释 Parigot 的 lambda-mu 演算

    我们可以用 Haskell 来解释 lambda 演算 data Expr Var String Lam String Expr App Expr Expr data Value a V a F Value a gt Value a int
  • Powershell 中所有进程的 CPU 和内存使用百分比

    有没有一种方法可以查看所有正在运行的进程的 CPU 和内存利用率百分比PowerShell 我已经尝试过以下方法 Get Process Process 0 CPU Usage 1 Memory Usage 2 f ProcessName
  • Vue 路由器页面刷新时出现 404

    我正在使用具有历史模式的 Vue 路由器 在按钮上单击当前页面 我将其路由到下一页 在第二页上 当我重新加载时 我收到 404 有没有办法在 Vue 中处理这个问题并将其重定向到主页 export default new Router mo
  • 如何在 Alexa Skill 中使用 Java 获取亚马逊用户电子邮件

    我是 Alexa 技能开发的新手 我正在尝试开发一项 Alexa 通过我的电子邮件回复的技能 我正在开发 Java 技能 并且我刚刚能够通过以下方式获取用户会话 ID getSession getUser getUserId Getting
  • 如何记录 Azure 服务总线访问?

    有没有办法记录对 Azure 服务总线的访问 我们正在寻找一种方法来记录谁在服务总线中创建 删除主题 订阅 命名空间 无论是从 Azure 门户还是从外部源 如 API 或 Service Bus Explorer We have Azur
  • “错误:没有 Overlay 提供程序!”

    In my Angular 2 0 0 rc 7 Angular Material 2 0 0 alpha 8 1应用程序构建Angular CLI 1 0 0 beta 11 webpack 9 1 升级后出现以下错误rc 5 alpha
  • AWS 相当于 Firebase 实时数据库的是什么?

    我目前正在开发一个新的游戏项目 该项目将由 React Native 前端和基于 Lambda 的后端组成 该应用程序需要一些实时功能 例如活动用户记录 地理围栏等 我正在研究 Firebase 的实时数据库 它看起来像是一个非常优雅的实时
  • Vim:使用 \_ 跨多行匹配字符串时。在正则表达式中,:yank 命令仅适用于第一行

    我想提取一些跨越多行的文本的多次出现 并且可以与单个 Vim 正则表达式匹配 使用元字符 不幸的是 尽管 Vim 中匹配的行被正确突出显示 当我在匹配的正则表达式后添加任何 Vim 命令 例如删除或拉取 时 该命令仅适用于每场比赛的第一行
  • 在这种情况下我应该如何舍入浮点数?

    由于同一浮点数可以有多种表示形式 我的代码中遇到了问题 例如 这些数字被认为是相同的 0 0299999400 0 0300000000 我不太关心大精度 我需要计算CRC这些数字的数量 它们应该是相同的 所以我的方法是使用以下代码 pri
  • 在超级项目中自动提交 git 子模块哈希

    当你在git子模块中提交时 你需要到超级项目中进行第二次提交 这是子模块的新哈希 这非常烦人 很容易忘记 如果您不这样做 可能会导致各种问题 我想做的是 提交我的子模块中的更改 在超级项目中自动提交哈希 将子模块和超级项目推送到其远程源 g
  • 优化多词编辑距离的速度

    我有一个元胞数组字典 其中包含很多单词 约 15000 个 我想计算函数strdist 计算 Levenshtein 距离 所有单词对 我尝试了两种方法 但它们都很慢 什么是更有效的解决方案 这是我的代码 dict keys 是我长度为 m
  • 使用 Nokogiri 插入和删除 XML 节点和元素

    我想提取 XML 文件的部分内容 并记下我提取了该文件中的某些部分 例如 此处提取了某些内容 我正在尝试使用 Nokogiri 来做到这一点 但似乎并没有真正记录如何 删除 a 的所有子项
  • 修剪字符字段

    我们目前使用的是 Delphi 和 Borland 数据库 我们计划从 borland 迁移到 Firebird 库 borland lib 有内存泄漏 我们现在遇到的问题是 Firebird 库返回一个带有尾随空格的字符 这是 borla
  • 实体框架表拆分:不在同一类型层次结构中/没有有效的一对一外键关系

    我使用实体框架 6 和代码优先方法 并且我希望将两个实体放入同一个表中 我究竟做错了什么 Table Review public class Review public int Id get set public PictureInfo P
  • 为什么Koala无法编译默认的Bootstrap 3 less文件?

    我正在努力学习 Bootstrap 3 及 Less 但在开始之前我就陷入了死胡同 经过两天的反复试验 我最终选择了Koala来将Less编译成CSS 我使用的是 Mac OS 10 7 所以 Codekit 已经出来了 现在只能在 8 上
  • Ruby 1.9 中的垃圾收集器调整

    我知道关于GC enable disable 但是有什么方法可以控制 Ruby1 9垃圾收集器更详细吗 在分析我的代码时 使用 perftools rb 我注意到 GC 最多占总样本的 30 我想看看是否可以调整 GC 以减少这个数字 是否
  • Java中的局部变量清空对GC有帮助吗

    我 被迫 添加myLocalVar null 在离开方法之前将语句放入finally子句中 原因是为了帮助GC 有人告诉我下次服务器崩溃时我会在晚上收到短信 所以我最好这样做 我认为这是毫无意义的 因为 myLocalVar 的范围仅限于方
  • 在 SQL 中多次连接同一个表[重复]

    这个问题在这里已经有答案了 我有一个表 每个 tran ref 列有 3 行或更多行 每行都有 amount 以及 tran id 以下是我的输入表 tran ref tran id amount T1 01 9 T1 02 8 T1 03
  • 如何将小数属性格式化为货币?

    我想将小数值格式化为货币值 我怎样才能做到这一点 属性可以返回它们想要的任何内容 但需要返回正确的类型 private decimal amount public string FormattedAmount get return stri
  • 一张图中的多个图

    我有以下代码 我想将相空间图组合成一个图形 我已经对这些函数进行了编码 但我不知道如何让 MATLAB 将它们放入一张图中 正如你所看到的 这是变量r a b and d这会改变 我如何将它们结合起来 我还想使用以下方法绘制这些相空间图的矢