求解和优化多项式样条

问题描述 投票:0回答:1

首先,我要感谢Mathematica社区。

我有这样一个系统:

s(x)=
  -2035.5111 + 561.33713 x -51.262777 x^2 + 1.5534175 x^3    x in [10, 11]
  -2035.5111 + 561.33713 x - 51.262777 x^2 + 1.5534175 x^3   x in [11, 12] 
   7158.3214 - 1737.121 x + 140.2754 x^2 - 3.7670874 x^3     x in [12, 13]
  -11037.276 +  2461.863 x - 182.72337 x^2 + 4.5149323 x^3   x in [13, 14]
   9375.4483 - 1912.2922 x + 129.71629 x^2 - 2.9241071 x^3   x in [14, 15]
  -38343.961 + 7035.097 x - 429.49554 x^2 + 8.7261392 x^3    x in [15, 16]
   45546.119 - 7769.0348 x + 441.33575 x^2 - 8.348984 x^3    x in [16, 17]
  -24547.41 + 3913.2201 x - 207.67842 x^2 + 3.6697968 x^3    x in [17, 18]
  -24547.41 + 3913.2201 x - 207.67842 x^2 + 3.6697968 x^3    x in [18, 19]

我怎样才能解决m <= s(x) <= M这个系统,mM并不是真的。

optimization wolfram-mathematica spline
1个回答
0
投票

你可以这样做

With[{m=4.5,M=5},
Map[Reduce[#,x]&,
{m<=-2035.5111 + 561.33713 x -51.262777 x^2 + 1.5534175 x^3<=M && 10<=x<=11,
 m<=-2035.5111 + 561.33713 x - 51.262777 x^2 + 1.5534175 x^3<=M && 11<=x<=12,
 m<=7158.3214 - 1737.121 x + 140.2754 x^2 - 3.7670874 x^3<=M && 12<=x<=13,
 m<=-11037.276 +  2461.863 x - 182.72337 x^2 + 4.5149323 x^3<=M && 13<=x<=14,
 m<=9375.4483 - 1912.2922 x + 129.71629 x^2 - 2.9241071 x^3<=M && 14<=x<=15,
 m<=-38343.961 + 7035.097 x - 429.49554 x^2 + 8.7261392 x^3<=M && 15<=x<=16,
 m<=45546.119 - 7769.0348 x + 441.33575 x^2 - 8.348984 x^3<=M && 16<=x<=17,
 m<=-24547.41 + 3913.2201 x - 207.67842 x^2 + 3.6697968 x^3<=M && 17<=x<=18,
 m<=-24547.41 + 3913.2201 x - 207.67842 x^2 + 3.6697968 x^3<=M && 18<=x<=19}
]]

哪个会给你这个

{x == 10. || 10.554622537850287<=x<=10.799264882501637,
 False,
 12.437932301023451<=x<=12.565380177021947,
 13.489415750912576<=x<=13.655683693607168,
 14.254978447526584<=x<=14.383489034636659,
 15.243856830113526<=x<=15.265292288384687,
 16.544981470615802<=x<=16.568935210200074,
 17.897288052000384<=x<=18.,
 18.<=x<=18.00034993487379 || 18.49992074750174<=x<=18.64596353629056}

其中每一行对应于零或多个解与s(x)中相应的方程对应。

您可以将该解决方案与此图表进行比较

Show[
Plot[Piecewise[{
{-2035.5111 + 561.33713 x -51.262777 x^2 + 1.5534175 x^3,10<=x<=11},
{ -2035.5111 + 561.33713 x - 51.262777 x^2 + 1.5534175 x^3,11<=x<=12},
{ 7158.3214 - 1737.121 x + 140.2754 x^2 - 3.7670874 x^3,12<=x<=13},
{ -11037.276 +  2461.863 x - 182.72337 x^2 + 4.5149323 x^3,13<=x<=14},
{ 9375.4483 - 1912.2922 x + 129.71629 x^2 - 2.9241071 x^3,14<=x<=15},
{ -38343.961 + 7035.097 x - 429.49554 x^2 + 8.7261392 x^3,15<=x<=16},
{ 45546.119 - 7769.0348 x + 441.33575 x^2 - 8.348984 x^3,16<=x<=17},
{ -24547.41 + 3913.2201 x - 207.67842 x^2 + 3.6697968 x^3,17<=x<=18},
{ -24547.41 + 3913.2201 x - 207.67842 x^2 + 3.6697968 x^3,18<=x<=19}}],{x,10,19}],
Plot[{4.5,5},{x,10,19}]
]

并查看y == 4.5和y == 5之间的段,它似乎匹配。

根据你想要做什么,有可能通过将Or@@放在With前面将所有这些变成一个单独的分离,并结合像

17.897288052000384 <= x <= 18. || 18. <= x <= 18.00034993487379

17.897288052000384 <= x <= 18.00034993487379

使用模式匹配替换。

这会显示有关Reduce的消息需要将您的十进制数转换为有理数以便能够使用适当的算法,但如果这些是唯一的消息,那么接受它们应该是安全的。应仔细观察所有消息。

仔细检查你的实际m和M,以确保这是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.