你的错误在于for循环中的语句没有分号,那么每循环一次都会显示中间结果,建议加上分号,并在程序末尾加个无分号的a,意思是显示目前a的结果,具体如下:
a=[];
for i=1:5
a(i)=2i;
end
a
1fill函数用来填充离散点所围成的封闭区域。
例如要红色填充以下三点: D1[0,0],D2[1,0],D3[1,1]所围成的三角形(注:[]内为x、y坐标),
那么命令就是
X=[0,1,1]; %分别为三个点的x坐标
Y=[0,0,1]; %分别为三个点的y坐标
fill(X,Y,'r');
2fill(x,y,c) x和y是要画的点,可以同为向量或者同为矩阵
参数c是一个颜色向量,可用符号表示,如你给的'r',也可用[r,g,b]表示其中r,g,b的值都在0到1之间,比如说
t=0:005:2pi;
x=sin(t);
y=cos(t);
fill(x,y,'b');
代码倒是不难写,但上面的描述以及代码中有很多错误或疑问:
1、约束条件c(i)不应该再乘以加权系数w了吧?那样似乎约束条件很难满足。
2、约束条件的第13个以及目标函数的第13项,(Y-Yj)的指数为什么是884?
3、关于上限和下限的说法刚好是反的。
4、第一个约束条件里面少了个加号。
5、确定Dj的值都是20?
帮你重写了下:
function zddata = [
420 1677 347
700 1291 995
1120 177 455
350 1921 554
280 1995 1161
210 195 754
1260 1097 1095
350 1464 714
210 1981 492
140 1439 529
280 1878 664
700 1839 325
280 1563 5;
140 1405 786
210 651 1116
350 444 1341
];
W = data(:,1);
Xi = data(:,2);
Yi = data(:,3);
Dj = 20;
lb = [444,347];
ub = [1995,1341];
opt=optimset('MaxFunEvals',5e5,'MaxIter',1e5);
x=fmincon(@fun,(lb+ub)/2,[],[],[],[],lb,ub,@con,opt)
plot(Xi,Yi,'o',x(1),x(2),'p')
function f=fun(x)
f = sum(Wsqrt((x(1)-Xi)^2+(x(2)-Yi)^2));
end
function [c,ceq]= con (x)
c = sqrt((x(1)-Xi)^2+(x(2)-Yi)^2) - Dj;
ceq = [];
end
end
优化结果:
x =160444 62892
Matlab下输入:
>> x=1:5;
>> f1(x) %这里的x必须是参数传递,过去,可能你没有加x
另外,你的m文件中,可能有点小问题
我觉得应当是
f=a;
这样才能返回x(1)与x(2)的和形如:
function f=f1(x)
a=x(1)+x(2);
f=a;
Matlab 下调用
sumx=f1(x)
可以参考下面的代码:
>> t=0:01:2pi; >> x=10(t-sin(t));y=10(1-cos(t)); >> plot(x,y)
plot 函数常用格式为:
plot(x) 当x 为一向量时,以x 元素的值为纵坐标,x 的序号为横坐标值绘制
使用plot 函数之前,必须首先定义好曲线上每一点的x 及y 坐标。
扩展资料:
Matlab常用函数和命令
simget 获取SIMULINK模型设置的仿真参数
simple 寻找最短形式的符号解
simplify 符号计算中进行简化 *** 作
simset 对SIMULINK模型的仿真参数进行设置simulink 启动SIMULINK模块库浏览器
svds 求指定的若干奇异值
switch-case-otherwise 多分支结构
sym2poly 符号多项式转变为双精度多项式系数向量
-MATLAB
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)