作业帮 > 数学 > 作业

用Mathematica 利用非线性最小二乘法 实现曲线拟合 盼您回信

来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/10/06 06:01:23
用Mathematica 利用非线性最小二乘法 实现曲线拟合 盼您回信
数据{0,0},{0.115,0.11},{0.173,0.14},{0.231,0.24},{0.346,0.29},{0.461,0.31},{0.5,0.32} 模型是 D^2/[D^2 + (0.7 D + 2416.4)^2]*(Sin[0.5*x*Sqrt[D*D + (0.84 D + 2899.7)^2]])^2 ----3个方程合为一体 所以有点麻烦
Q1 利用非线性最小二乘法 实现曲线拟合
Q2 求出方程中 D的值
几个月前 经您指导 我照葫芦画瓢 写了代码 但是怎么也运行不了 请您指教
data = {{0,0},{0.115,0.11},{0.173,0.14},{0.231,0.24},{0.346,
0.29},{0.461,0.31},{0.5,0.32}};
model = D^2/[D^2 + (0.7 D + 2416.4)^2]*(Sin[0.5*x*Sqrt[D*D + (0.84 D + 2899.7)^2]])^2;
fit = FindFit[data,{model,{D >= 0}},{D},x]
modelf = Function[{x},Evaluate[model /.fit]]
Plot[modelf[x],{x,0,0.5},Epilog -> Map[Point,data]]
Methematica上面 提示的错误如下
Syntax::sntxf:"D^2/" cannot be followed by "[D^2+(0.7D+2416.4)^2]".
Syntax::tsntxi:"[D^2+(0.7D+2416.4)^2]" is incomplete; more input is needed.
Syntax::sntxi:Incomplete expression; more input is needed.
用Mathematica 利用非线性最小二乘法 实现曲线拟合 盼您回信
呃,一个简单的笔误而已...
data = {{0,0},{0.115,0.11},{0.173,0.14},{0.231,0.24},{0.346,
0.29},{0.461,0.31},{0.5,0.32}};
model = D^2/(D^2 + (0.7 D + 2416.4)^2)*(Sin[
0.5*x*Sqrt[D*D + (0.84 D + 2899.7)^2]])^2;
fit = FindFit[data,{model,{D >= 0}},{D},x]
注意仅仅是把model的表达式的一组[]改成了().
运行前三行代码,结果为
{D -> 1.03161}
其实错误提示已经说得比较明显了,
再问: 多谢您的解答 不好意思 编程和Mathematica这块 我是外行 确实能够运行了 计算出了结果 但是跟我之前的模拟有点出入 Q1计算出来的D应该等于几千左右 (比如7600)现在D=1.03 太小了 Q2我想用非线性最小二乘法 做曲线拟合的图 但是得不出来 这两个问题 您知道 是什么原因吗?
再答: 上次算出D了就没继续往下看了,偷懒了,不好意思,呵呵^^ 把后面两行改成 modelf = Function[{x}, Evaluate[model /. fit]][x] Plot[modelf, {x, 0, 0.5}, Epilog -> Map[Point, data]] 注意也只是把[x]改了个位置.运行结果为 1.82246*10^-7 Sin[1450.28 x]^2 图如所插入.可见是相当密的,还是因为频率过高. 如果D为几千的话,按照拟合函数的形式这频率应该更高了.具体应该是多少我不清楚你的实验的背景不敢妄加猜测,不过感觉用这么高频率的函数仅仅用十来个离散点来拟合误差应该是相当大的. 我试了下把{D>=0}改成1000,2000,...,5000,匹配的D值分别为1.03,1001,2001,...可见意义不大,几乎已经失效. 会不会是拟合函数写的有些问题?你要不再看看?