当前位置:编程学习 > Matlab >>

matlab编程为什么出现这样的错误???? Strings passed to EVAL cannot contain function declarations.

clear all; close all; a=400; l=1000; k0=2*pi/l; n1=1.5; n2=1.6; neff=1.52; o=2*pi; b=k0*neff; u=a*((((k0^2)*(n1^2)-b^2))^(1/2)); w=a*((b^2-(k0*n2)^2)^(1/2)); s1=besselj(1,u); s2=besselj(1,u).*besselk(1,w.*i)./besselk(1,w); function y1=y1(r); y1=(s1).^2.*r; f1=quad(y1,0,400); function y2=y2(r); y2=(s1).*r; f2=quad(y2,0,400); g=2.*pi.*f1./f2; plot(r,g) 画不出图。
追问:
        	
				
r是积分函数的变量,在积分公式中取0::400,请问怎么为r事先赋值啊?.
还有就是将你改写的剧本函数执行后又出现了这样的错误:
??? y1=@(r)(s1).^2.*r;
        |
Error: "identifier" expected, "(" found.
请你帮忙下,谢谢。
clear all;
close all;
a=400;
l=1000;
k0=2*pi/l;
n1=1.5;
n2=1.6;
neff=1.52;
o=2*pi;
b=k0*neff;
u=a*((((k0^2)*(n1^2)-b^2))^(1/2));
w=a*((b^2-(k0*n2)^2)^(1/2));
s1=besselj(1,u);
s2=besselj(1,u).*besselk(1,w.*i)./besselk(1,w);
r=0:400;

 
y1=@(r)(s1).^2.*r;
f1=quad(y1,0,400);
y2=@(r)(s1).*r;
f2=quad(y2,0,400);
g=2.*pi.*abs(f1)./abs(f2);
plot(r,g)
 
这样是可以运行的,只是你的f1,f2积分限确定了,可就只是一个数了,
朝拜你啊兄弟,这么热心的帮我解决。可是我把程序复制下来在自己的电脑上运行,
怎么还是出现这样的错误呢:?
“??? y1=@(r)(s1).^2.*r;
        |
Error: "identifier" expected, "(" found.”
还是运行不了。
  我机器上没问题呀,你看下中间有没中文的标点符号
  y1=@(r)(s1).^2.*r;
  要是单独的一行
答案:首先,function 要在另外的m文件中定义,除非本文件开头也用function关键字定义为函数体,下面的function为其子函数。
其次,没为 r  赋值,就使用了。
再次,要注意g的值可能是复数呦。
 
解决方法,
(1)先为 r 赋值。
(2)
将
function y1=y1(r);
y1=(s1).^2.*r;
替换为句柄函数
y1=@(r)(s1).^2.*r;
将
function y2=y2(r);y2=(s1).*r;
替换为句柄函数 
y2=@(r)(s1).*r;
(3)如plot的并非复数,可用abs取模值

上一个:Matlab的简单编程问题?
下一个:matlab编程问题,下面是怎么回事啊

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,