求matlab大神帮忙!!非常感谢!!
下面是一段matlab代码,运行时总是出现Error:TheinputcharacterisnotvalidinMATLABstatementsorexpressions...
下面是一段matlab代码,运行时总是出现Error: The input character is not valid in MATLAB statements or expressions.
代码如下:
n=100;
width=20;
height=20;
r=5;
x=rand(n,1)*width;
y=rand(n,1)*height;
base1=width;
base2=width;
d=ones(n,n);
s=[];
T=ones(n,1);
crossarea=0;
area=[];
syms d0 d1 allarea areapercent
for i=1:n
for j=1:n
d(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);
end
end
for i=1:n
d0=sqrt((x(i)-width/2)^2+(y(i)-height)^2);
if d0<base1
base1=d0;
a1=i;
end
end
s=[s,a1];
T(a1)=0;
for i=1:n
if T(i)==1
d1=abs(distance(x(i),y(i),x(a1),y(a1))-sqrt(3));
if d1<base2
base2=d1;
a2=i;
end
end
end
s=[s,a2];
T(a2)=0;
area(1)=2*(rad^2*arccos(d(a1,a2)/(2*rad))-d(a1,a2)*sqrt(rad^2-d(a1,a2)^2/4)/2); while (length(s)*pi*r^2-area)>=height*width
sl=length(s);
count=[];
area2=[];
for i=1:n
area1=0;
if T(i)==1
for j=1:sl
if d(i,j)<2*r
area3=2*(rad^2*arccos(d(i,j)/(2*rad))-d(i,j)*sqrt(rad^2-d(i,j)^2/4)/2);
area1=area1+area3;
end
end
end
if area1~=0
count=[count,i]';
end
area2=[area2,area1]';
end
[V,Ind]=min(area2);
area=[area',V'];
s=[s',count(Ind)]';
T(count(Ind))=0;
end
for i=1:length(area)
crossarea=crossarea+area(i);
end
allarea=pi*r^2*length(s)-crossarea;
areapercent=allarea/(width*height);
pointpercent=length(s)/n;
plot(x,y,s);
背景是:有两个集合T和S,T有n个点,s为空集,目标是要找出T中符合条件的点加入集合s中,T和s保存的都是点的序号(共有n个点)。相当于把T中的点剪切到了s中。。求帮助!! 展开
代码如下:
n=100;
width=20;
height=20;
r=5;
x=rand(n,1)*width;
y=rand(n,1)*height;
base1=width;
base2=width;
d=ones(n,n);
s=[];
T=ones(n,1);
crossarea=0;
area=[];
syms d0 d1 allarea areapercent
for i=1:n
for j=1:n
d(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);
end
end
for i=1:n
d0=sqrt((x(i)-width/2)^2+(y(i)-height)^2);
if d0<base1
base1=d0;
a1=i;
end
end
s=[s,a1];
T(a1)=0;
for i=1:n
if T(i)==1
d1=abs(distance(x(i),y(i),x(a1),y(a1))-sqrt(3));
if d1<base2
base2=d1;
a2=i;
end
end
end
s=[s,a2];
T(a2)=0;
area(1)=2*(rad^2*arccos(d(a1,a2)/(2*rad))-d(a1,a2)*sqrt(rad^2-d(a1,a2)^2/4)/2); while (length(s)*pi*r^2-area)>=height*width
sl=length(s);
count=[];
area2=[];
for i=1:n
area1=0;
if T(i)==1
for j=1:sl
if d(i,j)<2*r
area3=2*(rad^2*arccos(d(i,j)/(2*rad))-d(i,j)*sqrt(rad^2-d(i,j)^2/4)/2);
area1=area1+area3;
end
end
end
if area1~=0
count=[count,i]';
end
area2=[area2,area1]';
end
[V,Ind]=min(area2);
area=[area',V'];
s=[s',count(Ind)]';
T(count(Ind))=0;
end
for i=1:length(area)
crossarea=crossarea+area(i);
end
allarea=pi*r^2*length(s)-crossarea;
areapercent=allarea/(width*height);
pointpercent=length(s)/n;
plot(x,y,s);
背景是:有两个集合T和S,T有n个点,s为空集,目标是要找出T中符合条件的点加入集合s中,T和s保存的都是点的序号(共有n个点)。相当于把T中的点剪切到了s中。。求帮助!! 展开
2个回答
展开全部
错误报告提示的是哪个变量或函数出错?你跟据它的提示找出来,看是不是拼写错误。
追问
没有提示哪个函数或变量出错,求大神帮忙!!
追答
刚才用你的程序运行了一下,改了两个地方:
一是arccos(),matlab里不是这样用的,应该是acos()。
二是plot()的用法不当,第三个参数应是点的属性,如颜色、字体、形状、大小等。所以建议改成plot(x,y,'O');O表示画圈,比较大,看起来清楚。
如果需要的话,还可以加上每个点的序号,方便你识别它们。
plot(x,y,'o');hold on
for i=1:size(s,2)
plot(x(s(i)),y(s(i)),'+');hold on
ezplot(@(x1,y1)(x1-x(s(i))).^2+(y1-y(s(i))).^2-25,[0,20]);hold on%画圆
text(x(s(i)),y(s(i)),num2str(s(i)));
end
希望对你有帮助。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询