热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个转子曲线面积问题及其反问题的解答

曾经解答过这样一个问题,从该ID的最后一次登录时间、该ID显示的专业信息,误以为是新闻里某个想不开的同学,不安了一阵子。经确认是我多虑了,不过把问题答案还是写出来。之后就收到一堆要求帮忙算

曾经解答过这样一个问题,从该ID的最后一次登录时间、该ID显示的专业信息,误以为是新闻里某个想不开的同学,不安了一阵子。经确认是我多虑了,不过把问题答案还是写出来。

之后就收到一堆要求帮忙算东西、做作业的邮件或私信。——虽然碰到类似的情况虚惊了一场,不过有些原则还是坚持的。我觉得对某些问题收费是一个不错的选择。如果碰上这类问题,自己多方努力也还是做不出,求助无门,压力很大,郁闷得快要崩溃,那么,现在有一种转移或分散这种压力的途径:只需要付费,这个压力就能有人分担,而不再是不可调和的。我看到网络有类似的店,感觉不错。因为这对郁闷的同学来说提供了新的可能,让他们可以在 自己再努力一把 " 或者付费解决之间做一个选择,而不再是求助无门。

上个世纪80年代以后出生的高学历的年轻人,可能会因为课题有难度、毕业有压力而轻生,但是,为了几百几千块钱轻生的可能性应该会大大降低吧。——这是缓解矛盾的一种想来有效的方式。

虽然这类问题应该归咎于本科或研究生教育中基础知识准备的缺失,这是一个体制或系统的问题,短期内不太可能有一个和谐的答案。临时的市场化的方式,既创造了就业机会和GDP,也一定程度弥补了系统性的问题,值得鼓励。

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

首先是描述两条曲线的代码:

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]

这里写图片描述

上面代码定义各个常数,以及两条曲线的参数方程。因为 τ 并不是一个自然的参数,需要计算曲线封闭的情况下实际的周期是多少,算出来是 τp=5π/3 。下面代码根据上述结果,显示根据对称性和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] &

数值积分的被积函数带有间断点的情况下,可能产生问题,标出间断点、或者采用LocalAdaptive方式、增加最大迭代次数,可以消除潜在问题或warning message。

结果是:

6557.97718280445

现在开始求已知面积是 6557.19 时的 r , 需要先把面积表示成 r 的函数,其它参数都不变; 然后用牛顿法迭代:
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

信赖域的方法获取迭代步长看上去是最稳健的方法。为了使得自定义函数在迭代中正常使用,需要定义函数使用次序,Evaluated->False就是必要的,这是其它编程语言中使用习惯想象不到的。

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

r=8.1294128480878

这就解答了这个问题。

解答问题使用到了stackexchange.com. 收益匪浅。

这也是乐于解答有一定难度问题的原因。

解答问题主要是,解决有些有趣的有适当难度的问题的过程,可以自我提高和强化既有的知识,并获得帮助人的满足。

——但有些问题纯属家庭作业,难度太低,或者提问者只须做到自己分内工作量就能够自己解答的,这类问题就是自己内心比较抵触回答的。回答问题的定位,不应该是全盘代劳或作 枪手 "

还有一些的确专业性强,解决起来花费超出一般的忍耐限度的更多时间和精力才能解决的问题,老实说,如果不是有特别好的私人关系或雇佣关系,勉为其难出于善意都去做,也不现实。——类似现象在其它方面也能看到,比如,不少明星或富翁做慈善的时候,常常号召大家都来捐款而不是只倾尽自己所有。

在国外的类似于stackexchange.com,stackoverflow.com之类的论坛,如果直接伸手要代码或简单如同家庭作业的问题的答案,通常会遭到一大帮人的群起鄙视,问题也很快会被关掉,处于非active状态。——这是一种非常好的积极向上的风气。

但国内似乎还没有这样的学风。加上防火墙的作用,有时候访问国外的知识性很强的网站还经常不稳定。加上问题比较多的很多学子,本身英语的阅读和表达能力乃至自信心都有欠缺。——所有这些可能是很多学生更愿意在中文语言环境和中文的学风氛围之内寻求解决方案的围栏。

然而很难说下一个碰到的是不是类似极端的例子?——只能说,有条件的,请尽可能去国外的一些论坛上寻求帮助。得到及时而且漂亮答案的几率会大大增加。

提问技巧(来自StackExchange)

Welcome to Mathematics Stack Exchange 靠山屯!

问题的大体格式和内容

To improve the chances of your question getting an answer, make sure that it: 为增加您的问题得到解答的机会,请:

Uses MathJax formatting for math formulas 使用MathJax书写数学公式

Has an interesting, specific title that summarizes the question
标题能够清楚反映自己的问题、有吸引力

Describes what you know and what you don’t understand (don’t just copy a textbook problem!)
介绍自己对哪些已经明白了,哪些还不懂(而不是从书上贴一段问题或手机拍个照片)

问问题的其它技巧

Here are some additional tips:

Search, and research
使用搜索引擎,和对问题的反复搜索研究(研究就是反复搜素?)

Have you thoroughly searched for an answer before asking your question? Sharing your research helps everyone. Tell us what you found (on this site or elsewhere) and why it didn’t meet your needs. This demonstrates that you’ve taken the time to try to help yourself, it saves us from reiterating obvious answers, and above all, it helps you get a more specific and relevant answer!

Be on-topic不同论坛上聚集的回答问题的人专长不同,找适合自己问题的论坛(stackexchange.com有好多子论坛)

Our community is defined by a specific set of topics in the help center; please stick to those topics and avoid asking for opinions or open-ended discussion. If your question is about the site itself, ask on our meta-discussion site. If you’re looking for a different topic, it might be covered on another Stack Exchange site.

Be specific 把问题具体化,不要太笼统;不要把数值问题问成符号问题;避免模糊的表达;如果有难度,最好能提供跟问题相关的背景和细节

If you ask a vague question, you’ll get a vague answer. But if you give us details and context, we can provide a useful, relevant answer.

Make it relevant to others如果问题对他人也会有帮助和启发就更好了,这样更多人会感兴趣,回答的人也更起劲

We like to help as many people at a time as we can. Make it clear how your question is relevant to more people than just you, and more of us will be interested in your question and willing to look into it.

Keep an open mind不钻牛角尖、不认死理、对不或不明白满意的答案不草率下结论;不懂就追问

The answer to your question may not always be the one you wanted, but that doesn’t mean it is wrong. A conclusive answer isn’t always possible. When in doubt, ask people to cite their sources, or to explain how/where they learned something. Even if we don’t agree with you, or tell you exactly what you wanted to hear, remember: we’re just trying to help.


推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • 本文详细介绍了Java库中com.vividsolutions.jts.io.WKTWriter类的appendGeometryCollectionText()方法,并提供了实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 黑马头条项目:Vue 文章详情模块与交互功能实现
    本文详细介绍了如何在黑马头条项目中配置文章详情模块的路由、获取和展示文章详情数据,以及实现关注、点赞、不喜欢和评论功能。通过这些步骤,您可以全面了解如何开发一个完整的前端文章详情页面。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
author-avatar
G肀丨illian茵茵_163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有