慕课matlab学习 第六章-035 迭代法、 二分法、割线法 求解非线性方程

第六节-数值微分与方程求解

01-非线性方程组求解和最优化问题




% 第六节-数值微分与方程求解
% 01-非线性方程组求解和最优化问题

%  迭代法 二分法 割线法
%  (1)【单变量】非线性方程求解
%  函数的调用格式为:
%  x=fzero(filename,x0)
%  其中,filename是待求根方程左端的函数表达式,x0是初始值。

% eg 求 f(x)=x-1/x+5 在 x0=-5 和 x0=1 作为迭代初值时候的根
f=@(x)x-1./x+5;
x1=fzero(f,-5)
x2=fzero(f,1)
x3=fzero(f,0.1)
x=-5:0.1:5
y=f(x)          %匿名函数的使用及调用形式
plot(x,y)       %绘图
grid on         %打开网格


% 求 x^2-1=0 的根
f1=@(x) x.^2-1
x=[];
x0=-0.25:0.001:0.25
for x00=x0
    x=[x,fzero(f1,x00)];
end
figure(2)
plot(x0,x,'-o')
xlabel('初值')
ylabel('方程的根')
axis([-0.25,0.25,-1,1]) %搜索结果依赖于函数特性和指定的初值


% (2)非线性方程组的求解
% 函数的调用格式为:
% x=fsolve{filename,x0,option)
% 其中,x为返回的近似解,filename是待求根方程左端的函数表达式
% x0是初值,option用于设置优化工具箱的优化参数,可以调用optimset函数来完成。

x1=fsolve(f,-5,optimset('Display','off')) %返回x=-5的近似解
x2=fsolve(f,1,optimset('Display','off'))

% 求下列方程组在(111)附近的解,并对结果进行验证
% sinx +y+z^2 * e^x=0
% x+y+z=0
% xyz=0

f2=@(x)[sin(x1)+x(2)+x(3)^2*exp(x(1)), x(1)+x(2)+x(3),x(1)*x(2)*x(3)]
% 注:匿名函数共有3个函数,且有3个变量分别为x1,x2,x3.f2([1,1,1])
x2=fsolve(f2,[1,1,1],optimset('Display','off')) %求得在(111)处附近的解
f2(x2) %将求得的解带入方程中看下求出的结果和实际结果的差值(和0比较)






% 函数极值计算
% 极大值和极小值计算
% 在matlab中,只提供了求极小值计算方法
% 所以,我们要求f(x)极大值的时候,只需要求【-f(x)】的极小值的计算,这样就是求得f(x)得极大值


%求极小值分为两类 无约束最优化问题(在x[-∞,+]) 和 有约束最优化问题x[a,b]
%求最小值的函数
% [xmin ,fmin]=fminbnd(filename,x1,x2,option)   %求【一元】函数在x1到x2开区间中的极小值【点】xmin,和最小值fmin
% [xmin ,fmin]=fminsearch(filename,x0,option)   % 基于单纯性算法,求【多元】函数的极小值【点】xmin,和最小值fmin
% [xmin ,fmin]=fminunc(filename ,x0,option)     % 基于拟牛顿法【求多元】函数的极小值【点】xmin,和最小值fmin

% 其中,filename是定义的目标函数。第一个函数的输入变量【x1、x2】
% 分别表示被研究区间的【左、右】边界。后两个函数的输入变量【x0是一个向l量】
% 表示极值点的初值。option 为优化参数,可以通过optimset函数来设置。

% eg 求 f(x)=x-1/x+5 在 x0=-5 和 x0=1 在区间(-10-1)和(110)上的最小值点
f  %定义的函数 在14行中已经定义好

[xmin,fmin]=fminbnd(f,-10,-1);
xmin    % 打印 xmin 极小值【点】
fmin    % 打印 fmin 最小值

[xmin,fmin]=fminbnd(f,1,10);
xmin    % 打印 xmin 极小值【点】
fmin    % 打印 fmin 最小值


% 2、有约束最优化计算问题
%  f(x) 需要满足某种约束条件
%  线性不等式约束 线性等式约束  非线性不等式约束
%  非线性等式约束 x的上界和下界

% 有约束最优化问题
% 求有约束条件下最小值的函数为:
% [xmin,fmin]=fmincon(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)
% 其中,xmin、fmin、 filename、 x0和option的含 义与求最小值函数
% 相同。其余参数为约束条件,包括线性不等式约束、线性等式约束、
% x的下界和,上界以及定义非线性约束的函数。如果某个约束不存在,
% 则用空矩阵来表示。

% 求解有约束最优化问题
% f(x)=0.4*x2 +x1^2+x2^2-x1x2+1/30*x1^3 的极小值点 和最小值
% 约束条件 : x1+0.5x2 >=0.4
%             0.5x1+x2>=0.5
%             x1>=0 ,x2>=0
f3=@(x)0.4*x(2)+x(1)^2+x(2)^2-x(1)*x(2)+1/30*x(1)^3
x3=[0.5,0.5];
A=[-1,-0.5;-0.5,-1]
b=[-0.4;-0.5]
lb=[0;0]
option=optimset('Display','off')
[xmin,fmin]=fmincon(f3,x3,A,b,[],[],lb,[],[],optimset('Display','off')) 
% 在约束条件下求得极小值点 和最小值点




% (3)最小值问题应用实例
%5某公司有A、B、C、D、E5个工厂,分别位于xy平面.上的
% 坐标点(10, 10)(3050)( 16.667, 29) ,
% (0.55529.888)(22.222149.988)处。设两点之间的
% 距离表示在工厂2 间开车的距离, 以公里为单位。公司计划在
% 平面上某点处建造一-座仓库, 预期平均每周到A、B、 C、D、E
% 工厂分别有1018201425次送货。理想情况下,要使每.
% 周送货车的里程最小,仓库应建在xy平面的什么位置?


% 分析 :设仓库所选点的坐标为(x,y),则总里程表达式为:
% d=10((x-10^2+(y-10)^2^1/2 +18*((x-30^2+(y-50)^2^1/2 
%        +20((x-16.667^2+(y-29)^2^1/2 +14((x-0.555^2+(y-29.888)^2^1/2
%        +25((x-22.2221^2+(y-49.988)^2^1/2 
% 也就是说,求 d 在无约束条件下的最小值问题
a=[10,30,16.667,0.555,22.2221]  % a 表示工厂的横坐标
b=[10,50,29,29.888,49.988]      % b 表示工厂的纵坐标
c=[10,18,20,14,25]              % c 表示每个工厂送货的次数
d=@(x)sum(c.*sqrt((x(1)-a).^2+(x(2)-b).^2)) %距离函数 d
[xmin,dmin]=fminsearch(d,[15,30])  %求解最小值,在区间【1530】中,得到xmin 和 fmin
xmin  % 打印 x,y 的极小值坐标点位置
dmin  % 打印 d的最小值点


% 有约束条件下
% eg 由于地域条件的限制。仓库必须建在曲线 y=x^2 上,则应该建在何处
[xmin,fmin]=fmincon(d,[15,30],[],[],[],[],[],[],'funny') 
% 注:这个需要再次了解和学习一下



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值