查看: 572|回复: 8|关注: 0
打印 上一主题 下一主题

广东十一选五开奖直播: [已解决] 利用隐函数迭代求解数列

[复制链接]

新手

16 麦片

财富积分


陕西十一选五计划 www.3vdvp.cn 050


6

主题

15

帖子

0

最佳答案
普通的迭代方程的形式常见为:
x(n+1)=f[x(n)]+b;
在编程过程中,上述方程的右端可以让我们很容易的定义一个新的以x(n)为自变量的函数如:
  1. function y=f(x)
  2. y=2*x+1;
  3. end
复制代码
这样循环代码就可以如:
  1. x(1)=0;
  2. for i=1:n
  3. x(i+1)=f(x(i));
  4. end
复制代码

但是当迭代方程为隐函数0=f(x(n),x(n+1))的时候却很难办,如:
  1. function y=f(x)
  2. y=abs(x(1)+x(2))-1;
  3. end
复制代码

如果我们只是简单地将上一次计算的结果当做下一次计算的猜测初始值:
  1. x(1)=0;
  2. for i=1:n
  3. sol=fsolve(@f,[x(i),0]);
  4. x(i+1)=sol(2);
  5. end
复制代码
但是那样是不准确的,fsolve左边同x(i+1)同时求解出的x(i)很可能和等式右边给定的初始猜解值x(i)是不一样的!

因此我需要将已知的x(i)带入隐函数f(x),使该隐函数消去一个变量x(i)二变成只关于x(i+1)的表达式,再使用fsolve求解,这样会更准确。但是这样每次fsolve的求解函数都会变,我应该怎样编程呢?

PS:该问题是从一个迭代最优的问题引申出的,为了理解简单,该问题需要用fmincon求解带等式约束的每一步的最优




论坛优秀回答者

权威

3183 麦片

财富积分



2

主题

3478

帖子

714

最佳答案
  • 关注者: 148
2#
发表于 2018-12-15 21:14:04 | 只看该作者 |此回复为最佳答案
本帖最后由 maple1314168 于 2018-12-15 21:21 编辑

1.你的代码有误:
  1. options = optimoptions('fsolve','Display','off');
  2. [email protected](x)abs(x(1)+x(2))-1;
  3. x(1)=0.2;n=10;
  4. for i=1:n
  5. x(i+1)=fsolve(@(t)f([x(i) t]),rand,options);
  6. end
复制代码

x =

  Columns 1 through 10

    0.2000    0.8000    0.2000    0.8000    0.2000    0.8000    0.2000    0.8000    0.2000    0.8000

  Column 11

    0.2000

这是正常的,在0.2,0.8摆动。
2.你的所谓隐函数,当然可能出现多个解。这也是很平常的。
就像上面的。x(1)+x(2)=-1的解都没有出现。因为初值(rand,改为-rand就不一样)。出现两个解的时候,你如何选择一个作下一个迭代?

新手

16 麦片

财富积分


050


6

主题

15

帖子

0

最佳答案
3#
 楼主| 发表于 2018-12-15 22:27:56 | 只看该作者
maple1314168 发表于 2018-12-15 21:14
1.你的代码有误:

x =

1上述使用fsolve的例子只是为了直观,我真正的目的是使用fmincon求取每一步的最优
2.再多个可行解中选取最优的那一组作为下一个迭代的起始点

论坛优秀回答者

权威

3183 麦片

财富积分



2

主题

3478

帖子

714

最佳答案
  • 关注者: 148
4#
发表于 2018-12-15 22:51:17 | 只看该作者
Stimmer 发表于 2018-12-15 22:27
1上述使用fsolve的例子只是为了直观,我真正的目的是使用fmincon求取每一步的最优
2.再多个可行解中选取 ...

1.你这样不是通常意义上的迭代。
你只是找一个符合等式的初值,但是fmincon本身会迭代,你能保证符合等式?
2.fmincon本身可以有等式约束。你这样不是多此一举?

新手

16 麦片

财富积分


050


6

主题

15

帖子

0

最佳答案
5#
 楼主| 发表于 2018-12-17 09:41:24 | 只看该作者
maple1314168 发表于 2018-12-15 22:51
1.你这样不是通常意义上的迭代。
你只是找一个符合等式的初值,但是fmincon本身会迭代,你能保证符合等式 ...

1.我确实不是要进行普通意义上的迭代,而是要进行类似MPC模型预测控制中的滚动优化过程,但是因为自己的模型特殊无法使用nlmpc函数所以我需要自己编写滚动优化过程
2.正因为我强制让隐函数内的Xn代换为常数,再求解等式中的X(n+1),这样的方法比处置搜索减少了不少多余的可行解

新手

16 麦片

财富积分


050


6

主题

15

帖子

0

最佳答案
6#
 楼主| 发表于 2018-12-17 10:30:36 | 只看该作者
maple1314168 发表于 2018-12-15 22:51
1.你这样不是通常意义上的迭代。
你只是找一个符合等式的初值,但是fmincon本身会迭代,你能保证符合等式 ...

另外,我实在查看matlab自带的MPC实例里面的代码的时候发现这种写法的:
  1. k = 1:Tsteps
  2.     % Obtain plant output measurements with sensor noise.
  3.     yk = xHistory(k,1:3)' + randn*0.01;
  4.     % Correct state estimation based on the measurements.
  5.     xk = correct(EKF, yk);
  6.     % Compute the control moves with reference previewing.
  7.     [uk,options] = nlmpcmove(nlobj_tracking,xk,lastMV,Xref(k:min(k+9,Tsteps),:),[],options);
  8.     % Predict the state for the next step.
  9.     predict(EKF,uk,Ts);
  10.     % Store the control move and update the last MV for the next step.
  11.     uHistory(k,:) = uk';
  12.     lastMV = uk;
  13.     % Update the real plant states for the next step by solving the
  14.     % continuous-time ODEs based on current states xk and input uk.
  15.     ODEFUN = @(t,xk) FlyingRobotStateFcn(xk,uk);
  16.     [TOUT,YOUT] = ode45(ODEFUN,[0 Ts], xHistory(k,:)');
  17.     % Store the state values.
  18.     xHistory(k+1,:) = YOUT(end,:);            
  19.     % Update the status bar.
  20.     waitbar(k/Tsteps, hbar);
  21. end
复制代码

很明显在计算ode45的前一行他把两个自变量的FlyingRobotStateFcn经过不知道怎么定义变成了一个自变量

新手

16 麦片

财富积分


050


6

主题

15

帖子

0

最佳答案
7#
 楼主| 发表于 2018-12-17 10:46:55 | 只看该作者
Stimmer 发表于 2018-12-17 10:30
另外,我实在查看matlab自带的MPC实例里面的代码的时候发现这种写法的:

很明显在计算ode45的前一行他把 ...

实例在此:
  1. openExample('mpc/PlanningControlFlyingRobotExample')
复制代码

新手

16 麦片

财富积分


050


6

主题

15

帖子

0

最佳答案
8#
 楼主| 发表于 2018-12-17 10:56:46 | 只看该作者
maple1314168 发表于 2018-12-15 22:51
1.你这样不是通常意义上的迭代。
你只是找一个符合等式的初值,但是fmincon本身会迭代,你能保证符合等式 ...

谢谢您,那个用匿名函数定义可变参数函数的帖子也是我写的,我明白了用隐函数迭代该怎么写了

论坛优秀回答者

权威

3183 麦片

财富积分



2

主题

3478

帖子

714

最佳答案
  • 关注者: 148
9#
发表于 2018-12-17 11:01:28 | 只看该作者
Stimmer 发表于 2018-12-17 10:56
谢谢您,那个用匿名函数定义可变参数函数的帖子也是我写的,我明白了用隐函数迭代该怎么写了 ...

OK。我可能不理解你的具体是什么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 陕西十一选五计划 返回列表
  • 重庆公安局交通管理信息网 2019-03-18
  • “黄金单身汉”英国哈里王子宣布订婚 2019-03-18
  • 图集:2018"一带一路"与澳门发展国际研讨会开幕 2019-03-18
  • “大功三连”指导员王金龙责无旁贷学习先行走在前列 2019-03-18
  • 这就是为什么金融危机发源地的美国,欧债危机重灾区的欧洲各国股市连续7年走牛,屡创历史新高,唯经济最好的中国股市却连续7年熊冠全球的根本原因, 2019-03-17
  • 艺术推手必备基本素养 2019-03-17
  • 【理上网来辉煌十九大】美国学者关注十九大报告:中国将形成新的共识继续推进改革 2019-03-17
  • 居民人均预期寿命又提高了 2019-03-17
  • 一种酵母菌会“投硬币”随机决定基因表达 2019-03-16
  • 乌鲁木齐确定今年实施“十大民生实事” 2019-03-16
  • 男子工作20年买不起房割腕自杀 称压力大扛不住[图] 2019-03-16
  • 第六届北京农业嘉年华--北京频道--人民网 2019-03-15
  • 记者带你逛CES:体验未来科技 2019-03-15
  • 虾仁怎么炒最下饭?答案是宫保-美食资讯 2019-03-14
  • 人人都能享用绿豆汤吗 关于绿豆汤的禁忌你得知道 2019-03-14
  • 706| 513| 626| 122| 266| 711| 831| 978| 394| 782|