MATLAB GUI界面中我添加了WindowButtonMotionFcn,后来删除了此项m函数,但运行出错,这是哪里的问题?

fsum

这句话的意思是说输入参数为struct类型的函数或方法figure_wzttxcl_WindowButtonMotionFcn未定义,具体问题还得看你将原来的m_file_exit_Callback更改为如下程序:的代码,断点调试看看不就行了。

feval函数matlab feval函数MATLABfeval函数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()将符号变量转为函数,参考修改后的代码:

age

syms 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

matlab 符号积分和数值积分

并且,我们还需要在没有打开之前的“文件”下的“保存”和工具栏的“Se”按钮都不可用,只有点击“文件”下的“打开”或工具栏下的“打开”的时候,它们才可用。那么需要在pjimage_OpeningFcn中添加如下代码:

其实,你仔细观察一下会发现,用第二种方法得到xk表达式之后再subs代入的结果有这样的特点:

Text就会显示相应的值。在figure上双击打开figure(有方块的底层窗口)的属性窗口,将其Tag属性设置为“figure_im2bw”,将其Name属性设置为“设置图像二值化阈值”。然后,保存界面。运行时,如下:

1、大部分项的值都很小,量级在10^(-16),可以看作0;

file

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这样得到的结果就和种方法相同了。

MATLAB 求解微分方程的错误 不知道在哪

return;

看了看,运行了一下确实出问题

=5.jpg,pathname =C:Documents and SettingsAdministratohighrMy

原因是在用ode数值求解时,x并不是1:0.01:3均匀分散的

2.在用ode数值求解时设定分散点的个数,与x相同即可