将.M文件中的值链接到.MAT文件

时间:2010-12-17 14:08:08

标签: matlab

我正在用MATLAB编写一个程序来解决积分,我的函数在.M文件中。现在我想知道如何在.MAT文件中编写程序,让用户设置两个文件中都存在的值。 .M文件如下所示:

function fh = f(y)
fh = 62.5.*(b-y).*(40-20.*exp(-(0.01.*y).*(0.01.*y)));

如您所见,该函数取决于两个变量y和b。我希望用户设置b。我尝试在.M文件中输入b = input('输入b:'的值),但由于某种原因,用户必须输入相同的值四次。
我可以在.MAT文件中询问b的值吗?

2 个答案:

答案 0 :(得分:2)

首先,m文件存储代码(即函数),而MAT文件存储数据(即变量)。您可以使用函数SAVE将工作空间变量保存到MAT文件,并使用函数LOAD将它们从文件加载到工作空间中。如果您有一个用户选择b的值,然后将其保存到MAT文件(例如'b_value.mat'),您可以简单地从您的m文件中加载MAT文件中的值功能如下:

function fh = f(y)
  load('b_value.mat','b');
  fh = 62.5.*(b-y).*(40-20.*exp(-(0.01.*y).*(0.01.*y)));

但是,这不是一个很好的方法来处理我认为你遇到的更大的问题。它要求您在函数f中对MAT文件的名称进行硬编码,如果文件不存在或文件中不存在b,则会给出错误。

让我们解决一下我认为更大的潜在问题,以及如何更好地解决问题......

您提到您正在解决积分问题,这可能意味着您正在使用numerical integration中的一个或多个执行various built-in integration functions,例如QUAD。正如您所注意到的,使用这些函数需要您为被积函数提供一个函数,该函数接受单个向量参数并返回单个向量参数。

在您的情况下,您还有其他要传递给函数的附加参数,这很复杂,因为集成函数只接受具有单个输入参数的被积函数。 QUAD(以及其他集成函数)的文档中实际上有一个链接,通过使用parameterize the integrand function或{nested functions向您展示了anonymous functions的几种方法,而无需添加额外的输入参数{3}}

作为一个例子,我将通过将f编写为匿名函数而不是m文件函数来向您展示如何执行此操作。首先,您将让用户选择参数b,然后您将构建您的匿名函数,如下所示:

b = input('Type in the value of b: ');
f = @(y) 62.5.*(b-y).*(40-20.*exp(-(0.01.*y).^2));

请注意,匿名函数使用的b的值将固定为创建函数时的值。如果稍后更改了b,则需要重新创建匿名函数,以便它使用新值。

以下是如何在调用QUAD时使用f的示例:

q = quad(f,lowerLimit,upperLimit);

答案 1 :(得分:0)

在你的m文件中,将b声明为全局

function fh = f(y) 
    global b
    fh = 62.5.(b-y).(40-20.*exp(-(0.01.y).(0.01.*y)));

这允许从另一个文件访问变量,而不必创建另一个函数来设置b的值。您还可以将b添加到fh函数的参数中。