国外最大的素材网站,建设网站的费用怎么做账,设计师一般放作品的网站,怎样用dw做新闻发布网站1. 求函数最优值
1.1求一元函数的最小值 如果给定了一个一元数学函数#xff0c;可以使用 fminbnd 函数求该函数在给定区间中的局部最小值。例如#xff0c;请考虑 MATLAB 提供的 humps.m 函数。下图显示了 humps 的图。 x -1:.01:2;
y humps(x);
plot(x,y)
xlabel(x)…1. 求函数最优值
1.1求一元函数的最小值 如果给定了一个一元数学函数可以使用 fminbnd 函数求该函数在给定区间中的局部最小值。例如请考虑 MATLAB® 提供的 humps.m 函数。下图显示了 humps 的图。 x -1:.01:2;
y humps(x);
plot(x,y)
xlabel(x)
ylabel(humps(x))
grid on 若要计算 humps 函数在 (0.3,1) 范围内的最小值请使用 x fminbnd(humps,0.3,1) x 0.6370 您可以通过使用 optimset 创建选项并将 Display 选项设置为 iter 来查看求解过程的详细信息。将所得选项传递给 fminbnd 。 options optimset(Display,iter);
x fminbnd(humps,0.3,1,options) Func-count x f(x) Procedure 1 0.567376 12.9098 initial 2 0.732624 13.7746 golden 3 0.465248 25.1714 golden 4 0.644416 11.2693 parabolic 5 0.6413 11.2583 parabolic 6 0.637618 11.2529 parabolic 7 0.636985 11.2528 parabolic 8 0.637019 11.2528 parabolic 9 0.637052 11.2528 parabolic Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 x 0.6370 这种迭代输出显示了 x 的当前值以及每次计算函数时 f(x) 处的函数值。对于 fminbnd一次函数计算对应一次算法迭代。最后一列显示 fminbnd 在每次迭代中使用的过程即黄金分割搜索或抛物线插值。。 1.2 求多元函数的最小值 fminsearch 函数与 fminbnd 类似不同之处在于前者处理多变量函数。请指定起始向量 x 0而非起始区间。 fminsearch 尝试返回一个向量 x该向量是数学函数在此起始向量附近的局部最小值。要尝试执行 fminsearch 请创建一个三元即 x 、 y 和 z 函数 three_var 。 function b three_var(v)
x v(1);
y v(2);
z v(3);
b x.^2 2.5*sin(y) - z^2*x^2*y^2; 现在使用 x -0.6 、 y -1.2 和 z 0.135 作为起始值求此函数的最小值。 v [-0.6,-1.2,0.135];
a fminsearch(three_var,v) a 0.0000 -1.5708 0.1803 1.3 求函数最大值 fminbnd 和 fminsearch 求解器尝试求目标函数的最小值。如果您有最大化问题即以下形式的问题 然后定义 g(x) –f(x)并对 g 取最小值。 例如要计算 tan(cos(x)) 在 x 5 附近的最大值请计算 [x fval] fminbnd((x)-tan(cos(x)),3,8) x 6.2832 fval -1.5574 最大值为 1.5574报告的 fval 的负值并出现在 x 6.2832。此答案是正确的因为最大值为 tan(1) 1.5574最多五位数该值出现在 x 2π 6.2832 位置。 1.4 fminsearch 算法 fminsearch 使用 Lagarias 等人的著作 [1] 中所述的 Nelder-Mead 单纯形算法。此算法对 n 维向量 x 使用 n 1 个点组成的单纯形。此算法首先向 x 0 添加各分量 x 0 (i) 的 5%以围绕初始估计值 x 0 生成一个单纯形。然后该算法使用上述 n 个向量作为单纯形的除 x 0 之外的元素。如果 x0 (i) 0则算法使用0.00025 作为分量 i。然后此算法按照以下过程反复修改单纯形。 注意 fminsearch 迭代输出方式中的关键字在相应的步骤说明后以 粗体 形式显示。 步骤1 用 x(i) 表示当前单纯形中的点列表 i 1,...,n 1。 步骤2 按最小函数值 f(x(1)) 到最大函数值 f(x(n 1)) 的顺序对单纯形中的点进行排序。在迭代的每个步骤 中此算法都会放弃当前的最差点 x(n 1) 并接受单纯形中的另一个点。[或者在下面的步骤 7 中此算法会更改值在 f(x(1)) 上方的所有 n 个点。] 步骤3 生成反射点 r 2m – x(n 1) (9-1) 其中 m Σx(i)/n, i 1...n (9-2) 并计算 f(r)。 步骤4 如果 f(x(1)) ≤ f(r) f(x(n))则接受 r 并终止此迭代。 反射 步骤5 如果 f(r) f(x(1))则计算延伸点 s s m 2(m – x(n 1)) (9-3) 并计算 f(s)。 a 如果 f(s) f(r)接受 s 并终止迭代。 扩展 b 否则接受 r 并终止迭代。 反射 步骤6 如果 f(r) ≥ f(x(n))则在 m 和 x(n 1) 或 r取目标函数值较低者之间执行收缩。 a 如果 f(r) f(x(n 1))即 r 优于 x(n 1)则计算 c m (r – m)/2 (9-4) 并计算 f(c)。如果 f(c) f(r)则接受 c 并终止迭代。 外收缩 否则继续执行步骤 7收缩。 b 如果 f(r) ≥ f(x(n 1))则计算 cc m (x(n 1) – m)/2 (9-5) 并计算 f(cc)。如果 f(cc) f(x(n 1))则接受 cc 并终止迭代。内收缩 否则继续执行步骤 7收缩。 步骤7 计算 n 点 v(i) x(1) (x(i) – x(1))/2 (9-6) 并计算 f(v(i))i 2,...,n 1。下一迭代中的单纯形为 x(1), v(2),...,v(n 1)。收缩 下图显示了 fminsearch 可在此过程中计算的点以及每种可能的新单纯形。原始单纯形采用粗体边框。迭代将在符合停止条件之前继续运行。 2.非线性函数的数据拟合 此示例说明如何使用非线性函数对数据进行拟合。在本示例中非线性函数是标准指数衰减曲线 y ( t ) A exp( − λt ), 其中y ( t ) 是时间 t 时的响应 A 和 λ 是要拟合的参数。对曲线进行拟合是指找出能够使误差平方和最小化的参数 A 和 λ ∑(i1→n) [y i − A exp( − λt i )]^ 2 , 其中时间为 t i 响应为 y i , i 1, …, n 。误差平方和为目标函数。 2.1 创建样本数据 通常您要通过测量获得数据。在此示例中请基于 A 40 和 λ 0 . 5 且带正态分布伪随机误差的模型创建人工数据。 rng default % for reproducibility
tdata 0:0.1:10;
ydata 40*exp(-0.5*tdata) randn(size(tdata)); 2.2 编写目标函数 编写一个函数该函数可接受参数 A 和 lambda 以及数据 tdata 和 ydata 并返回模型 y ( t ) 的误差平方和。将要优化的所有变量 A 和 lambda 置入单个向量变量 ( x)。 type sseval function sse sseval(x,tdata,ydata) A x(1); lambda x(2); sse sum((ydata - A*exp(-lambda*tdata)).^2); 将此目标函数保存为 MATLAB® 路径上名为 sseval.m 的文件。fminsearch 求解器适用于一个变量 x 的函数。但 sseval 函数包含三个变量。额外变量 tdata 和 ydata 不是要优化的变量而是用于优化的数据。将 fminsearch 的目标函数定义为仅含有一个变量 x 的函数 fun (x)sseval(x,tdata,ydata); 有关包括额外参数例如 tdata 和 ydata 的信息请参阅“参数化函数” 。 2.3 求最优拟合参数 从随机正参数集 x0 开始使用 fminsearch 求使得目标函数值最小的参数。 x0 rand(2,1);
bestx fminsearch(fun,x0) bestx 2×1 40.6877 0.4984 结果 bestx 与生成数据的参数 A 40 和 lambda 0.5 相当接近。 2.4 检查拟合质量 要检查拟合质量请绘制数据和生成的拟合响应曲线。根据返回的模型参数创建响应曲线。 A bestx(1);
lambda bestx(2);
yfit A*exp(-lambda*tdata);
plot(tdata,ydata,*);
hold on
plot(tdata,yfit,r);
xlabel(tdata)
ylabel(Response Data and Curve)
title(Data and Best Fitting Exponential Curve)
legend(Data,Fitted Curve)
hold off