Matlab如何在定义函数过程中使用外部的变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab如何在定义函数过程中使用外部的变量?相关的知识,希望对你有一定的参考价值。

举个例子:
首先我定义y=[y1,y2],其中y1,y2可以是任意的数字,比如说y=[1,1]吧

然后我函数的M文件是:
function f=gg(x)
f=x(1)*y(1)+x(2)*y(2)
end

然后我代入a=[a1,a2],比如a=[1,3],我输入gg(a),最终提示为:y没有定义。

所以想请教大神,如果我要根据y的同作出不同的gg(x),比如说对1000个y作出1000个x,那么我怎么在函数的M文件中导入外部变量y呢?

别跟我说用匿名函数做,我上面的gg(x)只是举个例子,在实际中可能会用到高维函数,匿名函数根本不可能一个一个变量手动输入的。
我已经知道了,函数应该这样写
function f=gg(x)
global y;
f=x(1)*y(1)+x(2)*y(2);
end

然后主程序这样就可以了
global y
y=[1 1];
a=[1 3];
f(a)
就可以了

1、首先,打开matlab的程序软件。

2、接着,我们新建一个函数文件。

3、定义一个函数,通过function函数,做一个简单求幂次运算的函数。

4、将编写的函数文件保存,使其命名的函数名字与文件保存的名字保持一致。

5、保存之后,我们就可以调用这个定义的幂次函数,求4的8次幂和2的3次幂。

注意事项:

MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

参考技术A

使用全局变量是一种思路,另外还有一种更可取的做法是用嵌套函数(Nested Function)。

全局变量在小型应用中不失为一种简单有效的做法,但在规模稍大的代码里一般是不提倡的,尤其是多人协作的情况下,存在隐患。


大致的代码结构如下:

function main
y=[1 1];
a=[1 3];
f(a)

    function f=gg(x)
        f=x(1)*y(1)+x(2)*y(2);
    end
end

本回答被提问者和网友采纳
参考技术B global是个好方法,学习了,谢谢! 参考技术C 直接sum(x.*y,2)

matlab 如何保留变量值

现有两个函数,分别叫kuandu和chineselisan。函数chineselisan经过计算得到一个EucDist值,函数kuandu调用函数chineselisan就可以得到多个EucDist值。
要求:如何保留函数kuandu调用函数chineselisan所得到的每一个EucDist值,请给出集体程序,谢谢!

  在使用matlab时,通常要将计算的结果保存到mat文件中。使用的命令是: save filename
  但是用上述命令保存的时候,会将计算过程中的其他变量一起保存了。这中粗糙的保存有以下缺点:
  (1)不需要的数据信息保存到mat文件中,导致mat文件过大;
  (2)下次load这个mat文件时,会显示出其他不需要的数据,占用系统内存。
  因此,在保存数据时,应保存有用的数据变量。
  处理方式:
  (1)先删除变量,再保存
  例如变量a,b,c,d,e,f,g,需要保留a,e,f的值,可以采用命令:clear b c d; 然后save filename
  【适用情况】冗余变量不多的情况,保存的变量较多。
  (2)保存时,指定保存的变量
  例如变量a,b,c,d,……几十几百个变量,需要保留a的值,可以采用命令:save filename a

  【适用情况】冗余变量非常多,保存的变量较少。
参考技术A 可能是因为函数kuandu调用函数chineselisan的时候,上次调用的结果都被下次调用的结果覆盖了。结果被存在同一个变量中了。我们只要将每一个函数chineselisan返回的结果存在数组中就可以了,例如:
i=1:n;
x(i)=chineselisan( 参数 );
或者直接将结果在命令窗口中输出来,即把‘ ;’去掉就可以了本回答被提问者采纳
参考技术B 因为函数是单调的,可以利用二分法来做,给定一个x的初始值,求出f(x),比较这个f(x)与已知f(x)数值的大小,
然后取x/2,再次求出f(x)并比较大小,这样就可以确定出已知f(x)的自变量x取值范围是在0-x/2还是在x/2-x之间,然后再取x/4或者3x/4,求取f(x)值与已知f值比较,知道达到你所要求的精度就可以结束了,这样这个x值实际上是无限的靠近真实解。
不知道看明白了没有。
参考技术C 用save filename var
将工作区变量var保存在filename.mat中
读取用load

以上是关于Matlab如何在定义函数过程中使用外部的变量?的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB - 持久变量

matlab global定义全局变量的问题

Matlab中持久变量的初始化

matlab 如何输入若干个 参数变量保存到矩阵中

在matlab中如何根据拟合图得到函数?

自动化测试时需要使用python,请问如何理解python中的全局变量和局部变量?