|
把下面的程序给你参考一下,逻辑上没有什么问题,现在最关键的问题在于fminunc这个函数的使用上。
对于这类我通常是采用inline来解决的,不知道有没有高人有其他更好的方法。我一直对函数句柄理解的不是很明白,不知道函数句柄到底能不能解决这个问题。
clc;clear;
l=[10.023 7.081 0.023 -7.031 -10.061 -7.073 0 7.031 20.024 14.144 0.003 -14.147 -20.002 -14.145 0.002 14.133 30.004 21.213 0.002 -21.217 -30.001 -21.212 0.003 21.217 40.001 28.284 0.002 -28.279 -40.002 -28.28 0.002 28.283 50.002 35.355 0.003 -35.357 -50.001 -35.356 0.002 35.358];
m=[0.012 7.071 10.03 7.085 0.003 -7.081 -10.034 -7.074 0.081 14.101 20.002 14.138 0.001 -14.122 -20.001 -14.147 0.003 21.215 30.002 21.218 0.002 -21.221 -30.001 -21.225 0.005 28.287 40.005 28.283 0.001 -28.283 -40.003 -28.278 0.002 35.356 50.005 35.355 0.003 -35.354 -50.003 -35.359];
n=[100.02 100.003 100.013 100.005 100.001 100.027 100.007 100.045 400.037 400.004 400.003 400.001 400.01 400.011 400.003 400.001 900.003 900.002 900.004 900.001 900.006 900.009 900.003 900.005 1600.005 1600.004 1600.001 1600.004 1600.002 1600.007 1600.01 1600.001 2500.007 2500.001 2500.008 2500.002 2500.004 2500.003 2500.005 2500.001];
tem_v=[];
x0=[0,0];
k=1;
result=[];
result_fval=[];
for k=1:40
x=sym('[x(1),x(2)]');
r=sqrt((l(k)-x(1)*cos(x(2)))^2+(m(k)-x(1)*sin(x(2)))^2+(n(k)-x(1)^2)^2);
f=inline(r);
x0=[0,0];
[x,fval]=fminunc(f,x0);
result(k,:)=x;
result_fval(k,:)=fval;
end
distance=max(result_fval)-min(result_fval);
disp(distance); |
评分
-
1
查看全部评分
-
|