当前位置: 首页 > article >正文

Matlab全局变量用法及其实例分析

⭕⭕ 目 录 ⭕⭕

  • 一、全局变量使用说明
  • 二、全局变量的用法实例演示
    • 2.1 实例演示
    • 2.2 修改global

一、全局变量使用说明

全局变量是指在不同的工作空间以及基本的工作空间中可以共享的变量。用户只需要在主程序或者任何子程序中声明一个或多个全局变量,则函数和主程序中都可以直接引用它们,采用如下格式生成全局变量。

global v1 v2…vn

表达式中各变量之间用空格隔开。

使用全局变量时要注意以下几点。

(1) 它可以在主程序和函数之间不需要经过输入或输出变量直接传递数据。但要注意在函数调用中使用它们时,调用结束后全局变量在工作空间中仍然存在。

(2) 两个或多个函数也可以共有一个全局变量,只要同时在这些函数中用 global 语句加以定义即可。

(3) 使用全局变量时必须十分小心,最好把全局变量名取得长一些或全部用大写,以免与函数中的局部变量重名。如果重名,容易出现致命错误。可见,使用全局变量不是一个好的编程方法。

(4) 一旦变量被声明为全局的,则在任何声明它的地方都可以对它进行修改。这在一定程度上破坏了子程序的独立性。如果全局变量被多个子程序修改,则用户很难知道全局变量的确切值,这使得程序的可读性大大下降。

二、全局变量的用法实例演示

2.1 实例演示

子程序定义如下:

function x = global_test(t, D)
    global D %声明全局变量
    t(find(t == 0)) = eps; %防止分母出现0项
    x = sin(pi*t/D)./(pi*t/D);
end

命令窗口输入:

global D
D = 2;
b1 = -2;
b2 = 2;
t = b1 + [0:100]/100*(b2 - b1);

figure, plot(t,global_test(t))


本程序运行结果如图1所示:

在这里插入图片描述

图1 运行结果

2.2 修改global

function x = global_test(t, D)
    global D;                      %声明全局变量
    D=1
    t(find(t == 0)) = eps;           %防止分母出现0项
    x = sin(pi*t/D)./(pi*t/D);
end

global D
D = 2;
b1 = -2;
b2 = 2;
t = b1 + [0:100]/100*(b2 - b1);

figure, plot(t,global_test(t))

运行结果如下图所示:
在这里插入图片描述

图2 运行结果

如果在子程序global_test中修改全局变量的值,则变量声明时即对其进行赋值。例如,将global_test中的声明语句改为 global D, D=1 ,则运行后可得到如,2所示的结果。

显然,global_test中对全局变量的赋值覆盖了运行程序中的赋值,但这种修改在主程序中却不能得到反映。如果主程序和子程序不是同一个程序员编写,几乎很难找到结果与程序不符合的原因。不过,在使用全局变量时,MATLAB 会给出如下的警告信息,提示用户注意全局变量是否在其他地方被修改。

Warning: The value of local variables may have been changed to match the globals. Future versions of MATLAB will require that you declare a variable to be global before you use that variable.

这段警告信息是MATLAB在处理全局变量时给出的。它意味着在函数内部,如果存在与全局变量同名的局部变量,MATLAB可能会改变局部变量的值以匹配全局变量的值。为了避免潜在的混淆和错误,未来的MATLAB版本将要求在函数内部使用全局变量之前,必须先声明这些变量为全局变量。


http://www.kler.cn/a/465264.html

相关文章:

  • Unity3D仿星露谷物语开发16之角色拾取道具
  • 联发科MTK6771/MT6771安卓核心板规格参数介绍
  • Deepseek v3 的笔记
  • STM32 和 ESP32
  • 游戏如何检测iOS越狱
  • 吐卡机开发——指令合集—未来之窗行业应用跨平台架构
  • 前端-工具总结
  • 2025/1/1 路由期末复习作业二
  • 阿里云DDoS攻击后的恢复时间分析
  • ocp认证考试注意事项以及费用详情
  • JVM之后端编译
  • Elasticsearch及ELK使用(四):与数据库DB交互
  • VueRouter之props参数
  • dockerfile中su命令如何切换用户激活环境,报错su: invalid option -- ‘n‘
  • 【专题】2024年出口跨境电商促销趋势白皮书报告汇总PDF洞察(附原数据表)
  • coredns报错plugin/forward: no nameservers found
  • QT-------------多线程
  • checked 溢出问题
  • Javascript-web API-day04
  • canvas+fabric实现时间刻度尺(一)
  • 渗透Vulnhub-tr0ll靶机
  • 【开源社区openEuler实践】compass-ci
  • v-model响应式数据失效(能打印出来,但不渲染响应新数据)出现在异步操作或动态添加属性时赋值,使用 this.$set:
  • 比亚迪30亿教育慈善基金正式启动,助推中国科教进步
  • Go 如何优雅退出进程
  • mysql之组内排序ROW_NUMBER()函数