Mathematica里这样一组点如何拟合成函数?那位大神给指点一下,谢谢哈 10

039.12662.048639.09044.097238.9826.145638.8028.19438.549710.241538.221812.285637.8111... 0 39.1266
2.0486 39.0904
4.0972 38.982
6.1456 38.802
8.194 38.5497
10.2415 38.2218
12.2856 37.8111
14.3252 37.3185
16.362 36.7497
18.3939 36.1
20.409 35.3495
22.4092 34.5071
24.3998 33.5835
26.3503 32.5399
28.2872 31.4161
30.17 30.17
32.0275 28.8377
33.8113 27.3799
35.5465 25.8261
37.2137 24.1669
38.7874 22.3939
40.2702 20.5187
41.6548 18.5459
42.9295 16.4791
44.0823 14.3232
45.1032 12.0854
45.9838 9.7742
46.7167 7.3992
47.2941 4.9708
47.7076 2.5002
47.9492 0
48.0177 -2.5165
47.9164 -5.0362
47.6397 -7.5454
47.1903 -10.0306
46.6107 -12.4893
45.9161 -14.919
45.1068 -17.3149
44.1822 -19.6712
43.1462 -21.9841
41.9993 -24.2483
40.7391 -26.4563
39.3711 -28.6048
37.897 -30.6884
36.3137 -32.697
34.6295 -34.6295
32.8447 -36.4777
30.9595 -38.2318
28.9838 -39.8928
26.9148 -41.4451
24.7637 -42.8919
22.5304 -44.2184
20.2252 -45.4266
17.8511 -46.5036
15.4179 -47.4514
12.9309 -48.2586
10.3999 -48.9276
7.832 -49.4492
5.2369 -49.8255
2.6231 -50.051
0 -50.1266
-2.6231 -50.051
-5.2369 -49.8254
-7.832 -49.4493
-10.3999 -48.9276
-12.9309 -48.2586
-15.4179 -47.4514
-17.8511 -46.5037
-20.2252 -45.4265
-22.5304 -44.2185
-24.7637 -42.8919
-26.9148 -41.4451
-28.9838 -39.8928
-30.9595 -38.2318
-32.8447 -36.4777
-34.6295 -34.6295
-36.3136 -32.697
-37.8971 -30.6884
-39.3711 -28.6048
-40.7391 -26.4563
-41.9993 -24.2483
-43.1462 -21.9841
-44.1822 -19.6712
-45.1069 -17.3149
-45.9161 -14.919
-46.6107 -12.4893
-47.1903 -10.0306
-47.6396 -7.5454
-47.9164 -5.0362
-48.0179 -2.5165
-47.9491 0
-47.7074 2.5002
-47.2941 4.9708
-46.7168 7.3992
-45.984 9.7742
-45.1034 12.0854
-44.0825 14.3233
-42.9262 16.4791
-41.6549 18.546
-40.2703 20.5187
-38.7874 22.3939
-37.2136 24.1668
-35.5466 25.8261
-33.8114 27.3799
-32.0275 28.8376
-30.1701 30.1701
-28.2872 31.4161
-26.3603 32.5399
-24.3998 33.5835
-22.4091 34.5071
-20.409 35.3495
-18.3939 36.1001
-16.362 36.7496
-14.3251 37.3183
-12.2856 37.8112
-10.2416 38.2221
-8.194 38.5499
-6.1456 38.8018
-4.0971 38.9817
-2.0486 39.0901
0 39.1266
展开
xingye_guang
2014-09-11 · 超过85用户采纳过TA的回答
知道小有建树答主
回答量:128
采纳率:100%
帮助的人:106万
展开全部

拟合吗,需要设定拟合的方法吧!

比如我用最小二乘法拟合你的部分数据,分别用E指数,级数来尝试了下

1:原来数据用ListLinePlot画出,

2:E指数拟合;FindFit[data,model1,{a,b,c},x];其中model=a Exp[b x]+c;

3:x级数拟合;Fit[data,{1,x,x^2,x^3,x^4,x^5,x^6,x^7},x];

之后要自己修正了

追问
这是一个封闭的桃形图案,我希望拟合一个函数,然后好计算任意一段的弧长
多项式显然是不行的,Spline可以画图,但不知道方程是什么,在网上看到有人用傅立叶函数画像,感觉很强大,可又不会弄
xzcyr
2014-10-04 · TA获得超过3388个赞
知道大有可为答主
回答量:1399
采纳率:100%
帮助的人:724万
展开全部

嗯……虽然距离你问出这个问题已经过了满久并且一个似乎并不完全符合你期待的答案也被推荐了但是,鉴于我看完你的追问后有了更好的答案那我还是冒着自降采纳率的风险来答一下题吧。


总之你主要是想算弧长是吧,那就好说了。利用参数方程。


先把你的数据导进来:


data = ImportString@"0 39.1266

   2.0486 39.0904

   4.0972 38.982

   6.1456 38.802

   8.194 38.5497

   10.2415 38.2218

   12.2856 37.8111

   14.3252 37.3185

   16.362 36.7497

   18.3939 36.1

   20.409 35.3495

   22.4092 34.5071

   24.3998 33.5835

   26.3503 32.5399

   28.2872 31.4161

   30.17 30.17

   32.0275 28.8377

   33.8113 27.3799

   35.5465 25.8261

   37.2137 24.1669

   38.7874 22.3939

   40.2702 20.5187

   41.6548 18.5459

   42.9295 16.4791

   44.0823 14.3232

   45.1032 12.0854

   45.9838 9.7742

   46.7167 7.3992

   47.2941 4.9708

   47.7076 2.5002

   47.9492 0

   48.0177 -2.5165

   47.9164 -5.0362

   47.6397 -7.5454

   47.1903 -10.0306

   46.6107 -12.4893

   45.9161 -14.919

   45.1068 -17.3149

   44.1822 -19.6712

   43.1462 -21.9841

   41.9993 -24.2483

   40.7391 -26.4563

   39.3711 -28.6048

   37.897 -30.6884

   36.3137 -32.697

   34.6295 -34.6295

   32.8447 -36.4777

   30.9595 -38.2318

   28.9838 -39.8928

   26.9148 -41.4451

   24.7637 -42.8919

   22.5304 -44.2184

   20.2252 -45.4266

   17.8511 -46.5036

   15.4179 -47.4514

   12.9309 -48.2586

   10.3999 -48.9276

   7.832 -49.4492

   5.2369 -49.8255

   2.6231 -50.051

   0 -50.1266

   -2.6231 -50.051

   -5.2369 -49.8254

   -7.832 -49.4493

   -10.3999 -48.9276

   -12.9309 -48.2586

   -15.4179 -47.4514

   -17.8511 -46.5037

   -20.2252 -45.4265

   -22.5304 -44.2185

   -24.7637 -42.8919

   -26.9148 -41.4451

   -28.9838 -39.8928

   -30.9595 -38.2318

   -32.8447 -36.4777

   -34.6295 -34.6295

   -36.3136 -32.697

   -37.8971 -30.6884

   -39.3711 -28.6048

   -40.7391 -26.4563

   -41.9993 -24.2483

   -43.1462 -21.9841

   -44.1822 -19.6712

   -45.1069 -17.3149

   -45.9161 -14.919

   -46.6107 -12.4893

   -47.1903 -10.0306

   -47.6396 -7.5454

   -47.9164 -5.0362

   -48.0179 -2.5165

   -47.9491 0

   -47.7074 2.5002

   -47.2941 4.9708

   -46.7168 7.3992

   -45.984 9.7742

   -45.1034 12.0854

   -44.0825 14.3233

   -42.9262 16.4791

   -41.6549 18.546

   -40.2703 20.5187

   -38.7874 22.3939

   -37.2136 24.1668

   -35.5466 25.8261

   -33.8114 27.3799

   -32.0275 28.8376

   -30.1701 30.1701

   -28.2872 31.4161

   -26.3603 32.5399

   -24.3998 33.5835

   -22.4091 34.5071

   -20.409 35.3495

   -18.3939 36.1001

   -16.362 36.7496

   -14.3251 37.3183

   -12.2856 37.8112

   -10.2416 38.2221

   -8.194 38.5499

   -6.1456 38.8018

   -4.0971 38.9817

   -2.0486 39.0901

   0 39.1266";

p = ListPlot@data

……你确定这货是桃心?


不管,总之我们现在的思路是寻找参数方程。我们姑且来看一下x和y的情况:

ListPlot@Transpose@data

似乎相当规律嘛,应该可以FindFit,不过,为了通用性,这里我们还是插值好了(FindFit的思路留给你自己探索了):



{x, y} = Interpolation /@ Transpose@data;

Show[p, ParametricPlot[{x[t], y[t]}, {t, 1, Length@data + 1}]]



然后要算长度的话就积分:

NIntegrate[Sqrt[x'[t]^2 + y'[t]^2], {t, 1, 30}]


当然你可能觉得用点的次序做参数不够方便,那你可以考虑用角度,在获取一开始的data的时候做点手脚:

argdata = 

  Most@Transpose@{Arg@Total[{1, I} Transpose@data], #} & /@ Transpose@data;

{argx, argy} = Interpolation /@ argdata;

Show[p, ParametricPlot[{argx[a], argy[a]}, {a, -Pi, Pi}]]


有几条警告,这不成问题。总之,现在自变量变成角度了,应该要直观很多了:


NIntegrate[Sqrt[argx'[a]^2 + argy'[a]^2], {a, 0, Pi/2}] (* 第一象限部分的长度 *)





已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式