如何将功能与其他代码组合在一个.m(Matlab)中

时间:2018-02-13 04:15:24

标签: matlab function

clear all;
close all
clc

e = .25;
%fun = @find_root;
z = fzero(fun,1)
yy = z+.5^2*z/e-z^3/e

%=================================

function y = find_root(x)
    y1 = x+0.5^2*x/e-x^3/e;
    y = -e*x + e*y1 +.5^2*y1-y1^3 
end

如果我将上述代码的不同.m文件中的两个部分分开,它可以工作。但是,当我 将它们组合在一起,Matlab显示:

  

错误:文件:find_root.m行:11列:14   无法定义具有重复名称“find_root”的函数。

因为我想在for循环中将e从0设置为1,我不能以下列方式添加参数

z = fzero(fun(x,e),1)   

这就是我必须在一个.m文件中组合两个部分的原因。

如何解决?

1 个答案:

答案 0 :(得分:1)

好的,所以这里有一些问题。首先是你的错误:

  

错误:文件:find_root.m行:11列:14无法定义具有重复名称“find_root”的函数。

当您为文件指定与脚本中包含的函数相同的名称时,会导致此问题。我建议您将其更改为其他内容(例如calc_yy.m)。除此之外,您应该将函数定义为具有所需输入的函数句柄(fun = @(x)find_root(x,e);是一个带有输入x的函数句柄)。要注意的其他事项包括e作为函数的参数。如果在定义e和函数句柄function y = find_root(x,e)中没有包含fun = @(x)find_root(x,e);作为函数参数,那么之前定义的e将超出函数范围。以下代码对我来说效果很好(保存为test.m):

%% Script
clear all
close all
clc

e = .25;
fun = @(x)find_root(x,e);
z = fzero(fun,1);
yy = z+.5^2*z/e-z^3/e;

%% Functions
function y = find_root(x,e)
    y1 = x+0.5^2*x/e-x^3/e;
    y = -e*x + e*y1 +.5^2*y1-y1^3;
end

祝你未来的MATLAB工作顺利,不要为这样的错误感到愚蠢,我们都曾在某些方面做过这些错误!