matlab一直说我未定义函数或变量x怎么办?

% % 目标函数的确定
function [f]=objfun(x)
E1=210000;%材料弹簧模量
miu=0.3;%泊松比
rf=40.3;%分离轴承推力作用半径
aa=pi*E1.*x(2).*x(7)/(6*(1-miu.^2));
bb=log(x(3)./x(4))./(x(5)-x(6)).^2;
cc=x(1)-x(7).*(x(3)-x(4))./(x(5)-x(6));
dd=x(1)-0.5.*x(7).*(x(3)-x(4))./(x(5)-x(6));
ee=x(2).^2;
ff=(x(5)-x(6))./(x(6)-rf);% ff=(L1-l1)/(l1-rf)
% % % %磨损后的公式参数变化
ds=2;%磨损极限在1.6-2.2之间,取2mm
aa1=pi*E1.*x(2).*(x(7)-ds)/(6*(1-miu.^2));
bb=log(x(3)./x(4))./((x(5)-x(6)).^2);
cc1=x(1)-(x(7)-ds).*(x(3)-x(4))./(x(5)-x(6));
dd1=x(1)-0.5.*(x(7)-ds).*(x(3)-x(4))./(x(5)-x(6));
ee=x(2).^2;
% % % %分离过程公式参数变化
dt=3;%分离行程取值为3mm
aa2=pi*E1.*x(2).*(x(7)+dt)/(6*(1-miu.^2));
bb2=log(x(3)./x(4))./((x(5)-x(6)).*(x(5)-rf));
cc2=x(1)-(x(7)+dt).*(x(3)-x(4))./(x(5)-x(6));
dd2=x(1)-0.5.*(x(7)+dt).*(x(3)-x(4))./(x(5)-x(6));
ee=x(2).^2;
% % % % 双目标函数表达式
f1=abs(aa.*bb.*(cc.*dd+ee)-aa1.*bb.*(cc1.*dd1+ee));%第一个目标函数:磨损极限内正压力的变化值
f2=aa2.*bb2.*(cc2.*dd2+ee);%第二个目标函数:膜片弹簧在分离位置时的弹力
fac=0.6;%加权因子
f=fac.*f1+(1-fac)*f2;%总体目标函数

首先你这个函数写的是没问题,我感觉你的基础不足;

简单来说,你需要输入一个实参;

x=……

然后调用你的函数ovfun(x);

关于一些基本的教程,你可以关注个一匹大懒虫 里面有一些matlab基础视频教程


一般分为形参和实参;

形参 全称为形式参数,

一、函数中使用:

形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。

实参出现在主调函数中,进入被调函数后,实参变量也不能使用。

二、调用

形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

三、不是指针类型在内存中位置不同:

当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。

举例:

1. 比如你定义一个函数void add(int a, int b),这里的a和b就是形参。

2. 当你进行函数调用的时候,add(1, 2),这里的1和2就是实参。

这是c语言的举例,matlab也类似。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网