24小时热门版块排行榜    

查看: 1383  |  回复: 14
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

丫头丫头2014

银虫 (小有名气)

[求助] 有酬求解答已有2人参与

求解问题如图~

有酬求解答
w89h3810961_1446101849_626.jpg
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Mr__Right

专家顾问 (著名写手)

引用回帖:
2楼: Originally posted by Edstrayer at 2015-11-25 02:12:30
http://muchong.com/bbs/viewthread.php?tid=9555058
重复发帖

这种反求问题,类似于求非线性函数的0点

如果初值恰当,把整个复杂的积分和面积计算写成一个复杂点的“非线性函数”

然后从特定的初值,用牛顿法或类似的求根方法迭代就可以得到合适的解。

类似地,做这个计算工作量太大,还涉及数值计算中的一些基础知识,

如果只是依靠别人计算,楼主始终无法掌握或理解。问题稍微变化,肯定又要求助。

如果前面已经有人给过代码,最后自己好好学习那些代码,不论matlab的还是mathematica的,建议不要贪多,学懂再说。

否则,论文写完,技能没有提升,也是遗憾。
文章乃身外之物,要多考虑编辑、审稿人和读者的感受。
9楼2015-12-28 14:09:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Mr__Right

专家顾问 (著名写手)

【答案】应助回帖

引用回帖:
10楼: Originally posted by cooooldog at 2016-03-22 08:59:16
楼主还在不?

这个问题简单,只须用Newton法反向迭代求解就可以了

只是牛顿法需要求解的方程组表达式对应于曲线围成的面积的求解函数。

楼主如果能冒个泡出来,免费求解。

sweety   hsd3521...

边学习,边回答这个问题。

工具:用Mathematica 解决。求解这类问题,Mathematica首屈一指。

首先是描述两条曲线的代码:
CODE:
ClearAll["Global`*"];
R = 4878/100;
z1 = 6;
r = R/z1;
z2 = z1 - 1;
e = 705/100;
f = r/e;
re = 126/10;
θ = ArcTan[Sin[z1 τ]/(f + Cos[z1 τ])] - τ;
φ = ArcSin[f Sin[θ + τ]] - θ;
ψ = z1/(z1 - 1) φ;

(* 两个参数方程 *)
curve01 = {(R - r) Sin[τ] + e Sin[z2 τ] -  re Sin[θ], (R - r) Cos[τ] - e Cos[z2 τ] +  re Cos[θ]} // Simplify;

(*定子*)
ParametricPlot[curve01,{τ,0,2 π},Exclusions\[Rule]None,MaxRecursion\[Rule]15,PlotPoints->
500,PlotStyle->Red]


(*转子*)
curve02 = {curve01[[1]] Cos[φ - ψ] -  curve01[[2]] Sin[φ - ψ] - e Sin[ψ],
    curve01[[1]] Sin[φ - ψ] +   curve01[[2]] Cos[φ - ψ] - e Cos[ψ]} //Simplify;

base=ParametricPlot[curve02,{τ,0,2 π},Exclusions->None,MaxRecursion->15,PlotPoints->500,PlotStyle->Blue]; Show[base]

上面代码定义各个常数,以及两条曲线的参数方程。因为 并不是一个自然的参数,需要计算曲线封闭的情况下实际的周期是多少,算出来是 ; 并显示根据对称性和Green定理需要求解的1/10图形的样子
CODE:
τp = (y - x) /.FindRoot[(curve02 /. τ -> x) == (curve02 /. τ -> y), {x, Pi/20}, {y, 2 Pi}];

arc = Table[curve02, {τ, 0, τp/10, .00001}];

Show[base,Graphics[{{Red,Line[{curve02 /. τ -> 0, {0, 0},curve02 /. τ -> τp/10}], Line@arc}}]]

然后用Green定理计算转子曲线的面积:
CODE:
τp = 5 Pi/3;
5 (NIntegrate[-First[curve02] D[Last@curve02, τ] +  Last[curve02] D[First@curve02, τ], {τ, 0, τp/10}, Method -> "LocalAdaptive", MaxRecursion -> 100]) // NumberForm[#, 15] &

结果是:
6557.97718280445

现在开始求已知面积是  6557.19 时的 , 需要先把面积表示成   的函数,其它参数都不变; 然后用牛顿法迭代:
CODE:
curveArea[r_]:=Module[{z1,z2,e,f,re,R,θ,φ,ψ,τ,curve01,curve02},
z1=6;
R=r z1;
z2=z1-1;
e=705/100;
f=r/e;
re=126/10;
θ=ArcTan[Sin[z1 τ]/(f+Cos[z1 τ])]-τ;
φ=ArcSin[f Sin[θ+τ]]-θ;
ψ=z1/(z1-1) φ;
curve01={(R-r) Sin[τ]+e Sin[z2 τ]-re Sin[θ],(R-r) Cos[τ]-e Cos[z2 τ]+re Cos[θ]};curve02={curve01[[1]] Cos[φ-ψ]-curve01[[2]] Sin[φ-ψ]-e Sin[ψ],curve01[[1]] Sin[φ-ψ]+curve01[[2]] Cos[φ-ψ]-e Cos[ψ]};
(5 (NIntegrate[-First[curve02] D[Last@curve02,τ]+Last[curve02] D[First@curve02,τ],{τ,0,τp/20,τp/10},MaxRecursion->100,Method->"LocalAdaptive"]))
]

FindRoot[curveArea[x] == 6557.19, {x, 7.5}, Evaluated -> False,Method -> {"Newton", "StepControl" -> "TrustRegion"}] // AbsoluteTiming

我的电脑比较破,用的时间很久, 结果是:
用时间172.41342746027159秒,
对应的
CODE:
r=8.1294128480878

要不是误以为楼主是另外一位同学,我也许就不来解这道题了。不过,总算解完了。希望楼主能够举一反三。

» 本帖已获得的红花(最新10朵)

文章乃身外之物,要多考虑编辑、审稿人和读者的感受。
11楼2016-03-22 20:57:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Mr__Right

专家顾问 (著名写手)

引用回帖:
12楼: Originally posted by 丫头丫头2014 at 2016-05-17 10:49:39
在呢 不知道还可以问吗
...

你问吧。
文章乃身外之物,要多考虑编辑、审稿人和读者的感受。
15楼2016-05-17 16:51:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 丫头丫头2014 的主题更新
信息提示
请填处理意见