feval函数matlab feval函数MATLAB
MATLAB GUI界面中我添加了WindowButtonMotionFcn,后来删除了此项m函数,但运行出错,这是哪里的问题?
fsum这句话的意思是说输入参数为struct类型的函数或方法figure_wzttxcl_WindowButtonMotionFcn未定义,具体问题还得看你将原来的m_file_exit_Callback更改为如下程序:的代码,断点调试看看不就行了。
feval函数matlab feval函数MATLAB
feval函数matlab feval函数MATLAB
feval函数matlab feval函数MATLAB
feval函数matlab feval函数MATLAB
那说明,我们保存的.fig文件的目录不是当前目录,但是没关系啊,我们只要点击“Change
MATLAB如何定义函数
setappdata(handles.figure_pjimage,'fstSe',true);自定义函数的途径:
@cos}M文件函数(M
function)
在线函数(Inline
Function)
1.M文件函数范例function
%这里可以写函数的使用说明,前面以%开头
%在工作区中,
myadd将显示此处的说明c=a+b;%end
%非function:必须的
行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。
调用方式:在Matlab命令符后输入a=1;b=2;c=myadd(a,b)
关于m文件定义函数还有许多的说明,暂时略去。。。
2.在线函数(Inline
Function)
通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。
在线函数从字符串表达式创建函数,例如:
f=inline('x.^2','x');
创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2
34])计算在x=2
34时的值
f=inline('x+y','x','y')
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。
函数句柄=@(变量名)
函数表达式例如:f=@(x)
x.^2
定义了函数f(x)=x^2,f(2)计算在x=2处的值。
f(2)
%计算时引用了变量aa=0;f(2)
%仍然引用的是a=2
f=@sin
%f(x)=sin(x)
f(pi/2)
%sin(pi/2)
functions(f)
%查看函数信息
利用单元数组可以创建多个函数的句柄,例如
f={@sin
f{1}(pi/2)
%计算sin(pi/2)
函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。
新建一个m文件
在m文件里面行输入function
[X,Y]=pll(X1,Y1,X2,Y2),这里x1
x2
y1
y2是你函知数的输入值,
xy是输出值,接着定义你要实现的功能,比如:x
=x1
+x2;
y=
y1
+y2;
接着保存这个m文件道,注意!!
这个m文件的名字必须是定义的函数的名字,即保存为回pll.m
pll(1,2,3,4)看看会得到什么?答
也可以另外创建一个m文件,在这里调用pll()这个函数。
matlab
中的函数参数个数,是你自己在函数中定义的啊,跟你函数里要调用的外部变量的个数相同。
主函数:
clc;clear;
=0;
%a表示性别,1
表示男,0表示女
=11;
%b表示岁数
kid(,age);
function
=kid(a,b)
%计算10到15岁小孩身高
if(b>=10
&&
b<=15)
if
(a
==
1)
=b0.1;
fprintf('the
height
of
the
boy
is
%1.3f
mn',high);
(a
==
0);
=b0.105;
fprintf('the
height
of
the
girl
is
%1.3f
mn',high);
fprintf('out
of
rangen');
end
fprintf('out
of
rangen');
end
当这个函数被其他函数调用时,这个错误不会出现;这个错误出现的原因在于程序运行时,没有作为x和xdata赋值。
如果在另一个函数里调用,如
function
f1
b=malthus([3
2],[3
2])
function
f=malthus(
x,xdata)
f=exp(x(1)+xdata.x(2))
end
end
matlab函数定义
fX1=max(fxb)-fX;M文件函数(M file function)
4 x0=[0.3;1;0.6;2pi/3;];初始值x0应该是列向量匿名函数(Anonymous Function)
1.M文件函数
范例
function c=myadd(a,b)
%这里可以写函数的使用说明,前面以%开头
%在工作区中, myadd将显示此处的说明
c=a+b;
%end %非必须的
行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。
调用方式:
在Matlab命令符后输入
a=1;b=2;
关于m文件定义函数还有许多的说明,暂时略去。。。
通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。
在线函数从字符串表达式创建函数,例如:
f=inline('x.^2','x');
创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值
f=inline('x+y','x','y')
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。
3.匿名函数(Anonymous Function)
匿名函数使用函数句柄来表示匿名函数,定义形式为
函数句柄=@(变量名) 函数表达式
定义了函数f(x)=x^2,f(2)计算在x=2处的值。否则会出错。
匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如
a=2;
f=@(x) x.^2+a
f(2) %计算时引用了变量a
a=0;
f(2) %仍然引用的是a=2
匿名函数也可以由Matlab的内置函数或M文件函数创建,例如
f=@sin %f(x)=sin(x)
f(pi/2) %sin(pi/2)
functions(f) %查看函数信息
利用单元数组可以创建多个函数的句柄,例如
f{1}(pi/2) %计算sin(pi/2)
f{2}(pi) %计算cos(pi)
函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。
Matlab 7以后,建议以匿名函数取代在线函数!!!
Matlab中函数文件中输入变量的问题,请高手赐教。
把P也做成函数变量
function F=myfun(u)
x(1)=u(1);
x(2)=u(2);
c=myadd(a,b)P=u(3);
F=[x(1)+x(2)-1-P;
elseifx(1)-x(2)-P];
for P=1:10
x0 = [-6;-5];
x = fsolve(@myfun,[x0(1),x0(2),P]) %使用fsolve 函数求解方程,opti那么如何来保存一副?用imwrite命令。但imwrite命令的个参数就是你读入的数据,也就是imread的返回值。这样的话,我们就要将m_file_open_Callback中的程序做一点小小的改动。将一句(imshow(imread(fpath))),更改为两句,如下:img_src="/uploads/b679952b17ff7ce7ad207fc320bbc131.png" data-original=imread(fpath);imshow(img_src);ons默认,等价形式还可以写成x-fosolve('myfun',x0)
end
matlab函数定义
在线函数(Inline Function)M文件函数(M file function)
setappdata(handles.figure_pjimage,'fstSe',false);匿名函数(Anonymous Function)
1.M文件函数
范例
function c=myadd(a,b)
%这里可以写函数的使用说明,前面以%开头
%在工作区中, myadd将显示此处的说明
c=a+b;
%end %非必须的
行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。
调用方式:
在Matlab命令符后输入
a=1;b=2;
关于m文件定义函数还有许多的说明,暂时略去。。。
通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。
在线函数从字符串表达式创建函数,例如:
f=inline('x.^2','x');
创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值
f=inline('x+y','x','y')
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。
3.匿名函数(Anonymous Function)
匿名函数使用函数句柄来表示匿名函数,定义形式为
函数句柄=@(变量名) 函数表达式
定义了函数f(x)=x^2,f(2)计算在x=2处的值。
匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如
a=2;
f=@(x) x.^2+a
f(2) %计算时引用了变量a
a=0;
f(2f={@sin @cos}) %仍然引用的是a=2
匿名函数也可以由Matlab的内置函数或M文件函数创建,例如
f=@sin %f(x)=sin(x)
f(pi/2) %sin(pi/2)
functions(f) %查看函数信息
利用单元数组可以创建多个函数的句柄,例如
f{1}(pi/2) %计算sin(pi/2)
f{2}(pi) %计算cos(pi)
函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。
Matlab 7以后,建议以匿名函数取代在线函数!!!
Matlab运行后出现If FUN is a MATLAB object, it must he an feval mod.求大神解答问题出在哪里了?
{'.bmp;.jpg;.png;.jpeg', 'Image Files (.bmp,s1=quad((r^2+r1^2)^0.5,0,x) 这一行 quad是数值积分函数,要求个参数为函数句柄,而不是符号变量,可以使用matlabFunction()将符号变量转为函数,参考修改后的代码:
agesyms x r r1 r2 k s1 s xd yd u l x1 y1
m=2就不会有问题,当调试函数malthus时,可在函数内暂时声明与输入变量同名的变量,并为之赋值,调试结束后删掉0;
r=280/(1+(cos(x)/3));
r1=diff(r,x,1);
r2=r/r1;
for k=1:3
x=kpi/31;
s1=quad(matlabFunction((r^2+r1^2)^0.5),0,x)
s=s1-(k-1)pim;
xd=(s-pim/4)(cosd(20))^2;
yd=-0.5(s-pim/4)sind(40);
u=atan(r/r1);
l=pi-u-x;
x1=xdcos(l)+ydsin(l)+r1cos(x);
y1=-xdsin(l)+ydcos(l)+r1sin(x);
end
matlab中GA对多参数优化问题
这样的话,保存项就没有了快捷键了。我们可以通过上面的按钮“View”来查看该菜单项的响应函数,也就是Callback函数。也可以在pjimage.m中看,比如保存的Tag属性是m_file_se,那么它对应的Callback函数的名字就是m_file_se_Callback。依次类推了。遗传算法GA求解无约束化问题,采用遗传算法求函数的最小值:
在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。函数如下:
f=inline('x(1)^4-16x(1)^2-5x(1)x(2)+x(2)^4-16x(2)^2-5x(2)','x');
l=[函数kid:-5 -5];
u=[5 5];
Np=30;
Nb=[12 12];
Pc=0.5;
Pm=0.01;
eta=0.8;
kmax=200;
[xos,fos]=fminsearch(f,x0)
[xo_gen,fo_gen]=genetic(f,x0,l,u,Np,Nb,Pc,Pm,eta,kmax)
其中调用的遗传算法函数为如下几个
genetic函数
function [xo,fo]=genetic(f,x0,l,u,Np,Nb,Pc,Pm,eta,kmax)
N=length(x0);
if nargin<10,kmax=100;end
if nargin<9|eta>1|eta<=0,eta=1;end
if nargin<8,Pm=0.01;end
if nargin<7,Pc=0.5;end
if nargin<6,Nb=8ones(1,N);end
if nargin<5,Np=10;end
NNb=sum(Nb);
xo=x0(:)';l=l(:)';u=u(:)';
fo=feval(f,xo);
for n=2:Np,X(n,:)=1+rand(size(x0)).(u-1);
P=gen_encode(X,Nb,l,u);
for k=1:kmax
for n=1:Np,fX(n)=feval(f,X(n,:));end
[fxb,nb]=min(fX);
if fxb fXm=fX1(nb); if fXm for n=1:Np X(n,:)=X(n,:)+eta(fXm-fX1(n))/fXm(X(nb,:)-X(n,:)); end 其实,你仔细观察一下会发现,用第二种方法得到xk表达式之后再subs代入的结果有这样的特点: 1、大部分项的值都很小,量级在10^(-16),可以看作0; 2、对应于种方法得到的非零项的结果是Inf或NaN。 这有两个原因: 2、第2种情况是因为,求出的xk表达式中,分母有因式(k^4 - 5k^2 + 4),也就是对于k=±2,±1来说会出现被0除的情况。 解决这个问题可以用极限: syms t k xk1=int((cos(2pit)+sin(4pit))exp(-i2pikt),t,-0.5,0.5); K=-10:1:10; for ii=1:length(K) xk2(ii)=limit(xk1,k,K(ii)); end这样得到的结果就和种方法相同了。 看了看,运行了一下确实出问题 原因是在用ode数值求解时,x并不是1:0.01:3均匀分散的 2.在用ode数值求解时设定分散点的个数,与x相同即可matlab 符号积分和数值积分
并且,我们还需要在没有打开之前的“文件”下的“保存”和工具栏的“Se”按钮都不可用,只有点击“文件”下的“打开”或工具栏下的“打开”的时候,它们才可用。那么需要在pjimage_OpeningFcn中添加如下代码:MATLAB 求解微分方程的错误 不知道在哪
return;
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。