python - 如何找到三个参数以最佳方式将曲线拟合到python中的另一条曲线中?

如何解决python - 如何找到三个参数以最佳方式将曲线拟合到python中的另一条曲线中?

我有两个数据集 (t1,y1) 和 (t2,y2),它们在绘制时会给出各自的曲线。

以下是我的数据:

t1 = [-2.,-1.6877551,-1.3755102,-1.06326531,-0.75102041,-0.43877551,-0.12653061,0.18571429,0.49795918,0.81020408,1.12244898,1.43469388,1.74693878,2.05918367,2.37142857,2.68367347,2.99591837,3.30816327,3.62040816,3.93265306,4.24489796,4.55714286,4.86938776,5.18163265,5.49387755,5.80612245,6.11836735,6.43061224,6.74285714,7.05510204,7.36734694,7.67959184,7.99183673,8.30408163,8.61632653,8.92857143,9.24081633,9.55306122,9.86530612,10.17755102,10.48979592,10.80204082,11.11428571,11.42653061,11.73877551,12.05102041,12.36326531,12.6755102,12.9877551,13.3       ]

y1 = [-0.21425007,-0.16045716,-0.10789988,-0.05657822,-0.00649218,0.04235823,0.08997303,0.1363522,0.18149575,0.22540368,0.26807599,0.30951268,0.34971374,0.38867919,0.42640901,0.46290321,0.49816179,0.53218474,0.56497208,0.59652379,0.62683989,0.65592036,0.6837652,0.71037443,0.73574804,0.75988602,0.78278838,0.80445512,0.82488624,0.84408174,0.86204161,0.87876586,0.8942545,0.90850751,0.92152489,0.93330666,0.94385281,0.95316333,0.96123823,0.96807751,0.97368117,0.97804921,0.98118162,0.98307842,0.98373959,0.98316514,0.98135507,0.97830937,0.97402806,0.96851112]

t2 =  [930.,930.70707071,931.41414141,932.12121212,932.82828283,933.53535354,934.24242424,934.94949495,935.65656566,936.36363636,937.07070707,937.77777778,938.48484848,939.19191919,939.8989899,940.60606061,941.31313131,942.02020202,942.72727273,943.43434343,944.14141414,944.84848485,945.55555556,946.26262626,946.96969697,947.67676768,948.38383838,949.09090909,949.7979798,950.50505051,951.21212121,951.91919192,952.62626263,953.33333333,954.04040404,954.74747475,955.45454545,956.16161616,956.86868687,957.57575758,958.28282828,958.98989899,959.6969697,960.4040404,961.11111111,961.81818182,962.52525253,963.23232323,963.93939394,964.64646465,965.35353535,966.06060606,966.76767677,967.47474747,968.18181818,968.88888889,969.5959596,970.3030303,971.01010101,971.71717172,972.42424242,973.13131313,973.83838384,974.54545455,975.25252525,975.95959596,976.66666667,977.37373737,978.08080808,978.78787879,979.49494949,980.2020202,980.90909091,981.61616162,982.32323232,983.03030303,983.73737374,984.44444444,985.15151515,985.85858586,986.56565657,987.27272727,987.97979798,988.68686869,989.39393939,990.1010101,990.80808081,991.51515152,992.22222222,992.92929293,993.63636364,994.34343434,995.05050505,995.75757576,996.46464646,997.17171717,997.87878788,998.58585859,999.29292929,1000.        ]

y2 = [-0.11235382,-0.01261221,0.08019689,0.16640183,0.24632084,0.32026221,0.3885244,0.45139624,0.50915704,0.56207678,0.61041626,0.65442723,0.69435257,0.73042644,0.76287442,0.79191369,0.81775315,0.84059362,0.86062795,0.87804121,0.89301081,0.90570669,0.91629144,0.9249205,0.93174226,0.93689826,0.94052332,0.94274571,0.94368728,0.94346364,0.94218431,0.93995286,0.93686709,0.93301915,0.92849573,0.92337819,0.91774273,0.91166053,0.90519793,0.89841654,0.89137345,0.88412133,0.87670865,0.86917975,0.86157507,0.85393127,0.84628139,0.83865501,0.83107838,0.82357461,0.81616382,0.80886326,0.8016875,0.79464857,0.78775612,0.78101757,0.77443827,0.76802165,0.76176937,0.75568149,0.74975662,0.74399206,0.73838396,0.73292749,0.72761698,0.72244608,0.71740792,0.71249524,0.70770059,0.70301643,0.69843534,0.69395011,0.68955396,0.68524067,0.68100472,0.67684144,0.67274721,0.66871956,0.66475737,0.66086099,0.65703242,0.65327544,0.64959579,0.6460013,0.64250207,0.63911062,0.63584201,0.63271404,0.62974738,0.62696574,0.62439601,0.62206842,0.62001669,0.6182782,0.61689412,0.61590959,0.61537386,0.61534045,0.61586731,0.61701695]

因此任务是通过使用依赖于在 3 个参数上,它们是:将使其与 curve1 匹配的 curve2 的高度,x 轴上 t2 中的 移位 将使 curve2 位于 curve1 的顶部,以及然后在 t2 中对曲线 2 本身进行拉伸,以使其适合曲线 1。

或者换一种方式

我正在尝试将 (t2,y2) 中的 curve2 匹配到 (t1,t2) 中的 curve1,然后当它们适当地拟合在一起时,我需要弄清楚:

  1. 我需要多少时间让曲线 2“回到过去”(很清楚 t2 从 930 开始,而 t1 从 0 开始)
  2. 如果曲线 2 必须在高度上拉伸(拉伸多少?)
  3. t2 中的微小调整(称为拉伸),使曲线的起点/上升尽可能对齐

我做了什么:

我理解该任务与曲线拟合有些相关,但我似乎没有做对,因为我无法提出曲线拟合所需的曲线 2 的良好数学函数。 您认为我应该如何实现这一目标?

解决方法

通过观察,曲线2主要由两部分组成(如下图所示):

对于低 t 值,函数看起来像指数函数。

对于高 t 值,该函数看起来像一个逻辑函数。

enter image description here

将两者线性结合,提出了一个更通用的函数:

enter image description here

它们是三个线性作用的参数 a,b,c 和三个非自由作用的参数 p,q,r。需要非线性回归来计算它们。

RMSE=0.017 这还不错,但没有预期的那么好。或许人们可以期待找到更方便的功能以更好地适应。

,

可能有一些库来实现建议的线性变换,可惜我不知道它们。那么,如果这只是一个例子,为什么不直接编码呢?

double maxSeconds = LocalTime.MAX.toSecondOfDay();
int seconds = (int) (maxSeconds * fraction);
LocalTime time = LocalTime.ofSecondOfDay(seconds);
LocalDateTime stamp = date.atTime(time);
System.out.println(stamp);
> 2021-02-06T20:45:14

输出: enter image description here

不同的曲率,这是肯定的。如何量化这种曲率差异是另一个话题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res