如何在one.m fine(Matlab)中将函数与其他代码组合

如何在one.m fine(Matlab)中将函数与其他代码组合,matlab,function,Matlab,Function,如果我将上述代码的不同.m文件中的两个部分分开,它就可以工作。然而,当我 将它们组合在一起,Matlab显示: 错误:文件:find_root.m行:11列:14 无法定义具有重复名称find_root的函数 因为我想在for循环中将e从0设置为1,所以我不能按以下方式添加参数 clear all; close all clc e = .25; %fun = @find_root; z = fzero(fun,1) yy = z+.5^2*z/e-z^3/e %===============

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

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

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

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文件中


如何修复它

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

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

当您为文件指定与脚本中包含的函数相同的名称时,就会出现这种情况。我建议你换成别的东西,例如calc_yy.m。除此之外,您应该使用所需的输入fun=@xfind_rootx,e;是一个带有输入x的函数句柄。另外需要注意的是将e作为函数的参数。如果在定义函数y=find_rootx,e和函数handle fun=@xfind_rootx,e;,中未包含e作为函数参数;,那么您前面定义的e将超出函数的范围。以下代码对保存为test.m的我来说运行良好:

祝你在未来的MATLAB工作中好运,永远不要为这样的错误感到愚蠢,我们都曾在某些时候犯过这样的错误

z = fzero(fun(x,e),1)   
%% 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